OpenSolaris

You are not signed in. Sign in or register.

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 are in the ongoing process of pushing out code to the svn repository and currently it is behind the point of our internal repository but we will catch up. This was done in order to better document the order of the development instead of dropping another tarball.


Important target notes for now 11/1/07

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
 execargs: size = 4096
 hatunloadcallback: vaddr=dfffd000, len=2000
 hatunloadcallback: cb = NULL
 ppcmmualloc: > vmemalloc
 ppcmmualloc: < vmemalloc
 ppcmmusetup: not kernel hat
 ppcmmusetup: > mmusegload
 ppcmmusetup: < mmusegload
 > execargs -> stkcopyout
 -> grow
 -> growinternal: sp=dfffefc0, growszc=0
 <- growinternal: newsize=1000
 asfault: seg->sops->fault = e0204ff4 = unix:segvnfault+0
 <- grow
 < execargs -> stkcopyout
 asfault: seg->sops->fault = e0204ff4 = unix:segvnfault+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

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 at svn dot opensolaris dot 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.

09/06/2007 target boot log


Quite a bit of progress had been made since the October release, see below

PegasosII Boot Strap (c) 2002-2005 bplan GmbH (BUILD 20051216202806)
Running on CPU PVR:80020101
Enable L1 ICache…                                                    Done.
Clean/Flush Block enabled
Reading ICS9248 : 84EFFF3FFFFF                                         Done.
Setting Front Side Bus to 133MHz…                                    Done.
Memory has not changed
Configuring Memory
Memory Config Done
Configuring PCI0…                                                    Done.
Configuring PCI1…                                                    Done.
Configuring ETH…                                                     Done.
Releasing IDE reset …                                                Done.
onfiguring Legacy Devices
Initializing KBD…00000032                                            FAILED.
Testing 10000000 Bytes, Pass: 00000000 Failed: 00000000
RAM TEST (fill random)…                                              Done.
SmartFirmware:
cpu0: PowerPC,74x7 CPUClock 999 Mhz BUSClock 133 Mhz (Version 0x8002,0x0101)
SVEN : initoptionsfromnvram : user
no/bad nvramrc – performing default startup script
channel 0 unit 0 :   ata | ST340014A                                | 3.06
ATA device not present or not responding
channel 1 unit 0 : atapi | SAMSUNG CDRW/DVD SM-352F                 | T900
EMULATION INT HANDLER ENTERED WITH:
INT NO: 15
EAX=0003 EBX=1111 ECX=2222 EDX=3333 ESP=0000 EBP=5555 ESI=6666 EDI=7777
AX=4E08  BX=C405  CX=0003  DX=102A  SP=6C9D  BP=5555  SI=5CF1  DI=7777
DS=C000  ES=BAD0  SS=C000  CS=F000  IP=FE15   NV UP — PL ZR NA PE NC
CS:IP = F4   FS=BAD4  GS=BAD5C536 C000 0244 3000 0000 01B4 AF7F 0200
UNHANDLED INT 10 FUNCTION 0007 WITHIN EMULATION
VM using 1985163 x86 cycles for GFX init
Welcome to SmartFirmware(tm) for bplan Pegasos2
Version 1.2.99 (20060904162246)
SmartFirmware(tm) Copyright 1996-2001 by CodeGen, Inc.
All Rights Reserved.
Pegasos BIOS Extensions Copyright 2001-2005 by bplan GmbH.
All Rights Reserved.
entering main read/eval loop…

======> must first enter the following cmds to move where the eth irq is routed ======> currently there are multiple devices that are generating ints and we do ======> not know who is doing it

ok 54600080 f1000c78 l!
ok a09990 f1000c7c l!
ok 3c680080 f1000c78 l!
ok a01ffff f1000c7c l!

000c78 l!

======> load VOF with a similar command below, depending on your bootsever setup

ok boot eth:192.168.1.10,openfirmware
RRRrhine
init: MAC address is 00:0b:2f:4b:54:20 Device "keyboard" can't be opened for input Device "screen" can't be opened for output

======> VOF is now loaded ======> Use this simple VOF command that will load a kernel from your ======> bootserver nfsroot proto/root

ok boot net -v

======> but first let's get inetboot from tftpboot

