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: unassignedb...@nondot.org Reporter: ema...@freebsd.org CC: llvm-bugs@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.
_______________________________________________ llvm-bugs mailing list llvm-bugs@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-bugs