On Wednesday, May 16, 2012 9:24:54 am Eric McCorkle wrote:
> On 05/15/12 11:44, John Baldwin wrote:
> > The i386 kernel assumes it starts out with a flat 32-bit mode with
> > the kernel loaded into a contiguous memory region at a fixed
> > physical address. If we need a relocatable kernel (as Marcel
> > hinted at I think), then that adds a fair bit of complication.
> > The amd64 kernel assumes it starts in long mode (the bootinfo64.c
> > bits in the loader setup initial page tables, etc.). I think the
> > amd64 kernel also has to be loaded into contiguous memory at a
> > fixed physical address currently.
> Seems like an initial workaround could be to allocate a space big
> enough for all the necessary ELF segments, and split it up ourselves.
> Do the kernel and modules actually do anything that depends on being
> in a contiguous space in some way (ie some relocation trick)? Because
> it seems like it shouldn't really matter otherwise.
They are statically linked at a fixed address. Modules can be wherever,
but the kernel has to be at the physical address it is linked for (unless
you make the kernel relocatable).