Booting "inetboot" from server 192.168.1.10 (vespa2)
Boot device: /pci@80000000/ethernet@d
Boot args: -v
boot: OpenSolaris on PowerPC Boot Interface.
OpenSolaris on PowerPC from Sun Microsystems Laboratories and the PPC Dev         Community Project!
memlistpage = 1860000
scratchnofailmemp = 1871000
scratchmemp = 1871000
Physmem avail:
addr = 0x0:0x111000, size = 0x0:0x3ef000
addr = 0x0:0x55a000, size = 0x0:0xf6a6000
Virtmem avail:
addr = 0x0:0x0, size = 0x0:0x1800000
addr = 0x0:0x184a000, size = 0x0:0x6000
addr = 0x0:0x1871000, size = 0x0:0xfa78f000
Phys installed:
addr = 0x0:0x0, size = 0x0:0x10000000
bootpath: 0x1859600 /pci@80000000/ethernet@d
bootargs: 0x1859700 -v
filename: 0x185e2f0
kernname: 0x1844ae8 /platform/chrp/kernel/unix
boot: bsys_printf is at offset 0x38 instead of 60
boot: this will likely make old kernels die without printing a message.
Physinstalled: addr = 0x0:0x0, size = 0x0:0x10000000
Physfree: addr = 0x0:0x111000, size = 0x0:0x3ef000
addr = 0x0:0x55a000, size = 0x0:0xf6a6000
Virtfree: addr = 0x0:0x0, size = 0x0:0x1800000
addr = 0x0:0x184a000, size = 0x0:0x6000
addr = 0x0:0x1871000, size = 0x0:0xfa78f000
device path '/pci@80000000/ethernet@d'
Now mounting root fs on device /pci@80000000/ethernet@d
Using RARP/BOOTPARAMS…
Internet address is: 192.168.1.11
Internet address (via rarp) is: 192.168.1.11
hostname: polariscl
domainname: sunlabs.sfbay.sun.com
Found 192.168.1.10 @ 0:9:3d:0:13:79
root server: polarisbs (192.168.1.10)
root directory: /bootserv/nfsroot
root fs mounted on device /pci@80000000/ethernet@d
standalone = /platform/chrp/kernel/unix', args = -v'
trying '/platform/chrp/kernel/unix'
Boot file (/platform/chrp/kernel/unix) opened!
fd = 1
calling readelf, elfheader is:
eident 0x7f454c46, 0x1020100, 0x0, 0x0
emachine       0x14
eentry         0xe0001000
eshoff         0x1241c58
eshnentsize    40
eshnum         25
eshstrndx      24
Entry point: e0001000
lseek: args = 1 34 0
Size: Doing header 0x0
phdr
    poffset = 34, pvaddr = 0
    pmemsz = 0, pfilesz = a0
Doing header 0x1
phdr
    poffset = 325400, pvaddr = 0
    pmemsz = 0, pfilesz = b
Doing header 0x2
phdr
    poffset = e0, pvaddr = e0001000
    pmemsz = 3c7e10, pfilesz = 3c7e10
seeking to 0xe0
0x3c7e10+allocating memory: e0001000 3c7e10 0
reading 0x3c7e10 bytes into 0xe0001000
Doing header 0x3
phdr
    poffset = 3c7f00, pvaddr = e2000000
    pmemsz = bc078, pfilesz = 11fbc
seeking to 0x3c7f00
0x11fbc+allocating memory: e2000000 bc078 0
reading 0x11fbc bytes into 0xe2000000
bss from 0xe2011fbc size 0xaa0bc
0xaa0bc Bytes
Doing header 0x4
phdr
    poffset = 3d9798, pvaddr = e2011898
    pmemsz = 0, pfilesz = 88
modpath: /platform/chrp/kernel /kernel /usr/kernel
Opened misc/krtld OK

=====> Got KRTLD, let's get rolling

Calling exitto(e03c8e10)
_edata = e20bc2e0
  libmacroslen=3
  libmacroslen=3

=====> 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

Processor Version Reg (PVR) = 80020101 (version=8002, revision=101)
Found Valid CPU: MPC7457
HID0old=0x8410c09c
    =8410c09c<TBEN,DPM,ICE,DCE,SGE,LRSTK,FOLD,BHT>
HID0new=0x8410c09c
    =8410c09c<TBEN,DPM,ICE,DCE,SGE,LRSTK,FOLD,BHT>
HID0set=0x0
    =0
HID0rst=0x0
    =0
HID1=0x2c80
=2c80<PC3,SYNCBE,ABE>
L2CR=0
L3CR=0
mlsetup.c:117: mlsetup() starting…
Initialized t0 thread.
mlsetup.c:543: fiximpobp() starting…
promsetcachegeometry: try l2-cache
promsetcachelevel: l2-cache
promsetcachegeometry: try l3-cache
mlsetup.c:557: fiximpobp() done.
mlsetup.c:394: configtimebase() starting…
Calculated decincrpertick = 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:425: configtimebase() done.
Loaded decrementer with 0xffff0000
mlsetup.c:303: mlsetup() done.
Running with VOF version 2.0
> ppcmmuinit
< ppcmmuinit
Leaving locore.s … executing main()…
[progress bar init]
startup.c:764: startupinit(): starting…

