Thanks. The kernel is now attempting to load the modules. It's now
revealed another situation in that when krtld resolves the references in
the driver the displacements are > 2GB. By default, gcc will use
relative instructions to do calls and get the addresses of external
references. However, these will only work when the displacement is +/-
2GB. This is fine for apps that have shared libraries which can be
mapped anywhere in the address space so that limit is never encountered
but for the kernel and its device drivers this is not the case.

I'm looking to add an architectural option to gcc to cause it to
generate instructions that will use a literal pool instead. This will be
less efficient but will support the entire 64-bit address space. 

The other option, of course, is to rework the map of the kernel address
space so that instead of starting at 0x30000000000 the device drivers
can start at somewhere in the 1GB-2GB range. 

Neale

On Sun, 2007-04-01 at 11:49 -0700, Michael Shapiro wrote:
> TS is kernel/sched/TS.  (or kernel/sched/<isa-name>/TS for the 64-bit ISA).
> The list of files and directories that are used to build the ramdisk is:
> 
> usr/src/cmd/boot/bootadm/filelist.ramdisk
> 
> So you can just put the equivalent stuff in yours, or make the hopefully
> minimal changes to bootadm to get it working.
> 
> -Mike
> 

_______________________________________________
opensolaris-code mailing list
[email protected]
http://mail.opensolaris.org/mailman/listinfo/opensolaris-code

Reply via email to