[llvm-bugs] [Bug 26813] New: lld-linked FreeBSD libc contains .text relocations
via llvm-bugs
llvm-bugs at lists.llvm.org
Wed Mar 2 07:33:44 PST 2016
https://llvm.org/bugs/show_bug.cgi?id=26813
Bug ID: 26813
Summary: lld-linked FreeBSD libc contains .text relocations
Product: lld
Version: unspecified
Hardware: PC
OS: FreeBSD
Status: NEW
Severity: normal
Priority: P
Component: All Bugs
Assignee: unassignedbugs at nondot.org
Reporter: emaste at freebsd.org
CC: llvm-bugs at lists.llvm.org
Blocks: 23214
Classification: Unclassified
Found during ongoing attempts to link the FreeBSD base system with lld.
For processing .text relocations the runtime loader temporarily maps the
segment with write permission. I discovered that we have an issue in FreeBSD's
runtime loader: it expects the first PT_LOAD segment to be .text, and
unprotects only that one. (That issue is tracked in
http://bugs.freebsd.org/207631.)
This uncovered two lld issues, however.
First, lld should set DT_TEXTREL or DF_TEXTREL if the output contains
relocations in non-writable segments.
DF_TEXTREL
If this flag is not set, no relocation entry should cause a modification to
a non-writable segment, as specified by the segment permissions in the program
header table. If this flag is set, one or more relocation entries might request
modifications to a non-writable segment, and the dynamic linker can prepare
accordingly.
The real issue here though is that the relocation exists at all.
feynman% findtextrel lib/libc.so.7 | head
lib/libc.so.7: ELF object contains text relocation records:
lib/libc.so.7: off: 0x9d0ac, func: __sys_numa_setaffinity
lib/libc.so.7: off: 0x9d0cc, func: __sys_numa_getaffinity
lib/libc.so.7: off: 0x9d0ec, func: _procctl
...
feynman% readelf -r lib/libc.so.7 | grep 9d0ac
00000009d0ac 09ab00000002 R_X86_64_PC32 00000000001a62c4 .cerror +
fffffffffffffffc
These all come from the autogenerated libc syscall wrappers.
#define RSYSCALL(name) ENTRY(__sys_##name); \
WEAK_REFERENCE(__sys_##name, name); \
WEAK_REFERENCE(__sys_##name, _##name); \
mov $SYS_##name,%eax; KERNCALL; \
jb HIDENAME(cerror); ret; \
END(__sys_##name)
--
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/20160302/7d2019d7/attachment.html>
More information about the llvm-bugs
mailing list