List Info

Thread: amd64 kernels and text address




amd64 kernels and text address
user name
2008-03-24 07:09:40
Hi,

[ Please CC me as I'm not subscribed to this list. ]

I am trying to add Multiboot support to amd64 kernels.  The
first  
step in doing so is adding the Multiboot header at the
beginning of  
the file (within the first 8KB of the _file_). 
Unfortunately, adding  
that as the very first thing in the entry point at locore.S
does not  
have the desired effect.

Upon further inspection, I noticed the following in the
resulting  
binaries:

Idx Name          Size      VMA               LMA           
   File  
off  Algn
   0 .text         005c4548  ffffffff80100000 
ffffffff80100000   
00100000  2**6
                   CONTENTS, ALLOC, LOAD, READONLY, CODE

Note the offset at which the section is stored in the file: 

0x100000.  Effectively, doing an od -h on the kernel reveals
a 1MB  
gap of zeros at the beginning of the file.

I have tried messing with the kern.ldscript and changing the
text's  
AT statement to use different values.  If they are >=
0x100000, the  
kernel links and the offset in the file is still 100000. 
Using a  
smaller value raises:

ld: kernel: Not enough room for program headers, try linking
with -N

On the other hand, if I try to change the value passed to ld
in - 
Ttext to something smaller to 0x100000 (say 0x50000), then
the  
address correctly changes _and_ the file offset changes
too.

Similarly, passing the -N flag lowers the file offsets to
much lower  
values.

One other thing I tried was putting the multiboot header in
its own  
section, and then making the linker script put that section
before  
text.  Which had no effect, because this custom section
ended  
after .text but before .data and .bss.

At last, doing this same analysis on an i386 kernel shows:

Idx Name          Size      VMA       LMA       File off 
Algn
   0 .text         006d86cc  c0100000  00100000  00001000 
2**6
                   CONTENTS, ALLOC, LOAD, READONLY, CODE

As you can see, the file offset is much smaller, and it need
not  
match the LMA.

So why oh why, in the amd64 case, .text is forced to be at
an offset  
of 0x100000 in the _file_?  It looks like a bug to me.  (Not
to  
mention that the LMA is wrong, but that's easy to correct.)

Thanks.

RE: amd64 kernels and text address
user name
2008-03-27 17:34:08
On 24-Mar-2008 Julio M. Merino Vidal wrote:
> I am trying to add Multiboot support to amd64 kernels. 
The first  
> step in doing so is adding the Multiboot header at the
beginning of  
> the file (within the first 8KB of the _file_). 
Unfortunately, adding  
> that as the very first thing in the entry point at
locore.S does not  
> have the desired effect.

I had this exact problem on the ofppc version of ofwboot. 
Take a look at the
ofwstart.S file there to see how I worked around it.  Also
note, that I used a
second trick to add the same section again later using the
ldscript.

---
Tim Rightnour <rootgarbled.net>
NetBSD: Free multi-architecture OS http://www.netbsd.org/
Genecys: Open Source 3D MMORPG: http://www.genecys.org/

[1-2]

about | contact  Other archives ( Real Estate discussion Medical topics )