===> File: chrp/os/startup.c, Line: 765, e001e064 = unix:startupinit+50

 startupinit(): starting…
> startupinit
startup.c:768: startupinit(): bootid()
../../chrp/os/startup.c//startupinit//772

======> Here is the PMDB shell, you need to type in what you want

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  kmemalloc objects of given size whole pages
  config  Run configure
  ttyinit Run ttyinit
  demo    Run demo, just before init
Commands that enable/disable debug trace messages:
  ga      Show native PowerPC genassym
  td      Trap debug
  mmufr   MMU Flight Recorder
  pwatch  Panic on any attempt to modify a watched PTE
  kmf     Set kmemflags = arg[1]
      If no args, set to default value
  cbe     Set cbedebug
Other:
  cf      Show all configuration (startup and debug)
  cfs     show startup options
  cfd     show debug configuration
  go      exit debugger and continue running Solaris
m0 = 
m1 = ch config ei ttyinit go
PMDB configuration:
  Startup:
    Unit test         (ut) : 0
    Copy handlers     (ch) : 0
    Enable Interrupts (ei) : 0
    Read-only ktext   (ro) : 0
    Run configure (config) : 0
    Run ttyinit  (ttyinit) : 0
    Run demo        (demo) : 0
      Debug:
    Trap debug      (td) : 0
    CBE debug      (cbe) : 0
    Genassym        (ga) : 0
    MMU FlightRec(mmufr) : 0
    Panic Watch (pwatch) : 0
    kmemflags     (kmf) : f
pmdb kconf: m1
pmdb kconf: config
pmdb kconf: ch
pmdb kconf: go
> copyhandlers
< copyhandlers
< startupinit
startup.c:791: startupinit() done
startup.c:972: startupmemlist() 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
    ----------------— ----------------—
              0x307000           0x1f9000
              0x922000          0xf2de000
MEMLIST: virt-avail:
    Address            Size
    ----------------— ----------------—
                   0x0          0x1800000
             0x184a000             0x6000
             0x1970000         0xde691000
            0xe03f4000          0x1c0c000
            0xe20cc000         0x19f34000
MEMLIST: bootphysinstalled:
    Address            Size
    ----------------— ----------------—
                   0x0         0x10000000
MEMLIST: bootphysavail:
    Address            Size
    ----------------— ----------------—
              0x307000           0x1f9000
              0x922000          0xf2de000
MEMLIST: bootvirtavail:
    Address            Size
    ----------------— ----------------—
                   0x0          0x1800000
             0x184a000             0x6000
             0x1970000         0xde691000
            0xe03f4000          0x1c0c000
            0xe20cc000         0x19f34000

===> File: chrp/os/startup.c, Line: 1062, e001e608 = unix:startupmemlist+100

 physmax = 0xffff

===> File: chrp/os/startup.c, Line: 1063, e001e638 = unix:startupmemlist+130 physinstalled = 0x10000 probekernelvof: stext = e0001000 etext = e03f30ec sdata = e2000000 edata = e20cba8e ppcmmuptvof ppcmmuptswitch: ptvirt=fdc00000 ptphys=fc00000 ptsize=400000 hashptegmask = ffff ptes=fdc00000, eptes=fe000000, ptsize=400000 startup.c:1081: > startupbuildmemnodes platbuildmemnodes: list=196f000 memnodeaddslice: mnode=0, start=0, end=ffff startup.c:1083: < startupbuildmemnodes

===> File: chrp/os/startup.c, Line: 1100, e001e784 = unix:startupmemlist+27c savail = 0xe20cc000

===> File: chrp/os/startup.c, Line: 1101, e001e7b4 = unix:startupmemlist+2ac eavail = 0xe20cc000

===> File: chrp/os/startup.c, Line: 1108, e001e850 = unix:startupmemlist+348 sgap = 0xe20cc000

===> File: chrp/os/startup.c, Line: 1109, e001e880 = unix:startupmemlist+378 egap = 0xe20cc000

===> File: chrp/os/startup.c, Line: 1110, e001e8b0 = unix:startupmemlist+3a8 savail = 0xe20cc000

===> File: chrp/os/startup.c, Line: 1111, e001e8e0 = unix:startupmemlist+3d8 eavail = 0xe20cc000

