History

Makefile: use -z pack-relative-relocs

Commit 27f2a4db76e8 ("Makefile: fix GDB warning with CONFIG_RELR") added --use-android-relr-tags to fix a GDB warning BFD: /android0/linux-next/vmlinux: unknown type [0x13] section `.relr.dyn' The GDB warning has been fixed in version 11.2. The DT_ANDROID_RELR tag was deprecated since DT_RELR was standardized. Thus, --use-android-relr-tags should be removed. While making the change, try -z pack-relative-relocs, which is supported since LLD 15. Keep supporting --pack-dyn-relocs=relr as well for older LLD versions. There is no indication of obsolescence for --pack-dyn-relocs=relr. As of today, GNU ld supports the latter option for x86 and powerpc64 ports and has no intention to support --pack-dyn-relocs=relr. In the absence of the glibc symbol version GLIBC_ABI_DT_RELR, --pack-dyn-relocs=relr and -z pack-relative-relocs are identical in ld.lld. GNU ld and newer versions of LLD report warnings (instead of errors) for unknown -z options. Only errors lead to non-zero exit codes. Therefore, we should test --pack-dyn-relocs=relr before testing -z pack-relative-relocs.

Fangrui Song committed 3 years ago

Commit ccb2d171 parent ddc72c92 files · +8 −3Browse files

Showing the changes to scripts (1 of 2 files). Show all

Unified · Split

scripts/tools-support-relr.sh+6−2
@@ -7,8 +7,12 @@ trap "rm -f $tmp_file.o $tmp_file $tmp_file.bin" EXIT · 6 unmodified lines
77 cat << "END" | $CC -c -x c - -o $tmp_file.o >/dev/null 2>&1
88 void *p = &p;
99 END
10−$LD $tmp_file.o -shared -Bsymbolic --pack-dyn-relocs=relr \
11− --use-android-relr-tags -o $tmp_file
10+
11+# ld.lld before 15 did not support -z pack-relative-relocs.
12+if ! $LD $tmp_file.o -shared -Bsymbolic --pack-dyn-relocs=relr -o $tmp_file 2>/dev/null; then
13+ $LD $tmp_file.o -shared -Bsymbolic -z pack-relative-relocs -o $tmp_file 2>&1 |
14+ grep -q pack-relative-relocs && exit 1
15+fi
1216
1317 # Despite printing an error message, GNU nm still exits with exit code 0 if it
1418 # sees a relr section. So we need to check that nothing is printed to stderr.

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t