[coreboot] GSOC USBROM linking problem

Marc Jones marcj303 at gmail.com
Wed Jun 17 19:03:32 CEST 2009


Hi Jason,

Just got this built. I have added -m32 to the cflags and --32 to AS
flags to get it building on 64bit. You might want to add that.


Just to reiterate the problem. I objdump the usb.bin and I see that
the offset to the string is not relative but absolute.

Here is main
00000110 <main>:
     110:       8d 4c 24 04             lea    0x4(%esp),%ecx
     114:       83 e4 f0                and    $0xfffffff0,%esp
     117:       ff 71 fc                pushl  -0x4(%ecx)
     11a:       55                      push   %ebp
     11b:       89 e5                   mov    %esp,%ebp
     11d:       51                      push   %ecx
     11e:       83 ec 04                sub    $0x4,%esp
     121:       e8 3c 00 00 00          call   162 <console_init>
     126:       c7 04 24 45 42 00 00    movl   $0x4245,(%esp)
<------ that is the problem line.
     12d:       e8 ae 00 00 00          call   1e0 <puts>
     132:       eb fe                   jmp    132 <main+0x22>


and data; 66, 6f, 6f is 'foo'
00004245 <.rodata.str1.1>:
    4245:       66 6f                   outsw  %ds:(%esi),(%dx)
    4247:       6f                      outsl  %ds:(%esi),(%dx)


I don't know enough about how this is supposed to work but it looks
like the linker is setting the base to 0x00

.rodata ALIGN(4) :
    {
      *( .rodata)
    } = 0x00

and that is exactly what is in the address, 45 42 00 00.


So, I added -fPIC to the CFLAGS and the code changes to this:

     132:       8d 83 cd fa ff ff       lea    -0x533(%ebx),%eax
     138:       89 04 24                mov    %eax,(%esp)
     13b:       e8 b0 00 00 00          call   1f0 <puts>

which seems better since it is building a relative offset but I have
no idea if it is correct.

It seems like there are a few things that need understanding.
1. How to make the code relocatable.
2. Is libpayload being built so that it can be used relocatable.


Marc

-- 
http://marcjonesconsulting.com




More information about the coreboot mailing list