diff options
author | H.J. Lu <hjl.tools@gmail.com> | 2022-07-18 18:24:26 -0700 |
---|---|---|
committer | H.J. Lu <hjl.tools@gmail.com> | 2022-07-19 08:41:52 -0700 |
commit | f638657759f5b9b4eb31a1aa6b9fe6e6fb01f4a0 (patch) | |
tree | 8be7ee0ba0f54495fab063d3a6fb7c626afa2b88 /ld/testsuite/ld-x86-64 | |
parent | d19a265487eda186b6977d9d15648cda9fad3298 (diff) | |
download | gdb-f638657759f5b9b4eb31a1aa6b9fe6e6fb01f4a0.zip gdb-f638657759f5b9b4eb31a1aa6b9fe6e6fb01f4a0.tar.gz gdb-f638657759f5b9b4eb31a1aa6b9fe6e6fb01f4a0.tar.bz2 |
x86: Disallow invalid relocations against protected symbols
Since glibc 2.36 will issue warnings for copy relocation against
protected symbols and non-canonical reference to canonical protected
functions, change the linker to always disallow such relocations.
bfd/
* elf32-i386.c (elf_i386_scan_relocs): Remove check for
elf_has_indirect_extern_access.
* elf64-x86-64.c (elf_x86_64_scan_relocs): Likewise.
(elf_x86_64_relocate_section): Remove check for
elf_has_no_copy_on_protected.
* elfxx-x86.c (elf_x86_allocate_dynrelocs): Check for building
executable instead of elf_has_no_copy_on_protected.
(_bfd_x86_elf_adjust_dynamic_symbol): Disallow copy relocation
against non-copyable protected symbol.
* elfxx-x86.h (SYMBOL_NO_COPYRELOC): Remove check for
elf_has_no_copy_on_protected.
ld/
* testsuite/ld-i386/i386.exp: Expect linker error for PR ld/17709
test.
* testsuite/ld-i386/pr17709.rd: Removed.
* testsuite/ld-i386/pr17709.err: New file.
* testsuite/ld-x86-64/pr17709.rd: Removed.
* testsuite/ld-x86-64/pr17709.err: New file.
* testsuite/ld-x86-64/pr28875-func.err: Updated.
* testsuite/ld-x86-64/x86-64.exp: Expect linker error for PR
ld/17709 test. Add tests for function pointer against protected
function.
Diffstat (limited to 'ld/testsuite/ld-x86-64')
-rw-r--r-- | ld/testsuite/ld-x86-64/pr17709.err | 2 | ||||
-rw-r--r-- | ld/testsuite/ld-x86-64/pr17709.rd | 4 | ||||
-rw-r--r-- | ld/testsuite/ld-x86-64/pr28875-func.err | 2 | ||||
-rw-r--r-- | ld/testsuite/ld-x86-64/x86-64.exp | 18 |
4 files changed, 20 insertions, 6 deletions
diff --git a/ld/testsuite/ld-x86-64/pr17709.err b/ld/testsuite/ld-x86-64/pr17709.err new file mode 100644 index 0000000..fa6a4ba --- /dev/null +++ b/ld/testsuite/ld-x86-64/pr17709.err @@ -0,0 +1,2 @@ +.*: tmpdir/pr17709b.o: copy relocation against non-copyable protected symbol `foo' in tmpdir/libpr17709.so +#... diff --git a/ld/testsuite/ld-x86-64/pr17709.rd b/ld/testsuite/ld-x86-64/pr17709.rd deleted file mode 100644 index beffd3c..0000000 --- a/ld/testsuite/ld-x86-64/pr17709.rd +++ /dev/null @@ -1,4 +0,0 @@ - -Relocation section '.rela\..*' at offset .* contains 1 entry: - +Offset +Info +Type +Symbol's Value +Symbol's Name \+ Addend -[0-9a-f ]+R_X86_64_COPY+[0-9a-f ]+ +foo \+ 0 diff --git a/ld/testsuite/ld-x86-64/pr28875-func.err b/ld/testsuite/ld-x86-64/pr28875-func.err index 64e961c..f6f4658 100644 --- a/ld/testsuite/ld-x86-64/pr28875-func.err +++ b/ld/testsuite/ld-x86-64/pr28875-func.err @@ -1,2 +1,2 @@ -.*: tmpdir/protected-func-1b.o: non-canonical reference to canonical protected function `protected_func_1a' in tmpdir/libprotected-func-2b.so +.*: tmpdir/protected-func-1b.o: non-canonical reference to canonical protected function `protected_func_1a' in tmpdir/libprotected-func-2..so #... diff --git a/ld/testsuite/ld-x86-64/x86-64.exp b/ld/testsuite/ld-x86-64/x86-64.exp index a096c0b..e6a834a 100644 --- a/ld/testsuite/ld-x86-64/x86-64.exp +++ b/ld/testsuite/ld-x86-64/x86-64.exp @@ -177,7 +177,7 @@ set x86_64tests { {"PR ld/17709 (1)" "-melf_x86_64 -shared" "" "--64" {pr17709a.s} {} "libpr17709.so"} {"PR ld/17709 (2)" "-melf_x86_64 tmpdir/libpr17709.so" "" - "--64" {pr17709b.s} {{readelf -rW pr17709.rd}} "pr17709"} + "--64" {pr17709b.s} {{ld "pr17709.err"}} "pr17709"} {"Build pr19827a.o" "" "" "--64" { pr19827a.S }} {"Build pr19827b.so" "-melf_x86_64 -shared" "" @@ -1384,6 +1384,22 @@ if { [isnative] && [check_compiler_available] } { "protected-func-2" \ ] \ [list \ + "Build libprotected-func-2c.so" \ + "-shared" \ + "-fPIC -Wa,-mx86-used-note=yes" \ + { protected-func-2c.c } \ + {} \ + "libprotected-func-2c.so" \ + ] \ + [list \ + "Build protected-func-2a without PIE" \ + "$NOPIE_LDFLAGS -Wl,--no-as-needed tmpdir/libprotected-func-2c.so" \ + "$NOPIE_CFLAGS -Wa,-mx86-used-note=yes" \ + { protected-func-1b.c } \ + {{error_output "pr28875-func.err"}} \ + "protected-func-2a" \ + ] \ + [list \ "Build libprotected-data-1a.so" \ "-shared -z noindirect-extern-access" \ "-fPIC -Wa,-mx86-used-note=yes" \ |