===> File: chrp/os/startup.c, Line: 1131, e001ea10 = unix:startupmemlist+508 sgap = 0xe20cc000

===> File: chrp/os/startup.c, Line: 1132, e001ea40 = unix:startupmemlist+538 egap = 0xe20cc000

===> File: chrp/os/startup.c, Line: 1133, e001ea70 = unix:startupmemlist+568 savail = 0xe20cc000

===> File: chrp/os/startup.c, Line: 1134, e001eaa0 = unix:startupmemlist+598 eavail = 0xe20cc000 nucleusalloc: startupmemlist() modtext: remaining space = 0+0, need 6291456 nucleusalloc: startupmemlist() moddata: remaining space = 0+0, need 6291456

===> File: chrp/os/startup.c, Line: 1270, e001edfc = unix:startupmemlist+8f4 smodtext = 0xe03f5000

===> File: chrp/os/startup.c, Line: 1271, e001ee2c = unix:startupmemlist+924 emodtext = 0xe09f5000

===> File: chrp/os/startup.c, Line: 1272, e001ee5c = unix:startupmemlist+954 smoddata = 0xe20cd000

===> File: chrp/os/startup.c, Line: 1273, e001ee8c = unix:startupmemlist+984 emoddata = 0xe26cd000

===> File: chrp/os/startup.c, Line: 1274, e001eebc = unix:startupmemlist+9b4 econtig = 0xe20cc000

===> File: chrp/os/startup.c, Line: 1275, e001eeec = unix:startupmemlist+9e4 savail = 0xe20cc000

===> File: chrp/os/startup.c, Line: 1276, e001ef1c = unix:startupmemlist+a14 eavail = 0xe20cc000

===> File: chrp/os/startup.c, Line: 1300, e001f014 = unix:startupmemlist+b0c physmem = 0xffff

===> File: chrp/os/startup.c, Line: 1313, e001f054 = unix:startupmemlist+b4c memsegsz = 0x104 nucleusalloc: valloctry() memsegbase: remaining space = 0+0, need 260

===> File: chrp/os/startup.c, Line: 1322, e001f0b8 = unix:startupmemlist+bb0 memlistsz = 0x1000 nucleusalloc: valloctry() memlists: remaining space = 0+0, need 4096

===> File: chrp/os/startup.c, Line: 1332, e001f170 = unix:startupmemlist+c68 pagehashsz = 0x10000 nucleusalloc: valloctry() pagehash: remaining space = 0+0, need 65536

===> File: chrp/os/startup.c, Line: 1338, e001f1bc = unix:startupmemlist+cb4 npages = 0xffff

===> File: chrp/os/startup.c, Line: 1340, e001f1fc = unix:startupmemlist+cf4 ppsz = 0x4fffb0 nucleusalloc: valloctry() ppbase: remaining space = 0+0, need 5242800 pagecoloringinit: pcsize=262144 pcassoc=8 pccolors=8 PAGECOLORSMIN=16 pagecolors=16 cpupagecolors=8 colorequiv=0 colorequivszc[0] = 16

===> File: chrp/os/startup.c, Line: 1345, e001f280 = unix:startupmemlist+d78 pagecolormemsz = 0x260

===> File: chrp/os/startup.c, Line: 1349, e001f2d4 = unix:startupmemlist+dcc pagectrssize = 0x298 Init HMEs: sizeof(hmet) = 20 nptes = 524288 nptegp = 32768 NPTEPERPTEGP = 16 sizeof (ptegpt) = 16 nucleusalloc: valloctry() hments: remaining space = 0+0, need 10485760 nucleusalloc: valloctry() ptegps: remaining space = 0+0, need 524288 nucleusalloc: valloctry() ptelockhashtab: 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 ----------------— ----------------— 0x308000 0x1f8000 0x1522000 0xe6de000 MEMLIST: virt-avail: Address Size ----------------— ----------------— 0x0 0x1800000 0x184a000 0x6000 0x1971000 0xde690000 0xe03f4000 0x1000 0xe09f5000 0x160b000 0xe20cc000 0x1000 0xe26cd000 0x19933000 MEMLIST: physinstall: Address Size ----------------— ----------------— 0x0 0x10000000 MEMLIST: physavail: Address Size ----------------— ----------------— 0x308000 0x1f8000 0x1522000 0xe6de000 MEMLIST: virtavail: Address Size ----------------— ----------------— 0x0 0x1800000 0x184a000 0x6000 0x1971000 0xde690000 0xe03f4000 0x1000 0xe09f5000 0x160b000 0xe20cc000 0x1000 0xe26cd000 0x19933000

