[llvm-bugs] [Bug 31221] New: lld-linked FreeBSD/amd64 rtld segfaults after lld r288107
via llvm-bugs
llvm-bugs at lists.llvm.org
Wed Nov 30 18:43:12 PST 2016
https://llvm.org/bugs/show_bug.cgi?id=31221
Bug ID: 31221
Summary: lld-linked FreeBSD/amd64 rtld segfaults after lld
r288107
Product: lld
Version: unspecified
Hardware: PC
OS: FreeBSD
Status: NEW
Severity: normal
Priority: P
Component: ELF
Assignee: unassignedbugs at nondot.org
Reporter: emaste at freebsd.org
CC: llvm-bugs at lists.llvm.org
Blocks: 23214
Classification: Unclassified
I built a FreeBSD installation using lld @ r288228 as the linker, and almost
all userland binaries segfaulted when starting up, in rtld.
Bisecting identified r288107 as the culprit. The problem is not reproducible
after switching back to a rtld linked with lld built at r288102.
The difference is that rtld built with post-r288107 lld has an entirely zeroed
.got:
% diffoscope old-lld/ld-elf.so.1 new-lld/ld-elf.so.1
--- old-lld/ld-elf.so.1
+++ new-lld/ld-elf.so.1
├── readelf --wide --hex-dump=.got {}
│ @@ -1,16 +1,16 @@
│
│ Hex dump of section '.got':
│ - 0x00020410 20900000 00000000 70100200 00000000 .......p.......
│ - 0x00020420 e0230200 00000000 e8230200 00000000 .#.......#......
│ - 0x00020430 10030200 00000000 d0b60000 00000000 ................
│ - 0x00020440 18240200 00000000 18230200 00000000 .$.......#......
│ - 0x00020450 68240200 00000000 6c240200 00000000 h$......l$......
│ - 0x00020460 70240200 00000000 74240200 00000000 p$......t$......
│ - 0x00020470 80100200 00000000 18060000 00000000 ................
│ - 0x00020480 00000200 00000000 7c240200 00000000 ........|$......
│ - 0x00020490 10240200 00000000 00100200 00000000 .$..............
│ - 0x000204a0 04100200 00000000 10100200 00000000 ................
│ - 0x000204b0 30160200 00000000 981b0200 00000000 0...............
│ - 0x000204c0 b0100200 00000000 00240200 00000000 .........$......
│ - 0x000204d0 60240200 00000000 84240200 00000000 `$.......$......
│ - 0x000204e0 f8230200 00000000 .#......
│ + 0x00020410 00000000 00000000 00000000 00000000 ................
│ + 0x00020420 00000000 00000000 00000000 00000000 ................
│ + 0x00020430 00000000 00000000 00000000 00000000 ................
│ + 0x00020440 00000000 00000000 00000000 00000000 ................
│ + 0x00020450 00000000 00000000 00000000 00000000 ................
│ + 0x00020460 00000000 00000000 00000000 00000000 ................
│ + 0x00020470 00000000 00000000 00000000 00000000 ................
│ + 0x00020480 00000000 00000000 00000000 00000000 ................
│ + 0x00020490 00000000 00000000 00000000 00000000 ................
│ + 0x000204a0 00000000 00000000 00000000 00000000 ................
│ + 0x000204b0 00000000 00000000 00000000 00000000 ................
│ + 0x000204c0 00000000 00000000 00000000 00000000 ................
│ + 0x000204d0 00000000 00000000 00000000 00000000 ................
│ + 0x000204e0 00000000 00000000 ........
├── readelf --wide --string-dump=.comment {}
│ @@ -1,6 +1,6 @@
│
│ String dump of section '.comment':
│ [ 1] FreeBSD clang version 3.9.0 (tags/RELEASE_390/final 280324)
(based on LLVM 3.9.0)
│ [ 53] $FreeBSD$
│ - [ 5d] Linker: LLD 4.0.0 (http://llvm.org/git/lld
01db8ccdad26c748727d9638c5df3b99c8260ddc)
│ + [ 5d] Linker: LLD 4.0.0 (http://llvm.org/git/lld
326233f95ee6b9c32f19d04ad06a6c369e6acc5a)
│
├── readelf --wide --hex-dump=.gnu_debuglink {}
│ @@ -1,4 +1,4 @@
│
│ Hex dump of section '.gnu_debuglink':
│ 0x00000000 6c642d65 6c662e73 6f2e312e 64656275 ld-elf.so.1.debu
│ - 0x00000010 67000000 a26ecfb2 g....n..
│ + 0x00000010 67000000 c1a333a6 g.....3.
╵
rtld has code to determine if it needs to relocate itself or not, which
defaults to
#ifndef RTLD_IS_DYNAMIC
#define RTLD_IS_DYNAMIC() (&_DYNAMIC != NULL)
#endif
RTLD_IS_DYNAMIC is false when linked with lld >= r288107, so rtld does not
apply its own relocations at startup and crashes.
This is arguably a FreeBSD rtld bug (and we could address it there). I'm
submitting this LLD ticket for tracking the issue as it may affect other
projects.
--
You are receiving this mail because:
You are on the CC list for the bug.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-bugs/attachments/20161201/b2120946/attachment.html>
More information about the llvm-bugs
mailing list