[PATCH] D41037: Create reserved symbols early so they can be versioned
Dimitry Andric via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Sun Dec 10 08:37:47 PST 2017
dim added a comment.
When I patch lld trunk https://reviews.llvm.org/rL320307 with this, executables linked by it make readelf (from binutils 2.28) produce a warning:
readelf: Warning: [10]: Info field (0) should index a relocatable section.
And I still don't see any `_end` symbol in the executable.
Full output:
$ readelf -aW test
ELF Header:
Magic: 7f 45 4c 46 02 01 01 09 00 00 00 00 00 00 00 00
Class: ELF64
Data: 2's complement, little endian
Version: 1 (current)
OS/ABI: UNIX - FreeBSD
ABI Version: 0
Type: EXEC (Executable file)
Machine: Advanced Micro Devices X86-64
Version: 0x1
Entry point address: 0x201000
Start of program headers: 64 (bytes into file)
Start of section headers: 19216 (bytes into file)
Flags: 0x0
Size of this header: 64 (bytes)
Size of program headers: 56 (bytes)
Number of program headers: 10
Size of section headers: 64 (bytes)
Number of section headers: 38
Section header string table index: 36
Section Headers:
[Nr] Name Type Address Off Size ES Flg Lk Inf Al
[ 0] NULL 0000000000000000 000000 000000 00 0 0 0
[ 1] .interp PROGBITS 0000000000200270 000270 000015 00 A 0 0 1
[ 2] .note.tag NOTE 0000000000200288 000288 000030 00 A 0 0 4
[ 3] .rodata PROGBITS 00000000002002b8 0002b8 0000b9 01 AMS 0 0 1
[ 4] .dynsym DYNSYM 0000000000200378 000378 000108 18 A 9 1 8
[ 5] .gnu.version VERSYM 0000000000200480 000480 000016 02 A 4 0 2
[ 6] .gnu.version_r VERNEED 0000000000200498 000498 000020 00 A 9 1 4
[ 7] .gnu.hash GNU_HASH 00000000002004b8 0004b8 00004c 00 A 4 0 8
[ 8] .hash HASH 0000000000200504 000504 000060 04 A 4 0 4
[ 9] .dynstr STRTAB 0000000000200564 000564 000079 00 A 0 0 1
readelf: Warning: [10]: Info field (0) should index a relocatable section.
[10] .rela.plt RELA 00000000002005e0 0005e0 0000a8 18 A 4 0 8
[11] .eh_frame_hdr PROGBITS 0000000000200688 000688 000034 00 A 0 0 1
[12] .eh_frame PROGBITS 00000000002006c0 0006c0 0000c0 00 A 0 0 8
[13] .text PROGBITS 0000000000201000 001000 0005c8 00 AX 0 0 16
[14] .init PROGBITS 00000000002015c8 0015c8 000013 00 AX 0 0 4
[15] .fini PROGBITS 00000000002015dc 0015dc 00000e 00 AX 0 0 4
[16] .plt PROGBITS 00000000002015f0 0015f0 000080 00 AX 0 0 16
[17] .data PROGBITS 0000000000202000 002000 000034 00 WA 0 0 16
[18] .got.plt PROGBITS 0000000000202038 002038 000050 00 WA 0 0 8
[19] .ctors PROGBITS 0000000000203000 003000 000010 00 WA 0 0 8
[20] .dtors PROGBITS 0000000000203010 003010 000010 00 WA 0 0 8
[21] .jcr PROGBITS 0000000000203020 003020 000008 00 WA 0 0 8
[22] .dynamic DYNAMIC 0000000000203028 003028 000130 10 WA 9 0 8
[23] .bss NOBITS 0000000000204000 003158 000008 00 WA 0 0 8
[24] .comment PROGBITS 0000000000000000 003158 0001dc 01 MS 0 0 1
[25] .debug_str PROGBITS 0000000000000000 003334 0001ca 01 MS 0 0 1
[26] .debug_loc PROGBITS 0000000000000000 0034fe 0002ca 00 0 0 1
[27] .debug_abbrev PROGBITS 0000000000000000 0037c8 00019e 00 0 0 1
[28] .debug_info PROGBITS 0000000000000000 003966 000544 00 0 0 1
[29] .debug_ranges PROGBITS 0000000000000000 003eaa 000030 00 0 0 1
[30] .debug_macinfo PROGBITS 0000000000000000 003eda 000001 00 0 0 1
[31] .debug_pubnames PROGBITS 0000000000000000 003edb 00008b 00 0 0 1
[32] .debug_pubtypes PROGBITS 0000000000000000 003f66 0000d2 00 0 0 1
[33] .debug_line PROGBITS 0000000000000000 004038 00030a 00 0 0 1
[34] .debug_aranges PROGBITS 0000000000000000 004342 000080 00 0 0 1
[35] .symtab SYMTAB 0000000000000000 0043c8 0003d8 18 37 28 8
[36] .shstrtab STRTAB 0000000000000000 0047a0 00016b 00 0 0 1
[37] .strtab STRTAB 0000000000000000 00490b 000202 00 0 0 1
Key to Flags:
W (write), A (alloc), X (execute), M (merge), S (strings), I (info),
L (link order), O (extra OS processing required), G (group), T (TLS),
C (compressed), x (unknown), o (OS specific), E (exclude),
l (large), p (processor specific)
There are no section groups in this file.
Program Headers:
Type Offset VirtAddr PhysAddr FileSiz MemSiz Flg Align
PHDR 0x000040 0x0000000000200040 0x0000000000200040 0x000230 0x000230 R 0x8
INTERP 0x000270 0x0000000000200270 0x0000000000200270 0x000015 0x000015 R 0x1
[Requesting program interpreter: /libexec/ld-elf.so.1]
LOAD 0x000000 0x0000000000200000 0x0000000000200000 0x000780 0x000780 R 0x1000
LOAD 0x001000 0x0000000000201000 0x0000000000201000 0x000670 0x000670 R E 0x1000
LOAD 0x002000 0x0000000000202000 0x0000000000202000 0x001158 0x002008 RW 0x1000
DYNAMIC 0x003028 0x0000000000203028 0x0000000000203028 0x000130 0x000130 RW 0x8
GNU_RELRO 0x003000 0x0000000000203000 0x0000000000203000 0x000158 0x001000 R 0x1
GNU_EH_FRAME 0x000688 0x0000000000200688 0x0000000000200688 0x000034 0x000034 R 0x1
GNU_STACK 0x000000 0x0000000000000000 0x0000000000000000 0x000000 0x000000 RW 0
NOTE 0x000288 0x0000000000200288 0x0000000000200288 0x000030 0x000030 R 0x4
Section to Segment mapping:
Segment Sections...
00
01 .interp
02 .interp .note.tag .rodata .dynsym .gnu.version .gnu.version_r .gnu.hash .hash .dynstr .rela.plt .eh_frame_hdr .eh_frame
03 .text .init .fini .plt
04 .data .got.plt .ctors .dtors .jcr .dynamic .bss
05 .dynamic
06 .ctors .dtors .jcr .dynamic
07 .eh_frame_hdr
08
09 .note.tag
Dynamic section at offset 0x3028 contains 19 entries:
Tag Type Name/Value
0x0000000000000001 (NEEDED) Shared library: [libgcc_s.so.1]
0x0000000000000001 (NEEDED) Shared library: [libc.so.7]
0x0000000000000015 (DEBUG) 0x0
0x0000000000000017 (JMPREL) 0x2005e0
0x0000000000000002 (PLTRELSZ) 168 (bytes)
0x0000000000000003 (PLTGOT) 0x202038
0x0000000000000014 (PLTREL) RELA
0x0000000000000006 (SYMTAB) 0x200378
0x000000000000000b (SYMENT) 24 (bytes)
0x0000000000000005 (STRTAB) 0x200564
0x000000000000000a (STRSZ) 121 (bytes)
0x000000006ffffef5 (GNU_HASH) 0x2004b8
0x0000000000000004 (HASH) 0x200504
0x000000000000000c (INIT) 0x2015c8
0x000000000000000d (FINI) 0x2015dc
0x000000006ffffff0 (VERSYM) 0x200480
0x000000006ffffffe (VERNEED) 0x200498
0x000000006fffffff (VERNEEDNUM) 1
0x0000000000000000 (NULL) 0x0
Relocation section '.rela.plt' at offset 0x5e0 contains 7 entries:
Offset Info Type Symbol's Value Symbol's Name + Addend
0000000000202050 0000000400000007 R_X86_64_JUMP_SLOT 0000000000201600 atexit at FBSD_1.0 + 0
0000000000202058 0000000300000007 R_X86_64_JUMP_SLOT 0000000000201610 _init_tls at FBSD_1.0 + 0
0000000000202060 0000000700000007 R_X86_64_JUMP_SLOT 0000000000201620 exit at FBSD_1.0 + 0
0000000000202068 0000000900000007 R_X86_64_JUMP_SLOT 0000000000201630 __error at FBSD_1.0 + 0
0000000000202070 0000000a00000007 R_X86_64_JUMP_SLOT 0000000000201640 sbrk at FBSD_1.0 + 0
0000000000202078 0000000600000007 R_X86_64_JUMP_SLOT 0000000000201650 brk at FBSD_1.0 + 0
0000000000202080 0000000800000007 R_X86_64_JUMP_SLOT 0000000000201660 __assert at FBSD_1.0 + 0
The decoding of unwind sections for machine type Advanced Micro Devices X86-64 is not currently supported.
Symbol table '.dynsym' contains 11 entries:
Num: Value Size Type Bind Vis Ndx Name
0: 0000000000000000 0 NOTYPE LOCAL DEFAULT UND
1: 0000000000000000 0 NOTYPE WEAK DEFAULT UND _Jv_RegisterClasses
2: 0000000000202000 8 OBJECT GLOBAL DEFAULT 17 __progname
3: 0000000000201610 0 FUNC GLOBAL DEFAULT UND _init_tls at FBSD_1.0 (2)
4: 0000000000201600 0 FUNC GLOBAL DEFAULT UND atexit at FBSD_1.0 (2)
5: 0000000000204000 8 OBJECT GLOBAL DEFAULT 23 environ
6: 0000000000201650 0 FUNC GLOBAL DEFAULT UND brk at FBSD_1.0 (2)
7: 0000000000201620 0 FUNC GLOBAL DEFAULT UND exit at FBSD_1.0 (2)
8: 0000000000201660 0 FUNC GLOBAL DEFAULT UND __assert at FBSD_1.0 (2)
9: 0000000000201630 0 FUNC GLOBAL DEFAULT UND __error at FBSD_1.0 (2)
10: 0000000000201640 0 FUNC GLOBAL DEFAULT UND sbrk at FBSD_1.0 (2)
Symbol table '.symtab' contains 41 entries:
Num: Value Size Type Bind Vis Ndx Name
0: 0000000000000000 0 NOTYPE LOCAL DEFAULT UND
1: 0000000000200288 24 OBJECT LOCAL DEFAULT 2 abitag
2: 00000000002002a0 24 OBJECT LOCAL DEFAULT 2 crt_noinit_tag
3: 0000000000201190 115 FUNC LOCAL DEFAULT 13 finalizer
4: 0000000000203000 8 OBJECT LOCAL DEFAULT 19 __CTOR_LIST__
5: 0000000000203010 8 OBJECT LOCAL DEFAULT 20 __DTOR_LIST__
6: 0000000000203020 0 OBJECT LOCAL DEFAULT 21 __JCR_LIST__
7: 0000000000201210 53 FUNC LOCAL DEFAULT 13 __do_global_dtors_aux
8: 0000000000202018 1 OBJECT LOCAL DEFAULT 17 __do_global_dtors_aux.completed
9: 0000000000202010 8 OBJECT LOCAL DEFAULT 17 __do_global_dtors_aux.p
10: 0000000000201250 34 FUNC LOCAL DEFAULT 13 frame_dummy
11: 00000000002012b0 360 FUNC LOCAL DEFAULT 13 test_brk
12: 0000000000201420 366 FUNC LOCAL DEFAULT 13 test_sbrk
13: 0000000000203008 8 OBJECT LOCAL DEFAULT 19 __CTOR_END__
14: 0000000000203018 8 OBJECT LOCAL DEFAULT 20 __DTOR_END__
15: 00000000002006c0 4 OBJECT LOCAL DEFAULT 12 __FRAME_END__
16: 0000000000203020 8 OBJECT LOCAL DEFAULT 21 __JCR_END__
17: 0000000000201590 54 FUNC LOCAL DEFAULT 13 __do_global_ctors_aux
18: 0000000000203028 0 NOTYPE LOCAL HIDDEN 22 _DYNAMIC
19: 0000000000000000 0 NOTYPE LOCAL HIDDEN ABS __fini_array_end
20: 0000000000000000 0 NOTYPE LOCAL HIDDEN ABS __fini_array_start
21: 0000000000000000 0 NOTYPE LOCAL HIDDEN ABS __init_array_end
22: 0000000000000000 0 NOTYPE LOCAL HIDDEN ABS __init_array_start
23: 0000000000000000 0 NOTYPE LOCAL HIDDEN ABS __preinit_array_end
24: 0000000000000000 0 NOTYPE LOCAL HIDDEN ABS __preinit_array_start
25: 00000000002015dc 0 FUNC LOCAL HIDDEN 15 _fini
26: 00000000002015c8 0 FUNC LOCAL HIDDEN 14 _init
27: 0000000000202008 8 OBJECT LOCAL HIDDEN 17 __dso_handle
28: 0000000000202000 8 OBJECT GLOBAL DEFAULT 17 __progname
29: 0000000000201610 0 FUNC GLOBAL DEFAULT UND _init_tls
30: 0000000000201000 390 FUNC GLOBAL DEFAULT 13 _start
31: 0000000000201600 0 FUNC GLOBAL DEFAULT UND atexit
32: 0000000000204000 8 OBJECT GLOBAL DEFAULT 23 environ
33: 0000000000201620 0 FUNC GLOBAL DEFAULT UND exit
34: 0000000000201280 38 FUNC GLOBAL DEFAULT 13 main
35: 0000000000000000 0 NOTYPE WEAK DEFAULT UND _Jv_RegisterClasses
36: 0000000000201660 0 FUNC GLOBAL DEFAULT UND __assert
37: 0000000000201630 0 FUNC GLOBAL DEFAULT UND __error
38: 0000000000201650 0 FUNC GLOBAL DEFAULT UND brk
39: 0000000000201640 0 FUNC GLOBAL DEFAULT UND sbrk
40: 0000000000202020 20 OBJECT GLOBAL DEFAULT 17 test_data
Histogram for bucket list length (total of 11 buckets):
Length Number % of total Coverage
0 4 ( 36.4%)
1 4 ( 36.4%) 40.0%
2 3 ( 27.3%) 100.0%
Histogram for `.gnu.hash' bucket list length (total of 2 buckets):
Length Number % of total Coverage
0 0 ( 0.0%)
1 0 ( 0.0%) 0.0%
2 0 ( 0.0%) 0.0%
3 0 ( 0.0%) 0.0%
4 1 ( 50.0%) 44.4%
5 1 ( 50.0%) 100.0%
Version symbols section '.gnu.version' contains 11 entries:
Addr: 0000000000200480 Offset: 0x000480 Link: 4 (.dynsym)
000: 0 (*local*) 1 (*global*) 1 (*global*) 2 (FBSD_1.0)
004: 2 (FBSD_1.0) 1 (*global*) 2 (FBSD_1.0) 2 (FBSD_1.0)
008: 2 (FBSD_1.0) 2 (FBSD_1.0) 2 (FBSD_1.0)
Version needs section '.gnu.version_r' contains 1 entries:
Addr: 0x0000000000200498 Offset: 0x000498 Link: 9 (.dynstr)
000000: Version: 1 File: libc.so.7 Cnt: 1
0x0010: Name: FBSD_1.0 Flags: none Version: 2
Displaying notes found in: .note.tag
Owner Data size Description
FreeBSD 0x00000004 NT_VERSION (version)
description data: ffffffb6 4f 12 00
FreeBSD 0x00000004 NT_ARCH (architecture)
description data: 00 00 00 00
https://reviews.llvm.org/D41037
More information about the llvm-commits
mailing list