===> File: chrp/os/startup.c, Line: 1365, e001f364 = unix:startupmemlist+e5c eavail = 0xe20cc000

===> File: chrp/os/startup.c, Line: 1366, e001f394 = unix:startupmemlist+e8c vallocsz = 0xf96000

===> File: chrp/os/startup.c, Line: 1378, e001f46c = unix:startupmemlist+f64 vallocbase = 0xe26cd000 nucleusalloc: performallocations() vallocbase: remaining space = 0+0, need 16343040 valloce26cd000 1000=4K valloce26ce000 1000=4K valloce26cf000 10000=64K valloce26df000 500000=5M valloce2bdf000 1000=4K valloce2be0000 1000=4K valloce2be1000 a00000=10M valloce35e1000 80000=512K valloce3661000 2000=8K [0] bzero(e26cd000, 1000) [1] bzero(e26ce000, 1000) [2] bzero(e26cf000, 10000) [3] bzero(e26df000, 500000) [4] bzero(e2bdf000, 1000) [5] bzero(e2be0000, 1000) [6] bzero(e2be1000, a00000) [7] bzero(e35e1000, 80000) [8] bzero(e3661000, 2000) startup.c:1429: Calling kphysminit()…

===> File: chrp/os/startup.c, Line: 2434, e00212ec = unix:kphysminit+f8 minavail = 0x308000

===> File: chrp/os/startup.c, Line: 2437, e002131c = unix:kphysminit+128 ddiphysmin = 0x2 kphysminit/2441: pmem=1970018 kphysminit/2452: addr=308000 size=1f8000 MEMSEG addr=0x308000 pgs=0x1f8 pfn 0x308-0x500, pmem=1970018, pp=e26df000, curmemseg=e26cd000 kphysminit/2535: -> addphysmem(pp=e26df000, num=1f8, basepfn=308) mtypemodifymax: mnoderangecnt=2 mtypemodifymax: mtype=0, pfn=308, endpfn=500 mtypemodifymax: hipfn=fff, inc=1f8, pfn=500 kphysminit/2537: <- addphysmem kphysminit/2441: pmem=1970030 kphysminit/2452: addr=1522000 size=e6de000 MEMSEG addr=0x1522000 pgs=0xe6de pfn 0x1522-0xfc00, pmem=1970030, pp=e26e8d80, curmemseg=e26cd014 kphysminit/2535: -> addphysmem(pp=e26e8d80, num=e6de, basepfn=1522) mtypemodifymax: mnoderangecnt=2 mtypemodifymax: mtype=0, pfn=1522, endpfn=fc00 mtypemodifymax: mtype=1, pfn=1522, endpfn=fc00 mtypemodifymax: hipfn=ffff, inc=e6de, pfn=fc00 kphysminit/2537: <- addphysmem

===> File: chrp/os/startup.c, Line: 2544, e002194c = unix:kphysminit+758 availrmeminitial = 0xe8d6

===> File: chrp/os/startup.c, Line: 2545, e002197c = unix:kphysminit+788 availrmem = 0xe8d6

===> File: chrp/os/startup.c, Line: 2546, e00219ac = unix:kphysminit+7b8 freemem = 0xe8d6 startup.c:1431: kphysminit() done

===> File: chrp/os/startup.c, Line: 1432, e001f5a0 = unix:startupmemlist+1098 npages = 0xe8d6 printsharedpagespt(fdc00000, 80000) phys share pages


1 9803 PTE @ fdc9b4c0: [0] 0x80000f09 = {V=1,VSID=1e,H=0,API=9} va=e26cd000 [1] 0x1522190 = {RPN=1522,R=1,C=1,WIMG=2=—m-,PP=0=SrwUxx}

===> File: chrp/os/startup.c, Line: 1458, e001f5e8 = unix:startupmemlist+10e0 vallocbase = 0xe26cd000

===> File: chrp/os/startup.c, Line: 1459, e001f618 = unix:startupmemlist+1110 vallocsz = 0xf96000 startup.c:1471: startupmemlist() done startup.c:1532: > startupkmem

===> File: chrp/os/startup.c, Line: 1536, e001f974 = unix:startupkmem+70 heapbase = 0xe3692000

===> File: chrp/os/startup.c, Line: 1544, e001f9ec = unix:startupkmem+e8 bootkernelheap = 0xe36d2000

===> File: chrp/os/startup.c, Line: 1553, e001fa60 = unix:startupkmem+15c kernelheap = 0xe36d2000

