]> git.ipfire.org Git - thirdparty/binutils-gdb.git/commitdiff
LoongArch: TLS IE needs only one dynamic reloc
authorXi Ruoyao <xry111@xry111.site>
Wed, 19 Jun 2024 06:04:18 +0000 (14:04 +0800)
committerliuzhensong <liuzhensong@loongson.cn>
Thu, 20 Jun 2024 08:55:24 +0000 (16:55 +0800)
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 <xry111@xry111.site>
bfd/elfnn-loongarch.c
ld/testsuite/ld-loongarch-elf/desc-ie-reloc.d [new file with mode: 0644]
ld/testsuite/ld-loongarch-elf/desc-ie.d
ld/testsuite/ld-loongarch-elf/ld-loongarch-elf.exp
ld/testsuite/ld-loongarch-elf/tlsdesc-dso-reloc.d [new file with mode: 0644]
ld/testsuite/ld-loongarch-elf/tlsdesc-dso.d

index 93c036f6a53a823ea675930519cc2002ef0e62fd..b1720760475b0e59f9b8a39daacd2fba9138f812 100644 (file)
@@ -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 (file)
index 0000000..c7a2f8e
--- /dev/null
@@ -0,0 +1,9 @@
+#source: desc-ie.s
+#as:
+#ld: -shared -z norelro --hash-style=both
+#readelf: -Wr
+
+#failif
+#...
+.* +R_LARCH_NONE +.*
+#...
index c833b233d42bac83de9bf8a614767f65a4b1db84..0759404b89ae13c0cb1ad3eeffddfb2339e242f0 100644 (file)
@@ -8,7 +8,7 @@
 Disassembly of section .text:
 
 [0-9a-f]+ <fn1>:
- +[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, .*
index 40f56576cbcc41930173bf3863326f2f8edec4e8..d833a89246eda550531985e0d26f93db59789e6d 100644 (file)
@@ -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 (file)
index 0000000..d5afa7c
--- /dev/null
@@ -0,0 +1,9 @@
+#source: tlsdesc-dso.s
+#as:
+#ld: -shared -z norelro --hash-style=both
+#readelf: -Wr
+
+#failif
+#...
+.* +R_LARCH_NONE +.*
+#...
index 8f66302f1cfd1e5b671fcf5d9bcdbcb04b27c9ef..d6997ec9455c25b624f3b22a2762783a6b580bc3 100644 (file)
@@ -9,52 +9,52 @@
 Disassembly of section .text:
 
 [0-9a-f]+ <fun_gl1>:
- +[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]+ <fun_lo>:
- +[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]+ <fun_external>:
- +[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]+ <fun_hidden>:
- +[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, .*