From 1a2f1b54a520b28891910846c8671e1c4bcaf348 Mon Sep 17 00:00:00 2001 From: "H.J. Lu" Date: Thu, 4 Feb 2021 06:02:13 -0800 Subject: x86-64: Provide more info when failed to convert GOTPCREL Provide [hjl@gnu-cfl-2 ld]$ ./ld-new -z norelro -L/export/gnu/import/git/gitlab/x86-binutils/ld/testsuite/ld-x86-64 -melf32_x86_64 -Ttext=0x80000000 -o tmpdir/dump tmpdir/pr19609-7.o tmpdir/pr19609-7.o: in function `_start': (.text+0x2): failed to convert GOTPCREL relocation against 'foobar'; relink with --no-relax [hjl@gnu-cfl-2 ld]$ instead of [hjl@gnu-cfl-2 ld]$ ld -z norelro -L/export/gnu/import/git/gitlab/x86-binutils/ld/testsuite/ld-x86-64 -melf32_x86_64 -Ttext=0x80000000 -o tmpdir/dump tmpdir/pr19609-7.o ld: failed to convert GOTPCREL relocation; relink with --no-relax [hjl@gnu-cfl-2 ld]$ bfd/ PR ld/19609 * elf64-x86-64.c (elf_x86_64_relocate_section): Provide more info when failed to convert GOTPCREL relocation. ld/ PR ld/19609 * testsuite/ld-x86-64/pr19609-2a.d: Updated. * testsuite/ld-x86-64/pr19609-2b.d: Likewise. * testsuite/ld-x86-64/pr19609-4a.d: Likewise. * testsuite/ld-x86-64/pr19609-4c.d: Likewise. * testsuite/ld-x86-64/pr19609-5d.d: Likewise. * testsuite/ld-x86-64/pr19609-7a.d: Likewise. * testsuite/ld-x86-64/pr19609-7c.d: Likewise. --- bfd/ChangeLog | 6 ++++++ bfd/elf64-x86-64.c | 13 ++++++++++--- ld/ChangeLog | 11 +++++++++++ ld/testsuite/ld-x86-64/pr19609-2a.d | 2 +- ld/testsuite/ld-x86-64/pr19609-2b.d | 2 +- ld/testsuite/ld-x86-64/pr19609-4a.d | 2 +- ld/testsuite/ld-x86-64/pr19609-4c.d | 2 +- ld/testsuite/ld-x86-64/pr19609-5d.d | 2 +- ld/testsuite/ld-x86-64/pr19609-7a.d | 2 +- ld/testsuite/ld-x86-64/pr19609-7c.d | 2 +- 10 files changed, 34 insertions(+), 10 deletions(-) diff --git a/bfd/ChangeLog b/bfd/ChangeLog index 97ce3db..ba608e1 100644 --- a/bfd/ChangeLog +++ b/bfd/ChangeLog @@ -1,3 +1,9 @@ +2021-02-04 H.J. Lu + + PR ld/19609 + * elf64-x86-64.c (elf_x86_64_relocate_section): Provide more + info when failed to convert GOTPCREL relocation. + 2021-02-04 Nelson Chu * elfxx-riscv.c (riscv_parse_prefixed_ext): Removed zb*. diff --git a/bfd/elf64-x86-64.c b/bfd/elf64-x86-64.c index 500f8bf..bba2200 100644 --- a/bfd/elf64-x86-64.c +++ b/bfd/elf64-x86-64.c @@ -2430,6 +2430,7 @@ elf_x86_64_relocate_section (bfd *output_bfd, Elf_Internal_Rela *wrel; Elf_Internal_Rela *relend; unsigned int plt_entry_size; + bfd_boolean status; /* Skip if check_relocs failed. */ if (input_section->check_relocs_failed) @@ -2453,6 +2454,7 @@ elf_x86_64_relocate_section (bfd *output_bfd, _bfd_x86_elf_set_tls_module_base (info); + status = TRUE; rel = wrel = relocs; relend = relocs + input_section->reloc_count; for (; rel < relend; wrel++, rel++) @@ -4118,8 +4120,13 @@ elf_x86_64_relocate_section (bfd *output_bfd, if (converted_reloc) { info->callbacks->einfo - (_("%F%P: failed to convert GOTPCREL relocation; relink with --no-relax\n")); - return FALSE; + ("%X%H:", input_bfd, input_section, rel->r_offset); + info->callbacks->einfo + (_(" failed to convert GOTPCREL relocation against " + "'%s'; relink with --no-relax\n"), + name); + status = FALSE; + continue; } (*info->callbacks->reloc_overflow) (info, (h ? &h->root : NULL), name, howto->name, @@ -4160,7 +4167,7 @@ elf_x86_64_relocate_section (bfd *output_bfd, input_section->reloc_count -= deleted; } - return TRUE; + return status; } /* Finish up dynamic symbol handling. We set the contents of various diff --git a/ld/ChangeLog b/ld/ChangeLog index 3cd2be0..52639f3 100644 --- a/ld/ChangeLog +++ b/ld/ChangeLog @@ -1,5 +1,16 @@ 2021-02-04 H.J. Lu + PR ld/19609 + * testsuite/ld-x86-64/pr19609-2a.d: Updated. + * testsuite/ld-x86-64/pr19609-2b.d: Likewise. + * testsuite/ld-x86-64/pr19609-4a.d: Likewise. + * testsuite/ld-x86-64/pr19609-4c.d: Likewise. + * testsuite/ld-x86-64/pr19609-5d.d: Likewise. + * testsuite/ld-x86-64/pr19609-7a.d: Likewise. + * testsuite/ld-x86-64/pr19609-7c.d: Likewise. + +2021-02-04 H.J. Lu + PR ld/15146 * testsuite/ld-plugin/lto.exp: Run PR ld/15146 tests. * testsuite/ld-plugin/pr15146.d: Restored. diff --git a/ld/testsuite/ld-x86-64/pr19609-2a.d b/ld/testsuite/ld-x86-64/pr19609-2a.d index 2bed641..6d3db92 100644 --- a/ld/testsuite/ld-x86-64/pr19609-2a.d +++ b/ld/testsuite/ld-x86-64/pr19609-2a.d @@ -1,4 +1,4 @@ #source: pr19609-2.s #as: --64 -mrelax-relocations=yes #ld: -melf_x86_64 -Ttext=0x70000000 -Tdata=0xa0000000 -#error: failed to convert GOTPCREL relocation; relink with --no-relax +#error: .*failed to convert GOTPCREL relocation against 'foo'; relink with --no-relax.* diff --git a/ld/testsuite/ld-x86-64/pr19609-2b.d b/ld/testsuite/ld-x86-64/pr19609-2b.d index 3741ebb..4fee93d 100644 --- a/ld/testsuite/ld-x86-64/pr19609-2b.d +++ b/ld/testsuite/ld-x86-64/pr19609-2b.d @@ -1,4 +1,4 @@ #source: pr19609-2.s #as: --x32 -mrelax-relocations=yes #ld: -melf32_x86_64 -Ttext=0x70000000 -Tdata=0xa0000000 -#error: failed to convert GOTPCREL relocation; relink with --no-relax +#error: .*failed to convert GOTPCREL relocation against 'foo'; relink with --no-relax.* diff --git a/ld/testsuite/ld-x86-64/pr19609-4a.d b/ld/testsuite/ld-x86-64/pr19609-4a.d index f08843c..eb37d0c 100644 --- a/ld/testsuite/ld-x86-64/pr19609-4a.d +++ b/ld/testsuite/ld-x86-64/pr19609-4a.d @@ -1,4 +1,4 @@ #source: pr19609-4.s #as: --64 -mrelax-relocations=yes #ld: -melf_x86_64 -Ttext=0x70000000 -Tdata=0xa0000000 -#error: failed to convert GOTPCREL relocation; relink with --no-relax +#error: .*failed to convert GOTPCREL relocation against 'foo'; relink with --no-relax.*failed to convert GOTPCREL relocation against 'foo'; relink with --no-relax.* diff --git a/ld/testsuite/ld-x86-64/pr19609-4c.d b/ld/testsuite/ld-x86-64/pr19609-4c.d index f08843c..eb37d0c 100644 --- a/ld/testsuite/ld-x86-64/pr19609-4c.d +++ b/ld/testsuite/ld-x86-64/pr19609-4c.d @@ -1,4 +1,4 @@ #source: pr19609-4.s #as: --64 -mrelax-relocations=yes #ld: -melf_x86_64 -Ttext=0x70000000 -Tdata=0xa0000000 -#error: failed to convert GOTPCREL relocation; relink with --no-relax +#error: .*failed to convert GOTPCREL relocation against 'foo'; relink with --no-relax.*failed to convert GOTPCREL relocation against 'foo'; relink with --no-relax.* diff --git a/ld/testsuite/ld-x86-64/pr19609-5d.d b/ld/testsuite/ld-x86-64/pr19609-5d.d index 608c97b..0ab28ef 100644 --- a/ld/testsuite/ld-x86-64/pr19609-5d.d +++ b/ld/testsuite/ld-x86-64/pr19609-5d.d @@ -1,4 +1,4 @@ #source: pr19609-5.s #as: --64 -mrelax-relocations=yes #ld: -melf_x86_64 -Ttext=0x80000000 -#error: failed to convert GOTPCREL relocation; relink with --no-relax +#error: .*failed to convert GOTPCREL relocation against 'bar'; relink with --no-relax diff --git a/ld/testsuite/ld-x86-64/pr19609-7a.d b/ld/testsuite/ld-x86-64/pr19609-7a.d index 015a6ff..34704a9 100644 --- a/ld/testsuite/ld-x86-64/pr19609-7a.d +++ b/ld/testsuite/ld-x86-64/pr19609-7a.d @@ -1,4 +1,4 @@ #source: pr19609-7.s #as: --64 -mrelax-relocations=yes #ld: -melf_x86_64 -Ttext=0x80000000 -#error: failed to convert GOTPCREL relocation; relink with --no-relax +#error: .*failed to convert GOTPCREL relocation against 'foobar'; relink with --no-relax diff --git a/ld/testsuite/ld-x86-64/pr19609-7c.d b/ld/testsuite/ld-x86-64/pr19609-7c.d index ff60049..09488e2 100644 --- a/ld/testsuite/ld-x86-64/pr19609-7c.d +++ b/ld/testsuite/ld-x86-64/pr19609-7c.d @@ -1,4 +1,4 @@ #source: pr19609-7.s #as: --x32 -mrelax-relocations=yes #ld: -melf32_x86_64 -Ttext=0x80000000 -#error: failed to convert GOTPCREL relocation; relink with --no-relax +#error: .*failed to convert GOTPCREL relocation against 'foobar'; relink with --no-relax -- cgit v1.1