===> File: chrp/os/startup.c, Line: 1554, e001fa90 = unix:startupkmem+18c ekernelheap = 0xeb6d2000 startup.c:1562: > kmeminit SunOS Release 5.11 Version polaris-trunk 32-bit Copyright 1983-2007 Sun Microsystems, Inc. All rights reserved. Use is subject to license terms. DEBUG enabled startup.c:1564: < kmeminit startup.c:1594: > bpinit startup.c:1596: < bpinit startup.c:1598: < startupkmem startup.c:1610: startupmodules() starting… startup.c:1619: paramcalc startup.c:1622: modsetup /-\startup.c:1628: paraminit startup.c:1639: hatinit

===> ../../ppc/vm/hatppcmmu.c, line 403, hatinit/ppcmmulockinit

===> ../../ppc/vm/hatppcmmu.c, line 406, hatinit/ppcmmuinit2 startup.c:1645: seginit

seginit segpinit

  • semainit phashtab = 0

    physmem = 65535

  • segpinitmem_config()
segpinitmem_config

< segpinitmemconfig < segpinit < seginit startup.c:1648: modload specfs startup.c:1652: modload devfs startup.c:1656: dispinit Trying setupddi()

  • > setupddiUsing default device instance data
  • > implddicallbackinit<- implddicallbackinit
  • > logeventinit<- logeventinit
  • > fminit<- fminit
  • > iddiloaddrvconf<- iddiloaddrvconf
  • > ldiinit<- ldiinit
  • > iddidevicesinit<- iddidevicesinit
  • > iddireaddevicesfiles
<- iddireaddevicesfiles <- setupddi Finished setupddi() Loading root modules Finished loading root modules Skipping cmiinit() — but that is OK. startup.c:1712: startupmodules() done startup.c:1809: startupvm() starting…

===> File: chrp/os/startup.c, Line: 1897, e002032c = unix:startupvm+50 segmapstart = 0xe3692000

===> File: chrp/os/startup.c, Line: 1898, e002035c = unix:startupvm+80 segmapreserved = 0x40000

===> File: chrp/os/startup.c, Line: 1899, e002038c = unix:startupvm+b0 segmapsize = 0x40000

===> File: chrp/os/startup.c, Line: 1934, e0020450 = unix:startupvm+174 segmapstart = 0xe3694000

===> File: chrp/os/startup.c, Line: 1935, e0020480 = unix:startupvm+1a4 segmapsize = 0x3e000

===> File: chrp/os/startup.c, Line: 1937, e00204d8 = unix:startupvm+1fc finalkernelheap = 0xe36d2000 startup.c:1944: Calling hatkernalloc()… startup.c:1946: hatkernalloc() done startup.c:1956: Protecting boot pages

===> File: chrp/os/startup.c, Line: 1798, e0020298 = unix:protectbootrange+268 bootprotectcnt = 0xb startup.c:1975: Calling hatkernsetup()… startup.c:1977: hatkernsetup() done startup.c:1982: Disabling BOPALLOC setcallback: old 0x0 new 0xe00ab504 Skipping hatcpuonline(CPU) startup.c:1996: Calling kvminit()…

  • > segattach(kas, start=e0001000, size=9f4000, ktextseg)<- segattach
  • ** NOTE: Ensure smoddata..emoddata is in kas.
  • > segkmemcreate(ktextseg)<- segkmemcreate
  • > segattach(kas, start=e26cd000, size=f96000, kvalloc)<- segattach
  • > segkmemcreate(kvalloc)<- segkmemcreate
  • > segattach(finalkernelheap, …)
<- segattach

===> File: chrp/os/startup.c, Line: 2680, e0021bec = unix:kvminit+1f0 kvseg.sbase = 0xe36d2000

  • > segkmemcreate(&kvseg)
<- segkmemcreate

===> File: chrp/os/startup.c, Line: 2684, e0021c40 = unix:kvminit+244 kvseg.sbase = 0xe36d2000 startup.c:1998: kvminit() done

===> File: chrp/os/startup.c, Line: 2011, e002078c = unix:startupvm+4b0 finalkernelheap = 0xe36d2000

===> File: chrp/os/startup.c, Line: 2065, e0020808 = unix:startupvm+52c toxicbitmaplen = 0x7e00

===> File: chrp/os/startup.c, Line: 2069, e0020888 = unix:startupvm+5ac toxicbitmap = 0xe3ecc000 mem = 262144K (0x10000000) Skipping hatinitfinish() startup.c:2149: segkpcreate(segkp) segkpcreate: segkpbitmap=e3eca000, kpsd->kpsdarena=e3d4a690 segkpcreate: kmemzalloc segkpcreate: -> segkpinitmemconfig segkpcreate: <- segkpinitmemconfig

