Re: R_386_RELATIVE question

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Gregory Shtrasberg <shtras@xxxxxxxxx> writes:

> Hello. I've got a question about the purpose of R_386_RELATIVE relocation
> Here's a part of disassemble of a library, built as follows:
> g++ -fPIC -c test.cpp -o test.o
> g++ -shared -Wl,-q -o libtest.so test.o
>
> At 0x1bcc there is a R_386_RELATIVE relocation, and the data in this address
> is 0x1c08, which is an address of __dso_handle. As far as I understand, it's
> not the job of R_386_RELATIVE to fix the value, so there should have been a
> linker relocation on 0x1bcc, pointing to 0x1c08. Am I right? (There is no
> other relocation on 0x1bcc besides R_386_RELATIVE)
> Thanks in advance
>
> Disassembly of section .got:
>
> 00001bcc <.got>:
>     1bcc:       08 1c 00                or     %bl,(%eax,%eax,1)
>                         1bcc: R_386_RELATIVE    *ABS*

The value 0x1c08 is already there, in the section contents (see the
bytes "08 1c" and recall that the i386 is little-endian).  The
R_386_RELATIVE directs the dynamic linker to adjust the value by the
load address of the shared library, so that at runtime it will be the
address where __dso_handle winds up.

Ian


[Index of Archives]     [Linux C Programming]     [Linux Kernel]     [eCos]     [Fedora Development]     [Fedora Announce]     [Autoconf]     [The DWARVES Debugging Tools]     [Yosemite Campsites]     [Yosemite News]     [Linux GCC]

  Powered by Linux