Project Status Page

In lieu of a blog we will go a simple route here just posting notes with their associated dates. Jump to the bottom of the page to see the latest boot log output from the target.

We have completed process of pushing out code to the ppc-dev svn repository and the internal Sunlabs repository is now deprecated even though it still functional. While we could drop tarballs it doesn't seem to provide much value but can if requested.

Current tasks in process

  1. Establish outward facing PPC development server vespa2 - done
  2. Establish svn access with both pp-dev and labs polaris-trunk from vespa2 - done
  3. Build vespa2:$HOME/usr/src/uts - done
  4. Build vespa2:/$HOME/usr/src/lib - done - TODO: add rules for automated genassym and assym.h building.
  5. Verify ODW boot and statically linked userland shell - the last development point when the Labs exited the project. - done
  6. Rebuild all tools onbld, gcc, cmd/sgs and verify functionality based on all ppc-dev bits - in process
  7. Update website and associated documentation - ongoing basis
  8. Move druidia and 2nd ODW target to external site - pending
  9. Fix lost MAC address bug to allow other 2 ODW targets to boot on VOF - pending
  10. Sync the ppc-dev source to the latest Open<nop>Solaris repository - pending
  11. Move the current repo control from subversion to Mercurial - pending

Vespa2 as a development system is fully functional

We have succeeded in recreating and then moving one of the Sun<nop>Labs development systems to be publicly available. A serious developer can now log into vespa2.sunlabs.com, pull the ppc-dev source, build it, download their kernel, boot it and debug it on a target Pegasos ODW system there. The statically linked init is a demonstration of a userland program that forks and execs, executes in from user space and returns to the kernel.    

Vespa2 is now externally accessible

It is the first of two standalone development servers have been turned outward facing and is externally accessible by the community. These systems were the original project hardware used by the Pulsar Project and have been generously donated by SunLabs. They will be maintained at the Sun Menlo Park Bldg 16 facility but are not part of the Sun network or any project. This has not been a simple task and some details remain. Pictures are always good so here is the stuff in action. vespa2 shown on the bottom with an ODW board above. There is a network controlled powerstrip that can be used to recycle power and provide reset to the ODW target system. 