===> File: chrp/os/startup.c, Line: 2156, e0020a34 = unix:startup_vm+758 segkp = 0xe206deb8 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 3f4000 e03f4000 e03f4000 1000 e03f5000 modtext e03f5000 600000 e09f5000 e09f5000 160b000 e2000000 kdata e2000000 cc000 e20cc000 e20cc000 601000 e26cd000 valloc e26cd000 f96000 e3663000 e3663000 d000 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: 2187, e0020b50 = unix:startupvm+874 segmap = 0xe206e7d4

===> File: chrp/os/startup.c, Line: 2188, e0020b80 = unix:startupvm+8a4 segmapstart = 0xe3694000

===> File: chrp/os/startup.c, Line: 2189, e0020bb0 = unix:startupvm+8d4 segmapsize = 0x3e000

===> File: chrp/os/startup.c, Line: 2190, e0020be0 = unix:startupvm+904 segmap->sbase = 0xe3694000

===> File: chrp/os/startup.c, Line: 2191, e0020c10 = unix:startupvm+934 segmap->ssize = 0x3e000 startup.c:2208: Initialize segmapcrargs a startup.c:2213: -> segmapcreate startup.c:2216: <- segmapcreate Skipping { setupvaddrforppcopy(CPU); } Skipping segdevinit() Kernel address space: start = e0001000, size = 9f4000 start = e26cd000, size = f96000 start = e3694000, size = 3e000 start = e36d2000, size = 7e00000 start = ff800000, size = 400000 startup.c:2234: startupvm() done startup.c:2265: startupend() starting… iomemmap: 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} iomemmap: 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} cpuintralloc: cp->cpuintrstack 0xe461bff0 startup.c:2308: Enabling interrupts printsharedpagespt(fdc00000, 80000) phys share pages


1 13570 startup.c:2355: Calling configure()… configure entered configure: returned from checkdriverdisable() implddisunbusnamechild() returned "" implddisunbusinitchild: returned from ddisetnameaddr root nexus = ODW,board implddisunbusnamechild() returned "" implddisunbusinitchild: returned from ddisetnameaddr implddisunbusnamechild() returned "" implddisunbusinitchild: returned from ddisetnameaddr implddisunbusnamechild() returned "" implddisunbusinitchild: returned from ddisetnameaddr pseudo0 at root pseudo0 is /pseudo configure: returned from iddiinitroot() configure: returned from implbusreprobe() startup.c:2357: configure() done machsoftlvltovect: ipl=1, psmsetsoftint=0x0 hatinituserland: vsidr=1 startup.c:2373: startupend() done

[progress bar start] machsoftlvltovect: ipl=10, psmsetsoftint=0x0 machsoftlvltovect: ipl=2, psmsetsoftint=0x0 clkstart: loaded decrementer with 0x51615. Leaving cbeinit:

lgrpplatprobe: maxmemnodes=1, topolimit=4 cpuid.c -> cpuidgetchipid: cpuid is not being read for PPC. cpuid.c -> cpuidgetcoreid: cpicoreid is not being read for PPC. main: about to do spl0() main: about to do vfsmountroot() vfsmountroot: about to call rootconf() pseudo-device: dld0 dld0 is /pseudo/dld@0 implsunbusnamechild: hack – NEEDSWORK! implddisunbusnamechild() returned "c0000000" implddisunbusinitchild: returned from ddisetnameaddr implsunbusnamechild: hack – NEEDSWORK! implddisunbusnamechild() returned "80000000" implddisunbusinitchild: returned from ddisetnameaddr pci1 at root: space 80000000 offset 40000000 todset: not yet implemented!!! WARNING: Time-of-day chip unresponsive; dead batteries? Requesting Internet address for 0:b:2f:4b:54:20 Found my IP address: c0a8010b (192.168.1.11) hostname: polariscl domainname: sunlabs.sfbay.sun.com todset: not yet implemented!!! root on polarisbs:/bootserv/nfsroot fstype nfsdyn WARNING: Cannot find /system/contract WARNING: Cannot mount /proc WARNING: Cannot find /etc/mnttab WARNING: Cannot find /system/object main: about to do errorqinit() machsoftlvltovect: ipl=2, psmsetsoftint=0x0 main: about to do cpukstatinit() main: about to do ddiwalkdevs() main: about to do poststartup() startup.c:2375: poststartup() starting… startup.c:2377: poststartup() done main: just before consconfig() stdin path = /pci@80000000/isa@c/serial@i2f8 stdout path = /pci@80000000/isa@c/serial@i2f8 conskbdlh = e49f71b0 consmslh = e49f70f0 iconsconfigcreatevp: /pseudo/wc@0:wscons lookupname(/devices/pseudo/wc@0:wscons) create vnode = 0xe4dab940 – dev 0x3c0000 linking stream under wc iconsconfigcreatevp: /pseudo/iwscn@0:iwscn lookupname(/devices/pseudo/iwscn@0:iwscn) create vnode = 0xe4dab640 – dev 0x380000 PCI-device: isa0 machsoftlvltovect: ipl=4, psmsetsoftint=0x0 ISA-device: asy0 asy0 is /pci@80000000/isa@c/serial@i2f8 stdindev 1a80000, stdoutdev 1a80000, kbddev ffffffff, mousedev ffffffff console input is tty (/pci@80000000/isa@c/serial@i2f8) iconsconfigcreatevp: /pci@80000000/isa@c/serial@i2f8 lookupname(/devices/pci@80000000/isa@c/serial@i2f8:b) create vnode = 0xe4d9be40 – dev 0x1a80000 consconfigkbdabortenable consconfigsetuppolledio: start consconfigsetuppolledio: registering callbacks consconfigsetuppolledio: end mousedev ffffffff, kbddev ffffffff, fbdev ffffffff, rconsdev 1a80000 main: just before iddiforceattach_drivers() main: just before setupclock()()

