[Bug 249121] program compiled with -pg produces ld-elf abort
bugzilla-noreply at freebsd.org
bugzilla-noreply at freebsd.org
Sat Sep 5 22:18:47 UTC 2020
https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=249121
Konstantin Belousov <kib at FreeBSD.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
CC| |dim at FreeBSD.org,
| |emaste at freebsd.org
--- Comment #4 from Konstantin Belousov <kib at FreeBSD.org> ---
Clang+lld produce very strange binary when all linked libraries are static:
Elf file type is EXEC (Executable file)
Entry point 0x2237a0
There are 11 program headers, starting at offset 64
Program Headers:
Type Offset VirtAddr PhysAddr
FileSiz MemSiz Flg Align
PHDR 0x0000000000000040 0x0000000000200040 0x0000000000200040
0x0000000000000268 0x0000000000000268 R 0x8
INTERP 0x00000000000002a8 0x00000000002002a8 0x00000000002002a8
0x0000000000000015 0x0000000000000015 R 0x1
[Requesting program interpreter: /libexec/ld-elf.so.1]
LOAD 0x0000000000000000 0x0000000000200000 0x0000000000200000
0x000000000002279c 0x000000000002279c R 0x1000
LOAD 0x00000000000227a0 0x00000000002237a0 0x00000000002237a0
0x0000000000091760 0x0000000000091760 R E 0x1000
LOAD 0x00000000000b3f00 0x00000000002b5f00 0x00000000002b5f00
0x0000000000001898 0x0000000000001898 RW 0x1000
LOAD 0x00000000000b57a0 0x00000000002b87a0 0x00000000002b87a0
0x00000000000037c0 0x00000000002247a9 RW 0x1000
TLS 0x00000000000b3f00 0x00000000002b5f00 0x00000000002b5f00
0x0000000000001850 0x0000000000001870 R 0x10
GNU_RELRO 0x00000000000b3f00 0x00000000002b5f00 0x00000000002b5f00
0x0000000000001898 0x0000000000002100 R 0x1
GNU_EH_FRAME 0x000000000000fc80 0x000000000020fc80 0x000000000020fc80
0x000000000000300c 0x000000000000300c R 0x4
GNU_STACK 0x0000000000000000 0x0000000000000000 0x0000000000000000
0x0000000000000000 0x0000000000000000 RW 0
NOTE 0x00000000000002c0 0x00000000002002c0 0x00000000002002c0
0x0000000000000048 0x0000000000000048 R 0x4
...
There is no dynamic section in this file.
Relocation section with addend (.rela.dyn):
r_offset r_info r_type st_value st_name +
r_addend
0000002bbf50 000000000025 R_X86_64_IRELATIVE 0000000000000000 + 223dd0
0000002bbf58 000000000025 R_X86_64_IRELATIVE 0000000000000000 + 2a91e0
As you see, it specifies PHDR INTERP, which brings rtld into action.
But there is no dynamic segment, so rtld cannot see any relocs, which results
in the IRELATIVE relocation sites to still point to the resolver functions.
This is arguably a bug in lld.
There are also two bugs in rtld which fixes I will commit shortly. I assumes
dynamic segment is there and dereferences NULL pointer otherwise. Also, it
terminates the image if there is no dynamic symbol table.
--
You are receiving this mail because:
You are the assignee for the bug.
More information about the freebsd-toolchain
mailing list