I circumvented the problem I described in the "Ramdisk layout" thread by moving the device drivers location down to within 2GB of the kernel. I'll look at GOT/PLT support in the near future. I'm now loading the modules and getting through startup. It's now crashing in hment_put_reserve as part of the VM subsystem startup.
One thing I had to change was the assumption made in 'load_linker()' in kobj.c was that the kernel code was located before the krtld code. This assumption could lead to negative kmp->text_size/kmp->data_size values. So here's a log of what the startup of OpenSolaris on System z looks like: Installed physical memory: (0x00, 0x08000000) Booter occupied memory (including modules): (0x0c00000, 0x0380000) Ramdisk memory: (0x0400000, 0x0800000) Available physical memory: (0x0200000, 0x0200000)(0x01800000, 0x06800000) Available virtual memory: (0x00, 0x0400000)(0x01800000, 0xfffffffffe7fffff) DAT Enabled using RTO 200000 Relocating the UNIX executable Loaded section at 0x50000 for 0xc1d88 bytes Loaded section at 0x112000 for 0x47d88 bytes Section is located at 0xd00000 Section .interp relocated from 0xd00190 to 0x50190 (11 bytes) Section .hash relocated from 0xd001a0 to 0x501a0 (41344 bytes) Section .dynsym relocated from 0xd0a320 to 0x5a320 (74712 bytes) Section .dynstr relocated from 0xd1c6f8 to 0x6c6f8 (54177 bytes) Section .rela.dyn relocated from 0xd29aa0 to 0x79aa0 (27024 bytes) Section .rela.text relocated from 0xd30430 to 0x80430 (74736 bytes) Section .rela.rodata relocated from 0xd42820 to 0x92820 (9720 bytes) Section .rela.data relocated from 0xd44e18 to 0x94e18 (47088 bytes) Section .text relocated from 0xd50640 to 0xa0640 (364944 bytes) Section .rodata relocated from 0xda97d0 to 0xf97d0 (50594 bytes) Section .eh_frame relocated from 0xdb5d78 to 0x105d78 (49168 bytes) Section .dynamic relocated from 0xdc2000 to 0x112000 (304 bytes) Section .got relocated from 0xdc2130 to 0x112130 (24 bytes) Section .data relocated from 0xdc3000 to 0x113000 (83344 bytes) Section .bss relocated from 0xdd7590 to 0x127590 (206840 bytes) Section .comment is located at 0xdd7590 Section .note is located at 0xdd7ab0 Section .shstrtab is located at 0xdd7ac8 Section .symtab is located at 0xdd7b70 Section .strtab is located at 0xdf0530 Section .SUNW_ctf is located at 0xe028b4 Relocating the KRTLD executable Section is located at 0xf00000 Section .text relocated from 0xf00190 to 0xa400 (49196 bytes) Section .rela.text is located at 0xf42780 Section .rodata relocated from 0xf0c1c0 to 0x16430 (9304 bytes) Section .rela.rodata is located at 0xf4aa60 Section .data relocated from 0xf0e618 to 0x19000 (1216 bytes) Section .rela.data is located at 0xf4b678 Section .eh_frame relocated from 0xf0ead8 to 0x194c0 (7472 bytes) Section .rela.eh_frame is located at 0xf4c218 Section .bss relocated from 0xf10808 to 0x1b200 (864 bytes) Section .comment relocated from 0xf10808 to 0x4da57 (252 bytes) Section .shstrtab is located at 0xf10904 Section .symtab is located at 0xf10978 Section .strtab is located at 0xf14968 Section .SUNW_ctf is located at 0xf15e38 Processing .text Processing .rela.text Relocating: .text Symbols: .symtab Processing .rodata Processing .rela.rodata Relocating: .rodata Symbols: .symtab Processing .data Processing .rela.data Relocating: .data Symbols: .symtab Processing .eh_frame Processing .rela.eh_frame Relocating: .eh_frame Symbols: .symtab Processing .bss Processing .comment Processing .shstrtab Processing .symtab Processing .strtab Processing .SUNW_ctf ramdisk range: 0x400000-c00000 krtld: file=/platform/s390x/unix text: 0x50000 size: 0x0 data: 0x112000 dsize: 0x0 krtld: file=misc/krtld text:0xa400 size: 0x107988 data:0x19000 dsize: 0x14496a /kernel/s390x/genunix symbol getfsname multiply defined /kernel/s390x/genunix symbol rootconf multiply defined krtld: file=/kernel/s390x/genunix text:0x15e028 size: 0x238db0 data:0x396dd8 dsize: 0x561b8 OpenSolaris on System z - Startup commenced Memory size: 128MB Chunks: 1 0. 0000000000000000 08000000 0 Discovering CPUs Boot CPU logical address: 0 hardware address: 0 1 CPUs detected Initializing I/O structures Console address = 0009 Highest subchannel address encountered: 001f I/O Device List starts at 1a3a000 for 5904 bytes SunOS Release 5.11 Version sirius 64-bit Copyright 1983-2006 Sun Microsystems, Inc. All rights reserved. Use is subject to license terms. DEBUG enabled krtld: file=/kernel/fs/specfs text:0x40af2000 size: 0x6a18 data:0x3f9c9e dsize: 0xa8 krtld: file=/kernel/fs/devfs text:0x40b07000 size: 0x7f70 data:0x3fa632 dsize: 0x248 krtld: file=/kernel/misc/swapgeneric text:0x40b3f000 size: 0x1f18 data:0x3fa8a2 dsize: 0x198 krtld: file=/kernel/sched/TS text:0x40b4a000 size: 0x4608 data:0x3faa3a dsize: 0x738 krtld: file=/kernel/sched/TS_DPTBL text:0x40af8a18 size: 0x178 data:0x3fb192 dsize: 0x830 -> 00000000000BD2D0" LG E30020000004 4E445F5052495002 *** 00000000000BD2D0" PROG 0039 -> 00000000000A08B0 REGION FIRST TRANS - This is where it breaks in hment_put_reserve. This message posted from opensolaris.org _______________________________________________ opensolaris-code mailing list opensolaris-code@opensolaris.org http://mail.opensolaris.org/mailman/listinfo/opensolaris-code