startinit startinit_common

ppcmmualloc: > vmemalloc ppcmmualloc: < vmemalloc

startinitcommon -> hat_setup

ppcmmusetup: not kernel hat ppcmmusetup: > mmusegload ppcmmusetup: < mmusegload < startinitcommon -> hatsetup

init_core

< init_core

init_mstate

< init_mstate

exec_init(/sbin/init, 0xe200c200)

execinit: argvlen=12 execinit: p=e4ec1408 execinit: p->pusrstack=dffff000 tcopyops == NULL asfault: seg->sops->fault = e0204ff4 = unix:segvnfault+0

gexec: magic = { 7f 45 4c 46 01 02 01 00 }

elfexec

elfexec: level = 0

elfexec -> getelfhead

< elfexec -> getelfhead

elfexec -> getelfphdr

< elfexec -> getelfphdr execargs: size = 4096 hatunloadcallback: vaddr=dfffd000, len=2000 hatunloadcallback: cb = NULL ppcmmualloc: > vmemalloc ppcmmualloc: < vmemalloc ppcmmusetup: not kernel hat ppcmmusetup: > mmusegload ppcmmusetup: < mmusegload

execargs -> stkcopyout

-> grow -> growinternal: sp=dfffefc0, growszc=0 <- growinternal: newsize=1000 asfault: seg->sops->fault = e0204ff4 = unix:segvnfault+0 <- grow < execargs -> stkcopyout asfault: seg->sops->fault = e0204ff4 = unix:segvnfault+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 restartinit: restarting /sbin/init execinit: argvlen=8 execinit: p=e4ec1408 execinit: p->pusrstack=dffff000 tcopyops == NULL

gexec: magic = { 7f 45 4c 46 01 02 01 00 }

elfexec

elfexec: level = 0

elfexec -> getelfhead

< elfexec -> getelfhead

elfexec -> getelfphdr

< elfexec -> getelfphdr execargs: size = 4096 hatunloadcallback: vaddr=2000000, len=1000 hatunloadcallback: cb->hcbfunction = e01fab64 hatunloadcallback: vaddr=dfffe000, len=1000 hatunloadcallback: cb = NULL ppcmmualloc: > vmemalloc ppcmmualloc: < vmemalloc ppcmmusetup: not kernel hat ppcmmusetup: > mmusegload ppcmmusetup: < mmu_segload

execargs -> stkcopyout

-> grow -> growinternal: sp=dfffefd0, growszc=0 <- growinternal: newsize=1000 asfault: seg->sops->fault = e0204ff4 = unix:segvnfault+0 <- grow < execargs -> stkcopyout asfault: seg->sops->fault = e0204ff4 = unix:segvnfault+0 < elfexec Hello, world! WARNING: init(1M) exited with status 0: restarting automatically restartinit: restarting /sbin/init execinit: argvlen=8 execinit: p=e4ec1408 execinit: p->pusrstack=dffff000 tcopyops == NULL

gexec: magic = { 7f 45 4c 46 01 02 01 00 }

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 clbootstrap misc/clbootstrap
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 TSDPTBL sched/TSDPTBL
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 nfsdlboot misc/nfsdlboot
24 e077b134 3234 strplumb misc/strplumb
25 e077e368 90c macether mac/macether
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 consconfigdacf dacf/consconfigdacf
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