jpg](http://www.opensolaris.org/os/project/ppc-dev/status/labdev4_small.jpg "The externally available ppc-dev system")

Now Have 2 Development Systems and 3 Targets -- 02/04/2009

We now have 2 available solaris build and boot servers for our odw targets. They are vespa and vespa2. Additionally we have drudia, a linux server which functions as a boot server for the third odw target. Anyone wanting to use druidia would build their bins on either vespa or vespa2 then scp over to druduia and execute on the odw served from drudia. We will be placing them on the external network shortly and they will be generally available for anyone who would like to do development. 

Development Systems Up -- 01/25/2009

We have emerged from a self imposed hibernation. It seems that the folks really interested in getting a PPC port have returned and are now putting in the effort to make further progress.

Sunlabs has agreed to host the previous development systems and offer remote access. There will be two individual servers each with a ODW target and power / reset control. One setup will have a BDI debugger.

The svn repo has been updated with the final work done by Guy Shaw, this wraps up any direct work by SunLabs. There is a single user prompt in a statically linked init.

Updated SVN repository -- 02/18/2008

Now at rev 111. Major items to note

Bug fixes for missing BRL instruction in a number of critical assembly files
Implement lwp_pcb_exit()

Updated SVN repository -- 11/02/2007

Now at rev 97. Major items to note

We have sync'd with onnv bld 58 --hmmm aren't we a bit behind

Well this is the bulk of the commit, we have not done a merge since earlier this year. Why? It's a messy thing being on a parallel path here, but this will take us from 57 to 58. We will now be spending time on playing catchup to get back in sync with the releases. Guy does this by himself. There is alot more work to do now with each one of these since we are successfully building much more of the consolidation. The lack of accounting for a 3rd architecture can be painfully seen with each one of these but we grind away.

Updates to sgs. We can now build rtld (ld.so.1)

Updated SVN repository -- 10/29/2007

It is now at rev 95. Many updates to lib/ and a number of shared objects are building. We have yet to actually test any of this on the target since we need a functional rtld, which should be here soon.

You will need to build the libs with make -k install. We have a problem with building lint related items and that will get you temporarily past the issue.

To build you will also need the updated toolchain which has a reconfigured gcc which now handles c++. 

Once you have the right shared objects you should also be able to build cmd/init and cmd/sh. 

Sync Up with Sun Labs Source Development Complete -- 10/11/2007

Ok, we're now at rev 93 and the repo is in sync with the Sun Labs development. All of the latest code is out. It should build cleanly, just follow the instructions. If you have any questions, feedback, suggestions or want to jump in post to the discussion list. 

We're in the process of updating the task pages and overall documentation on the project itself. Please take the time to review and provide feedback or information updating.

Successful Bulding of SVN repository -- 10/09/2007

The ppc-dev repo is now at rev 89 this is around the mid Aug 07 development timeline so we're now only a few months behind. Lots of ddi and interrupt development was going on. The additional good news here is that the repo is building on the outside by community members. 

Updated SVN repository -- 09/28/2007

It is now at rev 82 this is now around the June 07 development timeline so the ppc-dev code base is catching up. This putback has updates to the VM, HAT layer and PMDB. A few more drivers completes the PPC driver build dirs and their associated Makefiles.  

Updated SVN repository -- 09/27/2007

It is now at rev 80. This putback generally completes adding the PPC driver build dirs and their associated Makefiles. It also has the start of the CBE work along with update pci nexus and genral interrupt work. There are updates to the tool set that Guy has created, see the work in onbld. Added a bit of support for the EFIKA platform, but ODW continues to be the platform we develop on. 

You may notice in the log alot of comments to code regarding double mappings. This was a problem we fought with for a while before finding an oversight related to the ODW firmware and active BAT regs that we thought were disabled. 

Updated SVN repository -- 09/25/2007

It is now at rev 79. This putback includes a large number of the PPC driver build dirs and Makefiles. It also has the start of the rootnexus and ddi interface.

Updated SVN repository -- 09/20/2007

It is now at rev 78. At this point the interrupt framework and the cbe was just being added. The PMDB (Poor Mans Debugger) was updated and also some VM related work was added. The RHINE ethernet chip driver was added here.

Updated SVN repository -- 09/11/2007

It is now at rev 72. This is about half way through the merge of the ppc-dev tree with bld 57. Best to wait till the whole merge is pushed out before attempting to build and test. Note you will need to load ands run VOF on top of the ODW's firmware. A binary has been provided. 

Updated SVN repository -- 08/28/2007

It is now at rev 62. This includes the beginning merge of the ppc-dev tree with bld 56 which is around the Jan 07 timeframe. Notable commits are related to mdb and other kernel boot funcs.

Updated SVN repository -- 07/23/2007

It is now at rev 38. This is up to the merge of the tree with bld 54. You will have to use the updated toolchain GNU/GCC/AS/solaris ld from now on to build. Get it here

Updated SVN repository -- 06/22/2007

It is now at rev 24. These updates were still related to general work that continued in the kernel bringup but you may also notice the cmd/sgs ld work that's was going on. 

More SVN Updates -- 06/20/2007

Gotta love svn. The merge command works well on files that are already in place. but won't create new files. We've been using svn cat to create the new files, do an svn add, then go for the merge.

Created SVN repository -- 06/10/2007

Populated it with the source from the initial code release. As usual doing something for the 1st time always takes a bit longer to get the hang of it. The SCM management support wasn't available back at the time of the 1st source drop so the tarball was essentially it. You can access according to the std instructions. For example you would have svn+ssh://user@svn.opensolaris.org/svn/ppc-dev/ppc-dev. You also need to be affiliated with the project and have a public key available on your profile. 

Updated GNU Assembler -- 11/27/2006

The GNU ld was covering up the incorrect symbol relocations, fancy that. The new one is here /opt/polaris/powerpc-solaris2/bin/as. The difference is that the new as should generate the proper relocations for unaligned 32 and 16 bit address relocations. With this new as we can go back to compiling with -g -gdwarf-2. 

Merger with build 54 complete -- 11/22/2006

onnv-gate build 54 (2006-Nov-22) and the ppc-dev source base is complete. This is not a simple job, many files must be hand merged after the bulk is integrated. 

Active topics -- 11/20/2006

  1. Figured out problems with inetboot. Restricted reads to 1K as the     ethernet driver in the OF drops back to back packets.  Also randomized the initial port number so that back to back reboots won't have to wait for 4 minutes for the previous connections to time out.
  2. Cross built ld.  Required libconv, libelf, libld, liblddbg as well. Most of usr/src/cmd/sgs builds, but not all.  Skipped over TLS (thread local storage) stuff for now.  Also did nothing for 64-bit.  Main issues surrounded no cross building was envisioned or testing.  Byte flipping issues abound.
  3. kernel and boot both can be properly built by the Solaris ld. We've switched over to the Solaris ld totally now and using the Solaris kernel mapping layout.  Still cannot run at 0xe0000000 as OF has problems dealing with non real mode addresses.
  4. Got krtld working.  Apparently fully functional.  Issues w/byte flipping in doreloc() and addend values were both in the addend field of the relocation and left at the memory location referred to by the relocation.
  5. Worked on and analyzed issues with usr/src/tools/ctf
  6. Started working on mdb/kmdb.  Makefile tree in place.
  7. Created a work around solution for genassym/assym.h until the ctf tools are functional.  Compile the offsets (data table only) with the GNU gcc cross compiler into an assembler file.  Use that assembler file as input into Sun x86 c compiler.  Relies on the fact that the x86 and PowerPC assemblers are very similar.

Move to solaris ld -- 11/09/2006

It is available in /opt/onbld/usr/ccs/bin/ld. There are also the libraries which are in /opt/onbld/lib/.  In order to run the new linker you must set in your environment LD=/opt/onbld/usr/ccs/bin/ld then export LD.

But now we run into some very strange issues with symbol unaligned relocations. Since we use the Metrowerks PowerTAP and Codewarrior for source level debuging we need to have DWARF symbols even though we can build successfully without them. The solaris ld complains, but the GNU ld never did.

(for sh and bsh at least). 

KRTLD update -- 11/07/2006

krtld is running.
inetboot loads /platform/chrp/kernel/unix.
inetboot reads unix and observes that misc/krtld
is required.  inetboot reads in /kernel/misc/krtld.
Control is transferred to krtld.  krtld relocates
itself and then reads unix for its symbols and
well as reading that genunix is needed.  krtld
then reads in genunix and relocates it and
binds everything together.  Control is then
transferred to unix which starts execution. 

Initial project contribution -- 10/02/2006

This was quite a bit of work just to get to this point but now there is a working development system available to all who would like to particpate in any area of this project. There is no closed code, all of the platform source is open. The build is sync with ON a bit past BLD_47. The Polaris task map was updated also.

In simple terms the kernel boots and outputs to the console to a point and then will panic. This is currently during the VM initialization.  Development continues not only on the VM/HAT but in parallel on KRTLD, RTLD. At this time however we statically link unix/genunix to facilitate debugging. The task map  is the best way to obtain details on development status of each area.

--

Important target notes for now 11/1/08

you must add these lines to your asy.conf file in your $ROOT/kernel/drv

    ttyb-ignore-cd=1;
    ttyb-mode="115200,8,n,1,-";

You must enter in the following once the ODW boots and your at the smartfirmware prompt. This will route the ethernet irq to a non shared number. 

    54600080 f1000c78 l!
    a09990 f1000c7c l!
    3c680080 f1000c78 l!
    a01ffff f1000c7c l!
    boot eth:192.168.1.10,openfirmware

The current status is that we are at the point of running our first code from userland. As you can see there is a bit more work to do but progress has been made. In this run we have replaced the "usual" init with a application that is statically linked that simply does an open of the console device, a write of
"Hello, world!" and then exits.

     > elfexec

     elfexec: level = 0
     > elfexec -> getelfhead
     < elfexec -> getelfhead
     > elfexec -> getelfphdr
     < elfexec -> getelfphdr
     exec_args: size = 4096
     hat_unload_callback: vaddr=dfffd000, len=2000
     hat_unload_callback: cb = NULL
     ppcmmu_alloc: > vmem_alloc
     ppcmmu_alloc: < vmem_alloc
     ppcmmu_setup: not kernel hat
     ppcmmu_setup: > mmu_segload
     ppcmmu_setup: < mmu_segload
     > exec_args -> stk_copyout

     \-> grow
     \-> grow_internal: sp=dfffefc0, growszc=0
     <- grow_internal: newsize=1000
     as_fault: seg->s_ops->fault = e0204ff4 = unix:segvn_fault+0
     <- grow
     < exec_args -> stk_copyout
     as_fault: seg->s_ops->fault = e0204ff4 = unix:segvn_fault+0
     < elfexec
     > exec_init -- rc=0
    
     Hello, world!         <--This is what we have been waiting for!!!
    
     WARNING: init(1M) exited with status 0: restarting automatically

To browse the latest project source just go here Note that the cvs viewer appears to be unable to view the recent putbacks on the svn repo. 

01/26/2009 target boot log

--
Quite a bit of progress had been made since the October release, see belowCONNECT THE SERIAL PORT TO THE TARGET

    {{code}}# tip -115200 /dev/ttya
    connected{{/code}}

RESET THE ODW TARGET BY POWER CYCLING OR USING THE BDI-2000 "HALT-RESET-GO"

    {{code}}PegasosII Boot Strap (c) 2002-2004 bplan GmbH
    Running on CPU PVR:80020101
    Enable L1 ICache...                 
    len=3
      libmacros
    len=3
    -module /platform/chrp/kernel/unix: text at [0xe0001000, 0xe03d0f53] data at 0xe2000000 
    module misc/krtld: text at [0xe03d0f54, 0xe03fb7f3] data at 0xe20c04f8{{/code}}

AFTER LOADING KRTLD AND THE KERNEL HERE IS THE FIRST OUTPUT

    {{code}}Processor Version Reg (PVR) = 80020101 (version=8002, revision=101)
    Found Valid CPU: MPC7457
    HID0~_old=0x8410c09c
        =8410c09c<TBEN,DPM,ICE,DCE,SGE,LRSTK,FOLD,BHT>
    HID0~_new=0x8410c09c
        =8410c09c<TBEN,DPM,ICE,DCE,SGE,LRSTK,FOLD,BHT>
    HID0~_set=0x0
        =0
    HID0~_rst=0x0
        =0
    HID1=0x2c80
    =2c80<PC3,SYNCBE,ABE>
    L2CR=0
    L3CR=0
    mlsetup.c:118: mlsetup() starting...
    Initialized t0 thread.
    mlsetup.c:544: fiximp~_obp() starting...
    prom~_set~_cache~_geometry: try l2-cache
    prom~_set~_cache~_level: l2-cache
    prom~_set~_cache~_geometry: try l3-cache
    mlsetup.c:558: fiximp~_obp() done.
    mlsetup.c:395: config~_timebase() starting...
    Calculated dec~_incr~_per~_tick = 0x51615 for 10ms tick
    Obtained timebase frequency = 33333333 hz
    Calculated timebase period = 61440 (30 nsec / tick)
    Calculated timebase ticks per 10usec = 333
    Error per second under =     20480 =        10 ppb
    Error per second over  =  33312853 =     16266 ppb
    mlsetup.c:426: config~_timebase() done.
    Loaded decrementer with 0x7fffffff
    mlsetup.c:304: mlsetup() done.
    Running with VOF version 2.0
    > ppcmmu~_init
    < ppcmmu~_init
    Leaving locore.s ... executing main()...{{/code}}

LIKE IT SAID IT IS IN MAIN

    `[progress bar init]
    startup.c:779: startup~_init(): starting...
    ===> File: chrp/os/startup.c, Line: 780, e001ef24 = unix:startup~_init+50
     startup~_init(): starting...
    > startup~_init
    startup.c:783: startup~_init(): bootid()
    ../../chrp/os/startup.c//startup_init//787
    PMDB = Poor Man's DeBugger
    Kernel configuration shell:
    Commands that affect startup:
      ut      Run unit test
      ch      Copy Solaris interrupt handlers
      ei      Enable Interrupts
      ro      Protect kernel text pages; set to read-only
      kmpage  kmem~_alloc objects of given size whole pages
      config  Run configure
      ttyinit Run ttyinit
      dbinit  Run debug shell after /sbin/init
      demo    Run demo, just before init
    Commands that enable/disable debug trace messages:
      ga      Show native PowerPC genassym
      td      Trap debug
      mfr     Enable MMU Flight Recorder
      ifr     Enable Interrupt Flight Recorder
      pwatch  Panic on any attempt to modify a watched PTE
      kmf     Set kmem~_flags = arg[1]
              If no args, set to default value
      cbe     Set cbe~_debug
    Other:
      cf      Show all configuration (startup and debug)
      cfs     Show startup options
      cfd     Show debug configuration
      go      Exit debugger and continue running Solaris
    m1 = "ch config ei ttyinit dbinit 0d kmf"
    m2 = "ch config ei ttyinit dbinit"{{code}}

SO ABOVE IS THE MENU OF THE PMDB BUT WE JUST RUN THE MACRO "M1 GO"

    {{/code}}pmdb kconf: m1 go
    > copy~_handlers
    < copy~_handlers
    bootops at 0x185f1c4:
      bsys~_version   9
      bsys~_super     0x0
      boot~_mem       0x0
      bsys~_1275~_call 0x1806210
      bsys~_printf    0x1804f30
    < startup~_init
    startup.c:860: startup~_init() done
    startup.c:1091: startup~_memlist() starting...
    phys-installed: 2 elements
    phys-avail: 4 elements
    virt-avail: 10 elements
    MEMLIST: phys-installed:
    	Address            Size
	~----~----
	               0x0         0x10000000
    MEMLIST: phys-avail:
	Address            Size
	~----~----
	          0x2e2000           0x21e000
	          0x92a000          0xf2d6000
    MEMLIST: virt-avail:
	Address            Size
	~----~----
	               0x0          0x1800000
	         0x184a000             0x6000
	         0x1946000         0xde6bb000
	        0xe03fc000          0x1c04000
	        0xe20d1000         0x19f2f000
    MEMLIST: boot~_physinstalled:
	Address            Size
	~----~----
	               0x0         0x10000000
    Total: 1 ranges, 0x10000000 bytes
    MEMLIST: boot~_physavail:
	Address            Size
	~----~----
	          0x2e2000           0x21e000
	          0x92a000          0xf2d6000
    Total: 2 ranges, 0xf4f4000 bytes
    MEMLIST: boot~_virtavail:
	Address            Size
	~----~----
	               0x0          0x1800000
	         0x184a000             0x6000
	         0x1946000         0xde6bb000
	        0xe03fc000          0x1c04000
	        0xe20d1000         0x19f2f000
    Total: 5 ranges, 0xfb9f4000 bytes
    ===> File: chrp/os/startup.c, Line: 1110, e001f7d4 = unix:startup~_memlist+dc
     physmax = 0xffff
    ===> File: chrp/os/startup.c, Line: 1111, e001f804 = unix:startup~_memlist+10c
     physinstalled = 0x10000
    probe~_kernel~_vof:
    s~_text = e0001000
    e~_text = e03fb7f4
    s~_data = e2000000
    e~_data = e20d016e
    ppcmmu~_pt~_vof
    Request to map V=0x0 to R=0x2e2000
    Stack backtrace:
    0xfc01212c
    0xfc0126a8
    0xfc0138dc
    0xfc0258d4
    0xfc01a540
    0xfc0197fc
    0xe00af778
    0xe00af9d4
    0xe00b038c
    0xe0040514
    0xe0040798
    0xe0040f18
    0xe001f870
    0xe001eea4
    0xe0192c6c
    0xe0001110
    ppcmmu~_pt~_switch:
      pt~_virt=fdc00000
      pt~_phys=fc00000
      pt~_size=400000
    hash~_pteg~_mask = ffff
    ptes=fdc00000, eptes=fe000000, pt~_size=400000
    startup.c:1129: > startup\//build//\mem~_nodes
    plat~_build~_mem~_nodes: list=1945000
    mem~_node~_add~_slice: mnode=0, start=0, end=ffff
    startup.c:1131: < startup~_build~_mem~_nodes
    ===> File: chrp/os/startup.c, Line: 1148, e001f950 = unix:startup~_memlist+258
     s~_avail = 0xe20d1000
    ===> File: chrp/os/startup.c, Line: 1149, e001f980 = unix:startup~_memlist+288
     e~_avail = 0xe20d1000
    ===> File: chrp/os/startup.c, Line: 1156, e001fa1c = unix:startup~_memlist+324
     s~_gap = 0xe20d1000
    ===> File: chrp/os/startup.c, Line: 1157, e001fa4c = unix:startup~_memlist+354
     e~_gap = 0xe20d1000
    ===> File: chrp/os/startup.c, Line: 1158, e001fa7c = unix:startup~_memlist+384
     s~_avail = 0xe20d1000
    ===> File: chrp/os/startup.c, Line: 1159, e001faac = unix:startup~_memlist+3b4
     e~_avail = 0xe20d1000
    ===> File: chrp/os/startup.c, Line: 1179, e001fbdc = unix:startup~_memlist+4e4
     s~_gap = 0xe20d1000
    ===> File: chrp/os/startup.c, Line: 1180, e001fc0c = unix:startup~_memlist+514
     e~_gap = 0xe20d1000
    ===> File: chrp/os/startup.c, Line: 1181, e001fc3c = unix:startup~_memlist+544
     s~_avail = 0xe20d1000
    ===> File: chrp/os/startup.c, Line: 1182, e001fc6c = unix:startup~_memlist+574
     e~_avail = 0xe20d1000
    nucleus~_alloc: startup~_memlist() modtext:
      remaining space = 0+0, need 6291456
    nucleus~_alloc: startup~_memlist() moddata:
      remaining space = 0+0, need 6291456
    ===> File: chrp/os/startup.c, Line: 1319, e001ffc8 = unix:startup~_memlist+8d0
     s~_modtext = 0xe03fd000
    ===> File: chrp/os/startup.c, Line: 1320, e001fff8 = unix:startup~_memlist+900
     e~_modtext = 0xe09fd000
    ===> File: chrp/os/startup.c, Line: 1321, e0020028 = unix:startup_memlist+930
     s~_moddata = 0xe20d2000
    ===> File: chrp/os/startup.c, Line: 1322, e0020058 = unix:startup~_memlist+960
     e~_moddata = 0xe26d2000
    ===> File: chrp/os/startup.c, Line: 1323, e0020088 = unix:startup~_memlist+990
     econtig = 0xe20d1000
    ===> File: chrp/os/startup.c, Line: 1324, e00200b8 = unix:startup~_memlist+9c0
     s~_avail = 0xe20d1000
    ===> File: chrp/os/startup.c, Line: 1325, e00200e8 = unix:startup~_memlist+9f0
     e~_avail = 0xe20d1000
    ===> File: chrp/os/startup.c, Line: 1349, e00201e0 = unix:startup~_memlist+ae8
     physmem = 0xffff
    ===> File: chrp/os/startup.c, Line: 1362, e0020220 = unix:startup~_memlist+b28
     memseg~_sz = 0x104
    nucleus~_alloc: valloc~_try() memseg~_base:
      remaining space = 0+0, need 260
    ===> File: chrp/os/startup.c, Line: 1371, e0020284 = unix:startup~_memlist+b8c
     memlist~_sz = 0x1000
    nucleus~_alloc: valloc~_try() memlists:
      remaining space = 0+0, need 4096
    ===> File: chrp/os/startup.c, Line: 1381, e002033c =     unix:startup~_memlist+c44
     pagehash~_sz = 0x10000
    nucleus~_alloc: valloc~_try() page~_hash:
      remaining space = 0+0, need 65536
    ===> File: chrp/os/startup.c, Line: 1387, e0020388 = unix:startup~_memlist+c90
     npages = 0xffff
    ===> File: chrp/os/startup.c, Line: 1389, e00203c8 = unix:startup~_memlist+cd0
     pp~_sz = 0x4fffb0
    nucleus~_alloc: valloc~_try() pp~_base:
      remaining space = 0+0, need 5242800
    page~_coloring~_init:
    pc~_size=262144
    pc~_assoc=8
    pc~_colors=8
    PAGE~_COLORS~_MIN=16
    page~_colors=16
    cpu~_page~_colors=8
    colorequiv=0
    colorequivszc[0] = 16
    ===> File: chrp/os/startup.c, Line: 1394, e002044c =     unix:startup~_memlist+d54
     pagecolor~_memsz = 0x260
    ===> File: chrp/os/startup.c, Line: 1398, e00204a0 = unix:startup~_memlist+da8
     page~_ctrs~_size = 0x298
    Init HMEs:
      sizeof(hme~_t) = 20
      nptes = 524288
      nptegp = 32768
      NPTEPERPTEGP = 16
      sizeof (ptegp~_t) = 16
    nucleus~_alloc: valloc~_try() hments:
      remaining space = 0+0, need 10485760
    nucleus~_alloc: valloc~_try() ptegps:
      remaining space = 0+0, need 524288
    nucleus~_alloc: valloc~_try() ptelock~_hashtab:
      remaining space = 0+0, need 8192
    phys-installed: 2 elements
    phys-avail: 4 elements
    virt-avail: 14 elements
    MEMLIST: phys-installed:
    	Address            Size
    	~----~----
	               0x0         0x10000000
    MEMLIST: phys-avail:
	Address            Size
	~----~----
	          0x2e3000           0x21d000
	         0x152a000          0xe6d6000
    MEMLIST: virt-avail:
	Address            Size
	~----~----
	               0x0          0x1800000
	         0x184a000             0x6000
	         0x1947000         0xde6ba000
	        0xe03fc000             0x1000
	        0xe09fd000          0x1603000
	        0xe20d1000             0x1000
	        0xe26d2000         0x1992e000
    MEMLIST: phys~_install:
	Address            Size
	~----~----
	               0x0         0x10000000
    Total: 1 ranges, 0x10000000 bytes
    MEMLIST: phys~_avail:
	Address            Size
	~----~----
	          0x2e3000           0x21d000
	         0x152a000          0xe6d6000
    Total: 2 ranges, 0xe8f3000 bytes
    MEMLIST: virt~_avail:
	Address            Size
	~----~----
	               0x0          0x1800000
	         0x184a000             0x6000
	         0x1947000         0xde6ba000
	        0xe03fc000             0x1000
	        0xe09fd000          0x1603000
	        0xe20d1000             0x1000
	        0xe26d2000         0x1992e000
    Total: 7 ranges, 0xfadf3000 bytes
    ===> File: chrp/os/startup.c, Line: 1433, e002056c = unix:startup~_memlist+e74
     e~_avail = 0xe20d1000
    ===> File: chrp/os/startup.c, Line: 1434, e002059c = unix:startup~_memlist+ea4
     valloc~_sz = 0xf96000
    ===> File: chrp/os/startup.c, Line: 1446, e0020674 = unix:startup~_memlist+f7c
     valloc~_base = 0xe26d2000
    nucleus~_alloc: perform~_allocations() valloc~_base:
      remaining space = 0+0, need 16343040
    valloc
    valloc
    valloc
    valloc
    valloc
    valloc
    valloc
    valloc
    valloc
    [0] bzero(e26d2000, 1000)
    [1] bzero(e26d3000, 1000)
    [2] bzero(e26d4000, 10000)
    [3] bzero(e26e4000, 500000)
    [4] bzero(e2be4000, 1000)
    [5] bzero(e2be5000, 1000)
    [6] bzero(e2be6000, a00000)
    [7] bzero(e35e6000, 80000)
    [8] bzero(e3666000, 2000)
    phys-installed: 2 elements
    phys-avail: 4 elements
    virt-avail: 14 elements
    MEMLIST: phys-installed:
    	Address            Size
	~----~----
	               0x0         0x10000000
    MEMLIST: phys-avail:
	Address            Size
	~----~----
	          0x2e4000           0x21c000
	         0x24c0000          0xd740000
    MEMLIST: virt-avail:
	Address            Size
	~----~----
	               0x0          0x1800000
	         0x184a000             0x6000
	         0x1948000         0xde6b9000
	        0xe03fc000             0x1000
	        0xe09fd000          0x1603000
	        0xe20d1000             0x1000
	        0xe3668000         0x18998000
    MEMLIST: phys~_avail:
	Address            Size
	~----~----
	          0x2e4000           0x21c000
	         0x24c0000          0xd740000
    Total: 2 ranges, 0xd95c000 bytes
    startup.c:1481: Calling kphysm~_init()...
    kphysm~_init/2625: pmem=1947018
    kphysm~_init/2636: addr=2e4000  size=21c000 
    MEMSEG addr=0x2e4000 pgs=0x21c pfn 0x2e4-0x500, pmem=1947018, pp=e26e4000,     cur~_memseg=e26d2000
    kphysm~_init/2715: -> add~_physmem(pp=e26e4000, num=21c, base~_pfn=2e4)
    mtype~_modify~_max: mnoderangecnt=2
    mtype~_modify~_max: mtype=0, pfn=2e4, endpfn=500
    mtype~_modify~_max: hipfn=fff, inc=21c, pfn=500
    kphysm~_init/2717: <- add~_physmem
    kphysm~_init/2625: pmem=1947030
    kphysm~_init/2636: addr=24c0000  size=d740000 
    MEMSEG addr=0x24c0000 pgs=0xd740 pfn 0x24c0-0xfc00, pmem=1947030,     pp=e26ee8c0, cur~_memseg=e26d2014
    kphysm~_init/2715: -> add~_physmem(pp=e26ee8c0, num=d740, base~_pfn=24c0)
    mtype~_modify~_max: mnoderangecnt=2
    mtype~_modify~_max: mtype=0, pfn=24c0, endpfn=fc00
    mtype~_modify~_max: mtype=1, pfn=24c0, endpfn=fc00
    mtype~_modify~_max: hipfn=ffff, inc=d740, pfn=fc00
    kphysm~_init/2717: <- add~_physmem
    
    ===> File: chrp/os/startup.c, Line: 2724, e0022ff8 = unix:kphysm~_init+5e8
     availrmem~_initial = 0xd95c
    ===> File: chrp/os/startup.c, Line: 2725, e0023028 = unix:kphysm~_init+618
     availrmem = 0xd95c
    ===> File: chrp/os/startup.c, Line: 2726, e0023058 = unix:kphysm~_init+648
     freemem = 0xd95c
    startup.c:1483: kphysm~_init() done
    ===> File: chrp/os/startup.c, Line: 1484, e00207d4 =     unix:startup~_memlist+10dc
     npages = 0xd95c
    print~_shared~_pages~_pt(fdc00000, 80000)
        phys
      share pages
      ~----~----
      1  9792
    Mapping for valloc~_base = e26d2000
        PTE @ fdc9b300:
      [0] 0x80000f09 = {V=1,VSID=1e,H=0,API=9} va=e26d2000
      [1] 0x152a190 = {RPN=152a,R=1,C=1,WIMG=2=~--m-,PP=0=SrwUxx}
    ===> File: chrp/os/startup.c, Line: 1494, e0020834 =     unix:startup~_memlist+113c
     valloc~_base = 0xe26d2000
    ===> File: chrp/os/startup.c, Line: 1495, e0020864 = unix:startup~_memlist+116c
     valloc~_sz = 0xf96000
    startup.c:1519: startup~_memlist() done
    startup.c:1580: > startup~_kmem
    ===> File: chrp/os/startup.c, Line: 1584, e0020bac = unix:startup~_kmem+70
     heap~_base = 0xe3692000
    ===> File: chrp/os/startup.c, Line: 1592, e0020c24 = unix:startup~_kmem+e8
     boot~_kernelheap = 0xe36d2000
    ===> File: chrp/os/startup.c, Line: 1601, e0020c98 = unix:startup~_kmem+15c
     kernelheap = 0xe36d2000
    ===> File: chrp/os/startup.c, Line: 1602, e0020cc8 = unix:startup~_kmem+18c
     ekernelheap = 0xeb6d2000
    startup.c:1610: > kmem~_init{{code}}

THE KERNEL BANNER: WE ARE ALIVE

    {{/code}}SunOS Release 5.11 Version polaris/hat-shaw-2007-12-30@22:05 32-bit
    Copyright 1983-2008 Sun Microsystems, Inc.  All rights reserved.
    Use is subject to license terms.
    DEBUG enabled
    startup.c:1612: < kmem~_init
    startup.c:1642: > bp~_init
    startup.c:1644: < bp~_init
    startup.c:1646: < startup~_kmem
    startup.c:1658: startup~_modules() starting...
    startup.c:1667: param~_calc
    startup.c:1670: mod~_setup
    modload(misc, cl~_bootstrap)
    startup.c:1676: param~_init
    startup.c:1687: hat~_init
    ===> ../../ppc/vm/hat~_ppcmmu.c, line 351, hat~_init/ppcmmu~_lock~_init
    ===> ../../ppc/vm/hat~_ppcmmu.c, line 354, hat~_init/ppcmmu~_init2
    startup.c:1693: seg~_init
    > seg~_init
    > seg~_pinit
** sema~_init
      p~_hashtab = 0
      physmem = 65535
** seg~_pinit~_mem~_config()
    > seg~_pinit~_mem~_config
    < seg~_pinit~_mem~_config
    < seg~_pinit
    < seg~_init
    startup.c:1696: modload specfs
    
    modload(fs, specfs)
    startup.c:1700: modload devfs
    
    modload(fs, devfs)
    startup.c:1704: dispinit
    
    modload(sched, TS)
    Trying setup~_ddi()
    -> setup~_ddi
    Using default device instance data
    -> impl~_ddi~_callback~_init
    <- impl~_ddi~_callback~_init
    -> log~_event~_init
    <- log~_event~_init
    -> fm~_init
    <- fm~_init
    -> i~_ddi~_load~_drvconf
    <- i~_ddi~_load~_drvconf
    -> ldi~_init
    <- ldi~_init
    -> i~_ddi~_devices~_init
    <- i~_ddi~_devices~_init
    -> i~_ddi~_read~_devices~_files
    <- i~_ddi~_read~_devices~_files
    <- setup~_ddi
    Finished setup~_ddi()
    Loading root modules
    
    modload(misc, tlimod)
    modload(strmod, rpcmod)
    modload(misc, nfs~_dlboot)
    modload(mac, mac~_ether)
    modload(misc, strplumb)
    Finished loading root modules
    Skipping cmi~_init() ~-- but that is OK.
    startup.c:1760: startup~_modules() done
    startup.c:1975: startup~_vm() starting...
    
    ===> File: chrp/os/startup.c, Line: 2063, e002195c = unix:startup~_vm+50
         segmap~_start = 0xe3692000
    
    ===> File: chrp/os/startup.c, Line: 2064, e002198c = unix:startup~_vm+80
         segmap~_reserved = 0x40000
    
    ===> File: chrp/os/startup.c, Line: 2065, e00219bc = unix:startup~_vm+b0
         segmapsize = 0x40000
    
    ===> File: chrp/os/startup.c, Line: 2100, e0021a80 = unix:startup~_vm+174
         segmap~_start = 0xe3694000
    
    ===> File: chrp/os/startup.c, Line: 2101, e0021ab0 = unix:startup~_vm+1a4
         segmapsize = 0x3e000
    
    ===> File: chrp/os/startup.c, Line: 2103, e0021b08 = unix:startup~_vm+1fc
         final~_kernelheap = 0xe36d2000
    startup.c:2110: Calling hat~_kern~_alloc()...
    startup.c:2112: hat~_kern~_alloc() done
    startup.c:2117: Calling hat~_kern~_setup()...
    startup.c:2119: hat~_kern~_setup() done
    set~_callback: old 0x0 new 0xe00b07ec
    ~----setup~_prom~_callbacks ~----
    traceback: %fp = e2003e80
    traceback: fp=0xe2003e80, nextfp=0xe2003e90
    e2003e80 e004100c unix:ppcmmu~_pt~_init~_vof+c0
    traceback: fp=0xe2003e90, nextfp=0xe2003ea0
    e2003e90 e004103c unix:ppcmmu~_pt~_init+18
    traceback: fp=0xe2003ea0, nextfp=0xe2003ee0
    e2003ea0 e0021c60 unix:startup~_vm+354
    traceback: fp=0xe2003ee0, nextfp=0xe2003ef0
    e2003ee0 e001eeb4 unix:startup+30
    traceback: fp=0xe2003ef0, nextfp=0xe2003f50
    e2003ef0 e0192c6c unix:main+d0
    traceback: fp=0xe2003f50, nextfp=0x0
    e2003f50 e0001110 unix:~_start+110
    end of traceback
    ~----setup~_prom~_callbacks ~----
    startup.c:2132: Protecting boot pages
    Skipping hat~_cpu~_online(CPU)
    startup.c:2154: Calling kvm~_init()...
    -> seg~_attach(kas, start=e0001000, size=9fc000, ktextseg)
    <- seg~_attach
**** NOTE: Ensure s~_moddata..e~_moddata is in kas.
    -> segkmem~_create(ktextseg)
    <- segkmem~_create
    -> seg~_attach(kas, start=e26d2000, size=f96000, kvalloc)
    <- seg~_attach
    -> segkmem~_create(kvalloc)
    <- segkmem~_create
    -> seg~_attach(final~_kernelheap, ...)
    <- seg~_attach
    
    ===> File: chrp/os/startup.c, Line: 2788, e0023298 = unix:kvm~_init+1f0
         kvseg.s~_base = 0xe36d2000
    -> segkmem~_create(&kvseg)
    <- segkmem~_create
    
    ===> File: chrp/os/startup.c, Line: 2792, e00232ec = unix:kvm~_init+244
         kvseg.s~_base = 0xe36d2000
    startup.c:2156: kvm~_init() done
    
    ===> File: chrp/os/startup.c, Line: 2169, e0021d60 = unix:startup~_vm+454
         final~_kernelheap = 0xe36d2000
    
    ===> File: chrp/os/startup.c, Line: 2223, e0021ddc = unix:startup~_vm+4d0
         toxic~_bit~_map~_len = 0x7e00
    
    ===> File: chrp/os/startup.c, Line: 2227, e0021e5c = unix:startup~_vm+550
         toxic~_bit~_map = 0xe3ece000
    mem = 262144K (0x10000000)
    Skipping hat~_init~_finish()
    startup.c:2307: segkp~_create(segkp)
    segkp~_create: segkp~_bitmap=e3ecc000, kpsd->kpsd~_arena=e3d4a690
    segkp~_create: kmem~_zalloc
    segkp~_create: -> segkpinit~_mem~_config
    segkp~_create: <- segkpinit~_mem~_config
    
    ===> File: chrp/os/startup.c, Line: 2314, e0022008 = unix:startup~_vm+6fc
         segkp = 0xe20722c0
    Virtual address address map:
    name     start      size    end
    ~----~----~----~----
    virt           0 100000000 100000000
        name     start      size    end
        ~----~----~----~----
        user           0  e0000000  e0000000
        kmem    e0000000  10000000  f0000000
            name     start      size    end
            ~----~----~----~----
            ktext   e0000000    3fc000  e03fc000
                    e03fc000      1000  e03fd000
            modtext e03fd000    600000  e09fd000
                    e09fd000   1603000  e2000000
        kdata   e2000000     d1000  e20d1000
                    e20d1000    601000  e26d2000
            valloc  e26d2000    f96000  e3668000
                    e3668000      8000  e3670000
            iomem   e3670000     20000  e3690000
                    e3690000      4000  e3694000
            kmap    e3694000     3e000  e36d2000
            heap    e36d2000   7e00000  eb4d2000
            gap     eb4d2000   4b2e000  f0000000
        prom    f0000000   f800000  ff800000
        dbug    ff800000    400000  ffc00000
        gap     ffc00000    400000 100000000
    
    ===> File: chrp/os/startup.c, Line: 2345, e0022124 = unix:startup~_vm+818
         segmap = 0xe2072bdc
    
    ===> File: chrp/os/startup.c, Line: 2346, e0022154 = unix:startup~_vm+848
         segmap~_start = 0xe3694000
    
    ===> File: chrp/os/startup.c, Line: 2347, e0022184 = unix:startup~_vm+878
         segmapsize = 0x3e000
    
    ===> File: chrp/os/startup.c, Line: 2348, e00221b4 = unix:startup~_vm+8a8
         segmap->s~_base = 0xe3694000
    
    ===> File: chrp/os/startup.c, Line: 2349, e00221e4 = unix:startup~_vm+8d8
         segmap->s~_size = 0x3e000
    startup.c:2366: Initialize segmap~_crargs a
    startup.c:2371: -> segmap~_create
    startup.c:2374: <- segmap~_create
    Skipping segdev~_init()
    Kernel address space:
      start = e0001000, size =   9fc000
      start = e26d2000, size =   f96000
      start = e3694000, size =    3e000
      start = e36d2000, size =  7e00000
      start = ff800000, size =   400000
    startup.c:2388: startup~_vm() done
    startup.c:2419: startup~_end() starting...
    iomem~_map: PCI ISA:
        virt=e3670000, phys=fe000000, size=10000
        PTE @ fdcd9b80:
          [0] 0x80000f0d = {V=1,VSID=1e,H=0,API=d} va=e3670000
          [1] 0xfe000038 = {RPN=fe000,R=0,C=0,WIMG=7=-img,PP=0=SrwUxx}
    iomem~_map: Discovery 2 internal:
        virt=e3680000, phys=f1000000, size=10000
        PTE @ fdcda780:
          [0] 0x80000f0d = {V=1,VSID=1e,H=0,API=d} va=e3680000
          [1] 0xf1000038 = {RPN=f1000,R=0,C=0,WIMG=7=-img,PP=0=SrwUxx}
    startup.c:2468: Enabling interrupts
    print~_shared~_pages~_pt(fdc00000, 80000)
            phys
      share pages
      ~----~----
          1 13575
    startup.c:2515: Calling configure()...
    configure entered
    configure: returned from check~_driver~_disable()
    impl~_ddi~_sunbus~_name~_child() returned ""
    impl~_ddi~_sunbus~_initchild: returned from ddi~_set~_name~_addr
    
    modload(drv, rootnex)
    root nexus = ODW,board
    impl~_ddi~_sunbus~_name~_child() returned ""
    impl~_ddi~_sunbus~_initchild: returned from ddi~_set~_name~_addr
    impl~_ddi~_sunbus~_name~_child() returned ""
    impl~_ddi~_sunbus~_initchild: returned from ddi~_set~_name~_addr
    impl~_ddi~_sunbus~_name~_child() returned ""
    impl~_ddi~_sunbus~_initchild: returned from ddi~_set~_name~_addr
    
    modload(drv, options)
    modload(drv, pseudo)
    pseudo0 at root
    pseudo0 is /pseudo
    
    modload(drv, clone)
    configure: returned from i~_ddi~_init~_root()
    configure: returned from impl~_bus~_reprobe()
    startup.c:2517: configure() done
    mach~_softlvl~_to~_vect: ipl=1, psm~_set~_softint=0x0
    hat~_init~_userland: vsidr=1
    startup.c:2539: startup~_end() done
    
    [progress bar start]
    mach~_softlvl~_to~_vect: ipl=10, psm~_set~_softint=0x0
    mach~_softlvl~_to~_vect: ipl=2, psm~_set~_softint=0x0
    clkstart: loaded decrementer with 0x51615. 
    Leaving cbe~_init: 
    
    lgrp~_plat~_probe: max~_mem~_nodes=1, topo~_limit=4
    cpuid.c -> cpuid~_get~_chipid: cpu~_id is not being read for PPC.
    cpuid.c -> cpuid~_get~_coreid: cpi~_coreid is not being read for PPC.
    vfs~_mountroot: about to call rootconf(){{code}}
    
TIME TO LOAD THE KERNEL MODULES
    {{/code}}modload(fs, nfs)
    modload(drv, dld)
    pseudo-device: dld0
    dld0 is /pseudo/dld@0
    modload(drv, ip)
    modload(drv, ip6)
    modload(drv, tcp)    
    modload(drv, tcp6)    
    modload(drv, udp)    
    modload(drv, udp6)    
    modload(drv, sctp)    
    modload(drv, sctp6)    
    modload(drv, icmp)    
    modload(drv, icmp6)    
    modload(drv, arp)    
    modload(strmod, timod)    
    modload(drv, sad)
    impl~_sunbus~_name~_child: hack - NEEDSWORK!
    impl~_ddi~_sunbus~_name~_child() returned "c0000000"
    impl~_ddi~_sunbus~_initchild: returned from ddi~_set~_name~_addr
    impl~_sunbus~_name~_child: hack - NEEDSWORK!
    impl~_ddi~_sunbus~_name~_child() returned "80000000"
    impl~_ddi~_sunbus~_initchild: returned from ddi~_set~_name~_addr
    
    modload(drv, pci)
    pci1 at root: space 80000000 offset 40000000
    ddi~_map: map~_func=pci:pci~_bus~_map
    ddi~_map: map~_func=pci:pci~_bus~_map
    
    modload(drv, vfe)
    ddi~_map: map~_func=pci:pci~_bus~_map
    ddi~_map: map~_func=pci:pci~_bus~_map
    ddi~_map: map~_func=pci:pci~_bus~_map
    ddi~_map: map~_func=rootnex:rootnex~_map
    ddi~_map: map~_func=pci:pci~_bus~_map
    ddi~_map: map~_func=rootnex:rootnex~_map
    ddi~_map: map~_func=pci:pci~_bus~_map
    ddi~_map: map~_func=rootnex:rootnex~_map
    ddi~_map: map~_func=pci:pci~_bus~_map
    ddi~_map: map~_func=pci:pci~_bus~_map
    ddi~_map: map~_func=pci:pci~_bus~_map
    ddi~_map: map~_func=pci:pci~_bus~_map
    ddi~_map: map~_func=pci:pci~_bus~_map
    ddi~_map: map~_func=pci:pci~_bus~_map
    ddi~_map: map~_func=pci:pci~_bus~_map
    ddi~_map: map~_func=pci:pci~_bus~_map
    tod~_set: not yet implemented!!!
    WARNING: Time-of-day chip unresponsive; dead batteries?
    Requesting Internet address for 0:b:2f:4f:80:3
    Found my IP address: c0a8010b (192.168.1.11)
    hostname: polariscl
    domainname: sunlabs.sfbay.sun.com
    tod~_set: not yet implemented!!!
    WARNING: Time-of-day chip unresponsive; dead batteries?
    root on polarisbs:/bootserv/nfsroot fstype nfsdyn
    
    modload(fs, devfs)
    modload(fs, dev)
    modload(fs, ctfs)
    modload(fs, procfs)
    WARNING: Cannot mount /proc
    WARNING: Cannot find /etc/mnttab
    
    modload(fs, tmpfs)
    modload(fs, objfs)
    mach~_softlvl~_to~_vect: ipl=2, psm~_set~_softint=0x0
    startup.c:2545: post~_startup() starting...
    startup.c:2547: post~_startup() done
    
    modload(drv, conskbd)
    modload(drv, consms)
    modload(drv, wc)
    modload(drv, iwscn)
    ddi~_map: map~_func=pci:pci~_bus~_map
    ddi~_map: map~_func=pci:pci~_bus~_map
    
    modload(drv, isa)
    PCI-device: isa0
    
    modload(drv, asy)
    ddi~_map: map~_func=isa:isa~_map
    ddi~_map: map~_func=pci:pci~_bus~_map
    ddi~_map: map~_func=rootnex:rootnex~_map
    ddi~_map: map~_func=isa:isa~_map
    ddi~_map: map~_func=pci:pci~_bus~_map
    ddi~_map: map~_func=rootnex:rootnex~_map
    ddi~_map: map~_func=isa:isa~_map
    ddi~_map: map~_func=pci:pci~_bus~_map
    ddi~_map: map~_func=rootnex:rootnex~_map
    mach~_softlvl~_to~_vect: ipl=4, psm~_set~_softint=0x0
    ddi~_map: map~_func=isa:isa~_map
    ddi~_map: map~_func=pci:pci~_bus~_map
    ddi~_map: map~_func=rootnex:rootnex~_map
    ddi~_map: map~_func=isa:isa~_map
    ddi~_map: map~_func=pci:pci~_bus~_map
    ddi~_map: map~_func=rootnex:rootnex~_map
    ISA-device: asy0
    asy0 is /pci@80000000/isa@c/serial@i2f8
    
    modload(drv, kssl){{code}}

NOW WE ARE STARTING INIT - BUT WE HAVE A STATICALLY LINKED USERLAND SHELL

INSTEAD AND HAVE RENAMED IT FOR INIT AND IT GIVES US A PROMPT

    {{/code}}> start~_init
    > start~_init~_common
    ppcmmu~_alloc: > vmem~_alloc
    ppcmmu~_alloc: < vmem~_alloc
    ppcmmu~_setup: not kernel hat
    ppcmmu~_setup: > mmu~_segload
    ppcmmu~_setup: < mmu~_segload
    > exec~_init(/sbin/init, 0xe200d478)
    exec~_init: cnt~_exec~_init=1
    exec~_init: argvlen=12
    exec~_init: p=e4e33408
    exec~_init: p->p~_usrstack=dffff000
    t~_copyops == NULL
    
    gexec: magic = { 7f 45 4c 46 01 02 01 00 }
    
    modload(exec, elfexec)
    
    > elfexec
    
    elfexec: level = 0
    > elfexec -> getelfhead
    < elfexec -> getelfhead
    > elfexec -> getelfphdr
    < elfexec -> getelfphdr
    exec~_args: size = 4096
    ppcmmu~_alloc: > vmem~_alloc
    ppcmmu~_alloc: < vmem~_alloc
    ppcmmu~_setup: not kernel hat
    ppcmmu~_setup: > mmu~_segload
    ppcmmu~_setup: < mmu~_segload
    > exec~_args -> stk~_copyout
    -> grow
    -> grow~_internal: sp=dfffefc0, growszc=0
    <- grow~_internal: newsize=1000
    <- grow
    < exec~_args -> stk~_copyout
    execmap: calling uzero(0x20981d4, 0xe2c) (on~_fault in place)
    < elfexec
    setregs: r3 (argc) 0x2 r4 (argcv) 0xdfffefc4 r5 (envp) 0xdfffefd0 r6 (auxv)     0xdfffefd4
    <  exec~_init ~-- rc=0
    map~_addr~_proc(addrp 0xe4eaff38, len 0x6000, off 0x0, vacalign 0x0, userlimit     0xe0001000, p 0xe4e33408, flags 0x382)
    traceback: %fp = e4eafdd0
    traceback: fp=0xe4eafdd0, nextfp=0xe4eafe10
    e4eafdd0 e0028324 unix:map~_addr+a4
    traceback: fp=0xe4eafe10, nextfp=0xe4eafe90
    e4eafe10 e015e010 unix:zmap+14c
    traceback: fp=0xe4eafe90, nextfp=0xe4eaff10
    e4eafe90 e015e31c unix:smmap~_common+240
    traceback: fp=0xe4eaff10, nextfp=0xe4eaff50
    e4eaff10 e015e774 unix:smmap32+b0
    traceback: fp=0xe4eaff50, nextfp=0x0
    e4eaff50 e00023dc unix:sys~_call+f0
    end of traceback
    map~_addr~_proc: base 0x10000 slen 0x2089ca8 p->p~_brkbase 0x2099ca8
    map~_addr~_proc: base 0x10000 slen 0x1ff0000 len 0x18000
    map~_addr~_proc: addr 0x1fe9000
    map~_addr~_proc: addr 0x1fe0000
    map~_addr~_proc: addr 0x1fe0000
    map~_addr~_proc: addr 0x1ff0000
    map~_addr~_proc: returning addrp 0x1ff0000
    
    modload(drv, cn)
    -> grow
    -> grow~_internal: sp=dfffdd60, growszc=0
    <- grow~_internal: newsize=2000
    <- grow
    -> map~_addr~_proc(addrp 0xe4eafe74, len 0x1000, off 0xe4f92000, vacalign 0x1,         userlimit 0xe0001000, p 0xe4e33408, flags 0x0)
    traceback: %fp = e4eafe20
    traceback: fp=0xe4eafe20, nextfp=0xe4eafe60
    e4eafe20 e0028324 unix:map~_addr+a4
    traceback: fp=0xe4eafe60, nextfp=0xe4eafed0
    e4eafe60 e01ec1b4 unix:schedctl~_map+70
    traceback: fp=0xe4eafed0, nextfp=0xe4eaff20
    e4eafed0 e01ebe24 unix:schedctl~_shared~_alloc+130
    traceback: fp=0xe4eaff20, nextfp=0xe4eaff50
    e4eaff20 e01eb440 unix:schedctl+44
    traceback: fp=0xe4eaff50, nextfp=0x0
    e4eaff50 e00023dc unix:sys~_call+f0
    end of traceback
    map~_addr~_proc: base 0x10000 slen 0x2089ca8 p->p~_brkbase 0x2099ca8
    map~_addr~_proc: base 0x10000 slen 0x1fe0000 len 0x13000
    map~_addr~_proc: addr 0x1fde000
    map~_addr~_proc: addr 0x1fd0000
    map~_addr~_proc: addr 0x1fd2000
    map~_addr~_proc: addr 0x1fe2000
    map~_addr~_proc: returning addrp 0x1fe2000
    ppcmmu~_alloc: > vmem~_alloc
    ppcmmu~_alloc: < vmem~_alloc
    Can't exec hello{{code}}

SILLY ME I TRIED TO EXECUTE "HELLO" BUT THAT IS NOT THE CORRECT PROGRAM NAME

    {{/code}}-> map~_addr~_proc(addrp 0xe4fa1e74, len 0x1000, off 0xe4f91000, vacalign 0x1,     userlimit 0xe0001000, p 0xe4e32b88, flags 0x0)
    traceback: %fp = e4fa1e20
    traceback: fp=0xe4fa1e20, nextfp=0xe4fa1e60
    e4fa1e20 e0028324 unix:map~_addr+a4
    traceback: fp=0xe4fa1e60, nextfp=0xe4fa1ed0
    e4fa1e60 e01ec1b4 unix:schedctl~_map+70
    traceback: fp=0xe4fa1ed0, nextfp=0xe4fa1f20
    e4fa1ed0 e01ebe24 unix:schedctl~_shared~_alloc+130
    traceback: fp=0xe4fa1f20, nextfp=0xe4fa1f50
    e4fa1f20 e01eb440 unix:schedctl+44
    traceback: fp=0xe4fa1f50, nextfp=0x0
    e4fa1f50 e00023dc unix:sys~_call+f0
    end of traceback
    map~_addr~_proc: base 0x10000 slen 0x2089ca8 p->p~_brkbase 0x2099ca8
    map~_addr~_proc: base 0x10000 slen 0x1fe0000 len 0x13000
    map~_addr~_proc: addr 0x1fde000
    map~_addr~_proc: addr 0x1fd0000
    map~_addr~_proc: addr 0x1fd1000
    map~_addr~_proc: addr 0x1fe1000
    map~_addr~_proc: returning addrp 0x1fe1000
    ppcmmu~_alloc: > vmem~_alloc
    ppcmmu~_alloc: < vmem~_alloc
    Can't exec hello-hello-kprintf{{code}}

ONCE AGAIN I MISTYPD THE PROGRAM NAME

    {{/code}}-> map~_addr~_proc(addrp 0xe4f95e74, len 0x1000, off 0xe4f90000, vacalign 0x1,     userlimit 0xe0001000, p 0xe4e32308, flags 0x0)
    traceback: %fp = e4f95e20
    traceback: fp=0xe4f95e20, nextfp=0xe4f95e60
    e4f95e20 e0028324 unix:map~_addr+a4
    traceback: fp=0xe4f95e60, nextfp=0xe4f95ed0
    e4f95e60 e01ec1b4 unix:schedctl~_map+70
    traceback: fp=0xe4f95ed0, nextfp=0xe4f95f20
    e4f95ed0 e01ebe24 unix:schedctl~_shared~_alloc+130
    traceback: fp=0xe4f95f20, nextfp=0xe4f95f50
    e4f95f20 e01eb440 unix:schedctl+44
    traceback: fp=0xe4f95f50, nextfp=0x0
    e4f95f50 e00023dc unix:sys~_call+f0
    end of traceback
    map~_addr~_proc: base 0x10000 slen 0x2089ca8 p->p~_brkbase 0x2099ca8
    map~_addr~_proc: base 0x10000 slen 0x1fe0000 len 0x13000
    map~_addr~_proc: addr 0x1fde000
    map~_addr~_proc: addr 0x1fd0000
    map~_addr~_proc: addr 0x1fd0000
    map~_addr~_proc: addr 0x1fe0000
    map~_addr~_proc: returning addrp 0x1fe0000
    ppcmmu~_alloc: > vmem~_alloc
    ppcmmu~_alloc: < vmem~_alloc
    
    gexec: magic = { 7f 45 4c 46 01 02 01 00 }`
 
OK I'VE GOT IT - "HELLO-KPRINTF" WHICH SPITS OUT THE HELLO WORLD
    {{code}}> elfexec
    
    elfexec: level = 0
    > elfexec -> getelfhead
    < elfexec -> getelfhead
    > elfexec -> getelfphdr
    < elfexec -> getelfphdr
    exec~_args: size = 4096
    ppcmmu~_alloc: > vmem~_alloc
    ppcmmu~_alloc: < vmem~_alloc
    ppcmmu~_setup: not kernel hat
    ppcmmu~_setup: > mmu~_segload
    ppcmmu~_setup: < mmu~_segload
    > exec~_args -> stk~_copyout
    -> grow
    -> grow~_internal: sp=dfffefa0, growszc=0
    <- grow~_internal: newsize=1000
    <- grow
    < exec~_args -> stk~_copyout
    < elfexec
    setregs: r3 (argc) 0x1 r4 (argcv) 0xdfffefa4 r5 (envp) 0xdfffefac r6 (auxv)         0xdfffefb8
    
    Hello, world! [1]
    Hello, world! [2]
    Hello, world! [3]
    Hello, world! [4]
    Hello, world! [5]
    Hello, world! [6]
    Hello, world! [7]
    Hello, world! [8]
    Hello, world! [9]
    Hello, world! [10]
    Hello, world!
    
    -> ppcmmu~_alloc: > vmem~_alloc
    ppcmmu~_alloc: < vmem~_alloc
    Unimplemented function: lwp~_stk~_fini(){{/code}}

HERE WE FORCE AN EXCEPTION AND IT DUMPS US BACK INTO PMDB

    `Giving up...

thread = e48587e0:
  lwp         = e4d5e3a0
  lwp errno   = 0
  t_sysnum    = 8e
  t_astflag   = 1
  t_sig_check = 0
traceback: %fp = e4f95c90
traceback: fp=0xe4f95c90, nextfp=0xe4f95d30
e4f95c90 e007d8c8 unix:panic+88
traceback: fp=0xe4f95d30, nextfp=0xe4f95d50
e4f95d30 e0051800 unix:unimplemented_fn+38
traceback: fp=0xe4f95d50, nextfp=0xe4f95d60
e4f95d50 e0051d08 unix:lwp_stk_fini+20
traceback: fp=0xe4f95d60, nextfp=0xe4f95e20
e4f95d60 e0185e04 unix:lwp_create+49c
traceback: fp=0xe4f95e20, nextfp=0xe4f95e80
e4f95e20 e0189054 unix:forklwp+154
traceback: fp=0xe4f95e80, nextfp=0xe4f95f20
e4f95e80 e0153ab0 unix:cfork+708
traceback: fp=0xe4f95f20, nextfp=0xe4f95f50
e4f95f20 e01532fc unix:forksys+6c
traceback: fp=0xe4f95f50, nextfp=0x0
e4f95f50 e00023dc unix:sys_call+f0
end of traceback
MMU state:
--
IBAT0={0, 0}
IBAT1={0, 0}
IBAT2={0, 0}
IBAT3={0, 0}
DBAT0={0, 0}
DBAT1={0, 0}
DBAT2={0, 0}
DBAT3={0, 0}
Segment registers:

  00: 20000040={T=0,Ks=0,Kp=1,N=0,VSID=40} *
  01: 20000041={T=0,Ks=0,Kp=1,N=0,VSID=41} *
  02: 20000042={T=0,Ks=0,Kp=1,N=0,VSID=42} *
  03: 20000043={T=0,Ks=0,Kp=1,N=0,VSID=43} *
  04: 20000044={T=0,Ks=0,Kp=1,N=0,VSID=44} *
  05: 20000045={T=0,Ks=0,Kp=1,N=0,VSID=45} *
  06: 20000046={T=0,Ks=0,Kp=1,N=0,VSID=46} *
  07: 20000047={T=0,Ks=0,Kp=1,N=0,VSID=47} *
  08: 20000048={T=0,Ks=0,Kp=1,N=0,VSID=48} *
  09: 20000049={T=0,Ks=0,Kp=1,N=0,VSID=49} *
  10: 2000004a={T=0,Ks=0,Kp=1,N=0,VSID=4a} *
  11: 2000004b={T=0,Ks=0,Kp=1,N=0,VSID=4b} *
  12: 2000004c={T=0,Ks=0,Kp=1,N=0,VSID=4c} *
  13: 2000004d={T=0,Ks=0,Kp=1,N=0,VSID=4d} *
  14: 2000001e={T=0,Ks=0,Kp=1,N=0,VSID=1e}
  15: 2000001f={T=0,Ks=0,Kp=1,N=0,VSID=1f}
SDR1=fc0003f={HTABORG=fc00000=252M,HTABMASK=3f} ptsize=4M
HID0=0x8410c09c
=8410c09c<TBEN,DPM,ICE,DCE,SGE,LRSTK,FOLD,BHT> HID1=0x2c80 =2c80<PC3,SYNCBE,ABE>

Statistics:
  mutex_enter:    enter=519192, owned=2227, lost_resv=0
  mutex_tryenter: enter=35281, owned=0, lost_resv=0
  atomic: interference=0, lost_resv=0, ov32=0, ovfld=0
PMDB configuration:
  Startup:
Unit test (ut) : 0 Copy handlers (ch) : 1 Enable Interrupts (ei) : 1 Read-only ktext (ro) : 1 Run configure (config) : 1 Run ttyinit (ttyinit) : 1 Debug init (dbinit) : 1 Run demo (demo) : 0 Debug: Trap debug (td) : 0 CBE debug (cbe) : 0 Genassym (ga) : 0 MMU Flight Rec (mfr) : 0 Int Flight Rec (ifr) : 0 Panic Watch (pwatch) : 0 kmem~_flags (kmf) : d PMDB = Poor Man's DeBugger Commands are: mmufr Show MMU flight recorder mod Show modules vmem Show vmems: heap, module {text, data, ctf} dump Show virtual memory (takes address and 32-bit count) trans Show PROM virtual to physical memory translations ptrans Show translations from pagetable ptstat Show pagetable statistics ptegp Show entire PTEG pair for a given virtual address devs Show device tree intr Show information about interrupts reboot Reboot the target go Exit debugger and continue running Solaris pmdb panic:~.~.~. Unknown command, ~.~.~. Type '?' for help on PMDB commands. pmdb panic:~{{code}}

{{/code}}======> VOF is now loaded

> Use this simple VOF command that will load a kernel from your
> bootserver nfsroot proto/root
> but first let's get inetboot from tftpboot
> Got KRTLD, let's get rolling
> See where you have loaded the kernel 
    module /platform/chrp/kernel/unix: text at [0xe0001000, 0xe03c8e0f] data at     0xe2000000
    module misc/krtld: text at [0xe03c8e10, 0xe03f30eb] data at 0xe20bc078
> Here are the first statements from the kernel

Here are the loaded modules

 id  text-va  text-sz name              file-name                       flags
------------
  0 e0001000   3c8a30 unix             /platform/chrp/kernel/unix      
  1 e03c9a30    2a2dc krtld            misc/krtld                      
  2        0        0 cl_bootstrap     misc/cl_bootstrap               
  3 e03f5000     8c1c specfs           fs/specfs                       
  4        0        0 dtrace           dtrace                          
  5 e03fdc1c     918c devfs            fs/devfs                        
  6 e0406da8     6294 TS               sched/TS                        
  7 e040d03c      16c TS_DPTBL         sched/TS_DPTBL                  
  8 e040d1a8     22a4 swapgeneric      misc/swapgeneric                
  9 e040f44c    c96e8 nfs              fs/nfs                          
 10 e04d8b34    28bd0 rpcmod           strmod/rpcmod                   
 11 e0501704     2d44 tlimod           misc/tlimod                     
 12 e0504448     8b2c rpcsec           misc/rpcsec                     
 13 e050cf74    135c4 vfe              drv/vfe                         
 14 e0520538     4c8c mac              misc/mac                        
 15 e05251c4   209f00 ip               drv/ip                          
 16 e072f0c4     4de4 md5              misc/md5                        
 17 e0733ea8    2e29c kcf              misc/kcf                        
 18 e0762144     1e44 swrand           crypto/swrand                   
 19 e0763f88     208c hook             misc/hook                       
 20 e0766014     160c neti             misc/neti                       
 21 e0767620     3c7c pci              drv/pci                         
 22 e076b29c     889c rootnex          drv/rootnex                     
 23 e0773b38     75fc nfs_dlboot       misc/nfs_dlboot                 
 24 e077b134     3234 strplumb         misc/strplumb                   
 25 e077e368      90c mac_ether        mac/mac_ether                   
 26 e077ec74     a4d4 dld              drv/dld                         
 27 e0789148     8154 dls              misc/dls                        
 28 e079129c      434 ip6              drv/ip6                         
 29 e07916d0      44c tcp              drv/tcp                         
 30 e0791b1c      45c tcp6             drv/tcp6                        
 31 e0791f78      4a4 udp              drv/udp                         
 32 e079241c      454 udp6             drv/udp6                        
 33 e0792870      42c sctp             drv/sctp                        
 34 e0792c9c      434 sctp6            drv/sctp6                       
 35 e07930d0     d530 icmp             drv/icmp                        
 36 e07a0600      44c icmp6            drv/icmp6                       
 37 e07a0a4c     a0cc arp              drv/arp                         
 38 e07aab18     6cec timod            strmod/timod                    
 39 e07b1804      234 options          drv/options                     
 40 e07b1a38      f94 pseudo           drv/pseudo                      
 41 e07b29cc      89c clone            drv/clone                       
 42 e07b3268     1734 sad              drv/sad                         
 43 e07b499c    18e84 dev              fs/dev                          
 44 e07cd820     4004 ctfs             fs/ctfs                         
 45        0        0 procfs           fs/procfs                       
 46 e07d1824     b4e4 tmpfs            fs/tmpfs                        
 47 e07dcd08     2a4c objfs            fs/objfs                        
 48 e07df754      1e4 consconfig       misc/consconfig                 
 49 e07df938     481c consconfig_dacf  dacf/consconfig_dacf            
 50 e07e4154     410c conskbd          drv/conskbd                     
 51 e07e8260     55cc kbtrans          misc/kbtrans                    
 52 e07ed82c     24e4 consms           drv/consms                      
 53 e07efd10     213c wc               drv/wc                          
 54 e07f1e4c     68c4 tem              misc/tem                        
 55 e07f8710     129c iwscn            drv/iwscn                       
 56 e07f99ac     3234 isa              drv/isa                         
 57 e07fcbe0     3434 busra            misc/busra                      
 58 e0800014     b914 asy              drv/asy                         
 59 e080b928     c924 kssl             drv/kssl                        
 60 e081824c     67b4 elfexec          exec/elfexec                    
 61 e081ea00      b64 cn               drv/cn`

last modified by admin on 2009/10/26 13:05
Collectives
Project


© Sun Microsystems Inc. 2009
XWiki Enterprise 1.8.2.19075 - Documentation
Terms Of Use | Privacy | Trademarks | Copyright Policy | Site Guidelines | Site map | Help
Your use of this web site or any of its content or software indicates your agreement to be bound by these Terms of Use.