gcc and -fPIC
Gerhard Wiesinger
lists@wiesinger.com
Sat Oct 16 06:06:00 GMT 2004
On Fri, 15 Oct 2004, Andreas Schwab wrote:
> Gerhard Wiesinger <gerhard@wiesinger.com> writes:
>
>> Why is there a call at location 80485b3?
>
> This is used to load the program counter since the x86 does not have a
> pc-relative addressing mode except in calls. That's the only way to get
> the address of the GOT in position independ code.
>
>> So is the code gcc produces (in)correct, or objdump can't read any
>> Position Independent Code?
>
> Neither.
>
BTW: Is it possible to see the dynamic symbols in the disassembly? I don't
see the call to operator delete[](void*) at location 8048592.
=======================================================================
g++ -fPIC -g testnew.cpp -o testnew
objdump -r -R --dynamic-syms --private-headers -S -C testnew | less -I
=======================================================================
DYNAMIC SYMBOL TABLE:
080483d0 DF *UND* 0000002a GLIBCPP_3.2 operator delete(void*)
080483e0 DF *UND* 000004d1 CXXABI_1.2 __gxx_personality_v0
080483f0 DF *UND* 000000f3 GLIBC_2.0 __libc_start_main
080486c0 g DO .rodata 00000004 Base _IO_stdin_used
08048400 DF *UND* 00000039 GLIBCPP_3.2 operator new[](unsigned int)
08048410 DF *UND* 00000026 GLIBCPP_3.2 operator delete[](void*)
00000000 w D *UND* 00000000 _Jv_RegisterClasses
08048420 DF *UND* 000000a3 GLIBCPP_3.2 operator new(unsigned int)
00000000 w D *UND* 00000000 __gmon_start__
delete x;
8048578: 83 ec 0c sub $0xc,%esp
804857b: ff 75 f4 pushl 0xfffffff4(%ebp)
804857e: e8 4d fe ff ff call 80483d0 <_init+0x28>
8048583: 83 c4 10 add $0x10,%esp
delete [] xarray;
8048586: 83 7d f0 00 cmpl $0x0,0xfffffff0(%ebp)
804858a: 74 0e je 804859a <main+0xba>
804858c: 83 ec 0c sub $0xc,%esp
804858f: ff 75 f0 pushl 0xfffffff0(%ebp)
8048592: e8 79 fe ff ff call 8048410 <_init+0x68>
8048597: 83 c4 10 add $0x10,%esp
}
804859a: b8 00 00 00 00 mov $0x0,%eax
804859f: 8d 65 f8 lea 0xfffffff8(%ebp),%esp
80485a2: 5b pop %ebx
80485a3: 5e pop %esi
80485a4: c9 leave
80485a5: c3 ret
=======================================================================
When I just disassemble the object file this works well (but not in the
linked version above):
=======================================================================
g++ -fPIC -g -c testnew.cpp -o testnew.o
objdump -r --private-headers -S -C testnew.o | less -I
=======================================================================
delete [] xarray;
a6: 83 7d f0 00 cmpl $0x0,0xfffffff0(%ebp)
aa: 74 0e je ba <main+0xba>
ac: 83 ec 0c sub $0xc,%esp
af: ff 75 f0 pushl 0xfffffff0(%ebp)
b2: e8 fc ff ff ff call b3 <main+0xb3>
b3: R_386_PLT32 operator delete[](void*)
b7: 83 c4 10 add $0x10,%esp
}
=======================================================================
Any ideas to get the symbols also in the linked version?
Thank you.
Ciao,
Gerhard
More information about the Binutils
mailing list