This is the mail archive of the gcc-help@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: R_386_RELATIVE question


Gregory Shtrasberg <shtras@gmail.com> 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 Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]