[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: Specify how undefined weak symbol should be resolved in executable
On Mon, Feb 22, 2016 at 8:40 PM, Alan Modra <amodra@gmail.com> wrote:
>
> However, that might be a bad idea. Lots of C++ code uses weak symbols
> for functions defined in header files, and other objects with vague
> linkage. These result in weak definitions in eg. libstdc++.so. I'm
> not sure how many executables take the address of such functions and
> thus might become DT_TEXTREL.
Most, if not all, of programs will have DT_TEXTREL on x86 if undefined
weak symbols require dynamic relocations.
--
H.J.
---
[hjl@gnu-4 ~]$ objdump -dwr /usr/lib/gcc/x86_64-redhat-linux/5.3.1/crtbegin.o
/usr/lib/gcc/x86_64-redhat-linux/5.3.1/crtbegin.o: file format elf64-x86-64
Disassembly of section .text:
0000000000000000 <deregister_tm_clones>:
0: b8 00 00 00 00 mov $0x0,%eax 1: R_X86_64_32 __TMC_END__+0x7
5: 55 push %rbp
6: 48 2d 00 00 00 00 sub $0x0,%rax 8: R_X86_64_32S .tm_clone_table
c: 48 83 f8 0e cmp $0xe,%rax
10: 48 89 e5 mov %rsp,%rbp
13: 76 1b jbe 30 <deregister_tm_clones+0x30>
15: b8 00 00 00 00 mov $0x0,%eax 16: R_X86_64_32
_ITM_deregisterTMCloneTable
1a: 48 85 c0 test %rax,%rax
1d: 74 11 je 30 <deregister_tm_clones+0x30>
1f: 5d pop %rbp
20: bf 00 00 00 00 mov $0x0,%edi 21: R_X86_64_32 .tm_clone_table
25: ff e0 jmpq *%rax
27: 66 0f 1f 84 00 00 00 00 00 nopw 0x0(%rax,%rax,1)
30: 5d pop %rbp
31: c3 retq
32: 0f 1f 40 00 nopl 0x0(%rax)
36: 66 2e 0f 1f 84 00 00 00 00 00 nopw %cs:0x0(%rax,%rax,1)
0000000000000040 <register_tm_clones>:
40: be 00 00 00 00 mov $0x0,%esi 41: R_X86_64_32 __TMC_END__
45: 55 push %rbp
46: 48 81 ee 00 00 00 00 sub $0x0,%rsi 49: R_X86_64_32S .tm_clone_table
4d: 48 c1 fe 03 sar $0x3,%rsi
51: 48 89 e5 mov %rsp,%rbp
54: 48 89 f0 mov %rsi,%rax
57: 48 c1 e8 3f shr $0x3f,%rax
5b: 48 01 c6 add %rax,%rsi
5e: 48 d1 fe sar %rsi
61: 74 15 je 78 <register_tm_clones+0x38>
63: b8 00 00 00 00 mov $0x0,%eax 64: R_X86_64_32
_ITM_registerTMCloneTable
68: 48 85 c0 test %rax,%rax
6b: 74 0b je 78 <register_tm_clones+0x38>
6d: 5d pop %rbp
6e: bf 00 00 00 00 mov $0x0,%edi 6f: R_X86_64_32 .tm_clone_table
73: ff e0 jmpq *%rax
75: 0f 1f 00 nopl (%rax)
78: 5d pop %rbp
79: c3 retq
7a: 66 0f 1f 44 00 00 nopw 0x0(%rax,%rax,1)
0000000000000080 <__do_global_dtors_aux>:
80: 80 3d 00 00 00 00 00 cmpb $0x0,0x0(%rip) # 87
<__do_global_dtors_aux+0x7> 82: R_X86_64_PC32 .bss-0x5
87: 75 11 jne 9a <__do_global_dtors_aux+0x1a>
89: 55 push %rbp
8a: 48 89 e5 mov %rsp,%rbp
8d: e8 6e ff ff ff callq 0 <deregister_tm_clones>
92: 5d pop %rbp
93: c6 05 00 00 00 00 01 movb $0x1,0x0(%rip) # 9a
<__do_global_dtors_aux+0x1a> 95: R_X86_64_PC32 .bss-0x5
9a: f3 c3 repz retq
9c: 0f 1f 40 00 nopl 0x0(%rax)
00000000000000a0 <frame_dummy>:
a0: bf 00 00 00 00 mov $0x0,%edi a1: R_X86_64_32 .jcr
a5: 48 83 3f 00 cmpq $0x0,(%rdi)
a9: 75 05 jne b0 <frame_dummy+0x10>
ab: eb 93 jmp 40 <register_tm_clones>
ad: 0f 1f 00 nopl (%rax)
b0: b8 00 00 00 00 mov $0x0,%eax b1: R_X86_64_32 _Jv_RegisterClasses
b5: 48 85 c0 test %rax,%rax
b8: 74 f1 je ab <frame_dummy+0xb>
ba: 55 push %rbp
bb: 48 89 e5 mov %rsp,%rbp
be: ff d0 callq *%rax
c0: 5d pop %rbp
c1: e9 7a ff ff ff jmpq 40 <register_tm_clones>
[hjl@gnu-4 ~]$ readelf -sW
/usr/lib/gcc/x86_64-redhat-linux/5.3.1/crtbegin.o | grep WEAK
23: 0000000000000000 0 NOTYPE WEAK DEFAULT UND
_ITM_deregisterTMCloneTable
24: 0000000000000000 0 NOTYPE WEAK DEFAULT UND
_ITM_registerTMCloneTable
26: 0000000000000000 0 NOTYPE WEAK DEFAULT UND _Jv_RegisterClasses
[hjl@gnu-4 ~]$