From b5b05a6e6524778e20fccd6b019e781727659f42 Mon Sep 17 00:00:00 2001 From: Xi Ruoyao Date: Wed, 19 Jun 2024 14:04:18 +0800 Subject: LoongArch: TLS IE needs only one dynamic reloc As the comment in the code says, TLS_IE needs only one dynamic reloc. But commit b67a17aa7c0c ("LoongArch: Fix the issue of excessive relocation generated by GD and IE") has incorrectly allocated the space for two dynamic relocs, causing libc.so to contain 8 R_LARCH_NONE. Adjust tlsdesc-dso.d for the offset changes and add two tests to ensure there are no R_LARCH_NONE with TLS. Signed-off-by: Xi Ruoyao --- bfd/elfnn-loongarch.c | 2 +- ld/testsuite/ld-loongarch-elf/desc-ie-reloc.d | 9 +++ ld/testsuite/ld-loongarch-elf/desc-ie.d | 8 +- ld/testsuite/ld-loongarch-elf/ld-loongarch-elf.exp | 2 + ld/testsuite/ld-loongarch-elf/tlsdesc-dso-reloc.d | 9 +++ ld/testsuite/ld-loongarch-elf/tlsdesc-dso.d | 86 +++++++++++----------- 6 files changed, 68 insertions(+), 48 deletions(-) create mode 100644 ld/testsuite/ld-loongarch-elf/desc-ie-reloc.d create mode 100644 ld/testsuite/ld-loongarch-elf/tlsdesc-dso-reloc.d diff --git a/bfd/elfnn-loongarch.c b/bfd/elfnn-loongarch.c index 93c036f..b172076 100644 --- a/bfd/elfnn-loongarch.c +++ b/bfd/elfnn-loongarch.c @@ -1353,7 +1353,7 @@ allocate_dynrelocs (struct elf_link_hash_entry *h, void *inf) { s->size += GOT_ENTRY_SIZE; if (need_reloc) - htab->elf.srelgot->size += 2 * sizeof (ElfNN_External_Rela); + htab->elf.srelgot->size += sizeof (ElfNN_External_Rela); } /* TLS_DESC needs one dynamic reloc and two GOT slot. */ diff --git a/ld/testsuite/ld-loongarch-elf/desc-ie-reloc.d b/ld/testsuite/ld-loongarch-elf/desc-ie-reloc.d new file mode 100644 index 0000000..c7a2f8e --- /dev/null +++ b/ld/testsuite/ld-loongarch-elf/desc-ie-reloc.d @@ -0,0 +1,9 @@ +#source: desc-ie.s +#as: +#ld: -shared -z norelro --hash-style=both +#readelf: -Wr + +#failif +#... +.* +R_LARCH_NONE +.* +#... diff --git a/ld/testsuite/ld-loongarch-elf/desc-ie.d b/ld/testsuite/ld-loongarch-elf/desc-ie.d index c833b23..0759404 100644 --- a/ld/testsuite/ld-loongarch-elf/desc-ie.d +++ b/ld/testsuite/ld-loongarch-elf/desc-ie.d @@ -8,7 +8,7 @@ Disassembly of section .text: [0-9a-f]+ : - +[0-9a-f]+: 1a000084 pcalau12i \$a0, .* - +[0-9a-f]+: 28cd0084 ld.d \$a0, \$a0, .* - +[0-9a-f]+: 1a000084 pcalau12i \$a0, .* - +[0-9a-f]+: 28cd0084 ld.d \$a0, \$a0, .* + +[0-9a-f]+: [0-9a-f]+ pcalau12i \$a0, .* + +[0-9a-f]+: [0-9a-f]+ ld.d \$a0, \$a0, .* + +[0-9a-f]+: [0-9a-f]+ pcalau12i \$a0, .* + +[0-9a-f]+: [0-9a-f]+ ld.d \$a0, \$a0, .* diff --git a/ld/testsuite/ld-loongarch-elf/ld-loongarch-elf.exp b/ld/testsuite/ld-loongarch-elf/ld-loongarch-elf.exp index 40f5657..d833a89 100644 --- a/ld/testsuite/ld-loongarch-elf/ld-loongarch-elf.exp +++ b/ld/testsuite/ld-loongarch-elf/ld-loongarch-elf.exp @@ -130,7 +130,9 @@ if [istarget "loongarch64-*-*"] { if [istarget "loongarch64-*-*"] { if [check_shared_lib_support] { run_dump_test "desc-ie" + run_dump_test "desc-ie-reloc" run_dump_test "tlsdesc-dso" + run_dump_test "tlsdesc-dso-reloc" run_dump_test "desc-norelax" run_dump_test "desc-relax" run_dump_test "data-got" diff --git a/ld/testsuite/ld-loongarch-elf/tlsdesc-dso-reloc.d b/ld/testsuite/ld-loongarch-elf/tlsdesc-dso-reloc.d new file mode 100644 index 0000000..d5afa7c --- /dev/null +++ b/ld/testsuite/ld-loongarch-elf/tlsdesc-dso-reloc.d @@ -0,0 +1,9 @@ +#source: tlsdesc-dso.s +#as: +#ld: -shared -z norelro --hash-style=both +#readelf: -Wr + +#failif +#... +.* +R_LARCH_NONE +.* +#... diff --git a/ld/testsuite/ld-loongarch-elf/tlsdesc-dso.d b/ld/testsuite/ld-loongarch-elf/tlsdesc-dso.d index 8f66302..d6997ec 100644 --- a/ld/testsuite/ld-loongarch-elf/tlsdesc-dso.d +++ b/ld/testsuite/ld-loongarch-elf/tlsdesc-dso.d @@ -9,52 +9,52 @@ Disassembly of section .text: [0-9a-f]+ : - +[0-9a-f]+: 18021584 pcaddi \$a0, 4268 - +[0-9a-f]+: 1a000084 pcalau12i \$a0, 4 - +[0-9a-f]+: 28dd4084 ld.d \$a0, \$a0, 1872 - +[0-9a-f]+: 18021364 pcaddi \$a0, 4251 - +[0-9a-f]+: 180213c4 pcaddi \$a0, 4254 - +[0-9a-f]+: 28c00081 ld.d \$ra, \$a0, 0 - +[0-9a-f]+: 4c000021 jirl \$ra, \$ra, 0 - +[0-9a-f]+: 1a000084 pcalau12i \$a0, 4 - +[0-9a-f]+: 28dc0084 ld.d \$a0, \$a0, 1792 - +[0-9a-f]+: 1a000084 pcalau12i \$a0, 4 - +[0-9a-f]+: 28dc0084 ld.d \$a0, \$a0, 1792 - +[0-9a-f]+: 18021364 pcaddi \$a0, 4251 - +[0-9a-f]+: 180213c4 pcaddi \$a0, 4254 - +[0-9a-f]+: 28c00081 ld.d \$ra, \$a0, 0 - +[0-9a-f]+: 4c000021 jirl \$ra, \$ra, 0 - +[0-9a-f]+: 1a000084 pcalau12i \$a0, 4 - +[0-9a-f]+: 28dce084 ld.d \$a0, \$a0, 1848 + +[0-9a-f]+: [0-9a-f]+ pcaddi \$a0, .* + +[0-9a-f]+: [0-9a-f]+ pcalau12i \$a0, .* + +[0-9a-f]+: [0-9a-f]+ ld.d \$a0, \$a0, .* + +[0-9a-f]+: [0-9a-f]+ pcaddi \$a0, .* + +[0-9a-f]+: [0-9a-f]+ pcaddi \$a0, .* + +[0-9a-f]+: [0-9a-f]+ ld.d \$ra, \$a0, .* + +[0-9a-f]+: [0-9a-f]+ jirl \$ra, \$ra, .* + +[0-9a-f]+: [0-9a-f]+ pcalau12i \$a0, .* + +[0-9a-f]+: [0-9a-f]+ ld.d \$a0, \$a0, .* + +[0-9a-f]+: [0-9a-f]+ pcalau12i \$a0, .* + +[0-9a-f]+: [0-9a-f]+ ld.d \$a0, \$a0, .* + +[0-9a-f]+: [0-9a-f]+ pcaddi \$a0, .* + +[0-9a-f]+: [0-9a-f]+ pcaddi \$a0, .* + +[0-9a-f]+: [0-9a-f]+ ld.d \$ra, \$a0, .* + +[0-9a-f]+: [0-9a-f]+ jirl \$ra, \$ra, .* + +[0-9a-f]+: [0-9a-f]+ pcalau12i \$a0, .* + +[0-9a-f]+: [0-9a-f]+ ld.d \$a0, \$a0, .* [0-9a-f]+ : - +[0-9a-f]+: 1a000084 pcalau12i \$a0, 4 - +[0-9a-f]+: 28daa084 ld.d \$a0, \$a0, 1704 - +[0-9a-f]+: 18020de4 pcaddi \$a0, 4207 - +[0-9a-f]+: 18020f04 pcaddi \$a0, 4216 - +[0-9a-f]+: 28c00081 ld.d \$ra, \$a0, 0 - +[0-9a-f]+: 4c000021 jirl \$ra, \$ra, 0 - +[0-9a-f]+: 18020e24 pcaddi \$a0, 4209 - +[0-9a-f]+: 1a000084 pcalau12i \$a0, 4 - +[0-9a-f]+: 28db4084 ld.d \$a0, \$a0, 1744 - +[0-9a-f]+: 1a000084 pcalau12i \$a0, 4 - +[0-9a-f]+: 28db4084 ld.d \$a0, \$a0, 1744 - +[0-9a-f]+: 18020f44 pcaddi \$a0, 4218 - +[0-9a-f]+: 28c00081 ld.d \$ra, \$a0, 0 - +[0-9a-f]+: 4c000021 jirl \$ra, \$ra, 0 - +[0-9a-f]+: 18020e64 pcaddi \$a0, 4211 - +[0-9a-f]+: 1a000084 pcalau12i \$a0, 4 - +[0-9a-f]+: 28dba084 ld.d \$a0, \$a0, 1768 + +[0-9a-f]+: [0-9a-f]+ pcalau12i \$a0, .* + +[0-9a-f]+: [0-9a-f]+ ld.d \$a0, \$a0, .* + +[0-9a-f]+: [0-9a-f]+ pcaddi \$a0, .* + +[0-9a-f]+: [0-9a-f]+ pcaddi \$a0, .* + +[0-9a-f]+: [0-9a-f]+ ld.d \$ra, \$a0, .* + +[0-9a-f]+: [0-9a-f]+ jirl \$ra, \$ra, .* + +[0-9a-f]+: [0-9a-f]+ pcaddi \$a0, .* + +[0-9a-f]+: [0-9a-f]+ pcalau12i \$a0, .* + +[0-9a-f]+: [0-9a-f]+ ld.d \$a0, \$a0, .* + +[0-9a-f]+: [0-9a-f]+ pcalau12i \$a0, .* + +[0-9a-f]+: [0-9a-f]+ ld.d \$a0, \$a0, .* + +[0-9a-f]+: [0-9a-f]+ pcaddi \$a0, .* + +[0-9a-f]+: [0-9a-f]+ ld.d \$ra, \$a0, .* + +[0-9a-f]+: [0-9a-f]+ jirl \$ra, \$ra, .* + +[0-9a-f]+: [0-9a-f]+ pcaddi \$a0, .* + +[0-9a-f]+: [0-9a-f]+ pcalau12i \$a0, .* + +[0-9a-f]+: [0-9a-f]+ ld.d \$a0, \$a0, .* [0-9a-f]+ : - +[0-9a-f]+: 18020ec4 pcaddi \$a0, 4214 - +[0-9a-f]+: 28c00081 ld.d \$ra, \$a0, 0 - +[0-9a-f]+: 4c000021 jirl \$ra, \$ra, 0 + +[0-9a-f]+: [0-9a-f]+ pcaddi \$a0, .* + +[0-9a-f]+: [0-9a-f]+ ld.d \$ra, \$a0, .* + +[0-9a-f]+: [0-9a-f]+ jirl \$ra, \$ra, .* [0-9a-f]+ : - +[0-9a-f]+: 18021224 pcaddi \$a0, 4241 - +[0-9a-f]+: 28c00081 ld.d \$ra, \$a0, 0 - +[0-9a-f]+: 4c000021 jirl \$ra, \$ra, 0 - +[0-9a-f]+: 18021144 pcaddi \$a0, 4234 - +[0-9a-f]+: 28c00081 ld.d \$ra, \$a0, 0 - +[0-9a-f]+: 4c000021 jirl \$ra, \$ra, 0 + +[0-9a-f]+: [0-9a-f]+ pcaddi \$a0, .* + +[0-9a-f]+: [0-9a-f]+ ld.d \$ra, \$a0, .* + +[0-9a-f]+: [0-9a-f]+ jirl \$ra, \$ra, .* + +[0-9a-f]+: [0-9a-f]+ pcaddi \$a0, .* + +[0-9a-f]+: [0-9a-f]+ ld.d \$ra, \$a0, .* + +[0-9a-f]+: [0-9a-f]+ jirl \$ra, \$ra, .* -- cgit v1.1