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