Don't generate PLT for IFUNC GOT/pointer reference
[deliverable/binutils-gdb.git] / ld / testsuite / ld-i386 / i386.exp
index d30f9fb53b4528cbaf7d2f0aeab6fa805e3e6aa3..9efe406b9b5d666b975a268c7cea40ddac27684f 100644 (file)
@@ -133,6 +133,13 @@ set i386tests {
      {{readelf -Ssrl tlspic.rd} {objdump -drj.text tlspic.dd}
       {objdump -sj.got tlspic.sd} {objdump -sj.tdata tlspic.td}}
       "libtlspic.so"}
+    {"TLS -fpic -shared transitions without PLT"
+     "-shared -melf_i386 --no-ld-generated-unwind-info" ""
+     "-mrelax-relocations=yes --32"
+     {tlspic3.s tlspic2.s}
+     {{readelf -Ssrl tlspic2.rd} {objdump -drj.text tlspic2.dd}
+      {objdump -sj.got tlspic2.sd} {objdump -sj.tdata tlspic2.td}}
+      "libtlspic2.so"}
     {"TLS descriptor -fpic -shared transitions"
      "-shared -melf_i386 --no-ld-generated-unwind-info" ""
      "--32" {tlsdesc.s tlspic2.s}
@@ -147,6 +154,13 @@ set i386tests {
      {{readelf -Ssrl tlsbin.rd} {objdump -drj.text tlsbin.dd}
       {objdump -sj.got tlsbin.sd} {objdump -sj.tdata tlsbin.td}}
       "tlsbin"}
+    {"TLS -fpic and -fno-pic exec transitions without PLT"
+     "-melf_i386 tmpdir/libtlslib.so --no-ld-generated-unwind-info" ""
+     "-mrelax-relocations=yes --32"
+     {tlsbinpic2.s tlsbin.s}
+     {{readelf -Ssrl tlsbin2.rd} {objdump -drj.text tlsbin2.dd}
+      {objdump -sj.got tlsbin2.sd} {objdump -sj.tdata tlsbin2.td}}
+      "tlsbin2"}
     {"TLS descriptor -fpic and -fno-pic exec transitions"
      "-melf_i386 tmpdir/libtlslib.so --no-ld-generated-unwind-info" ""
      "--32" {tlsbindesc.s tlsbin.s}
@@ -177,9 +191,17 @@ set i386tests {
     {"TLS GD->LE transition" "-melf_i386" ""
      "--32" {tlsgd1.s}
      {{objdump -dwr tlsgd1.dd}} "tlsgd1"}
+    {"TLS GD->LE transition without PLT" "-melf_i386" ""
+     "-mrelax-relocations=yes --32"
+     {tlsgd3.s}
+     {{objdump -dwr tlsgd3.dd}} "tlsgd3"}
     {"TLS LD->LE transition" "-melf_i386" ""
      "--32" {tlsld1.s}
      {{objdump -dwr tlsld1.dd}} "tlsld1"}
+    {"TLS LD->LE transition without PLT" "-melf_i386" ""
+     "-mrelax-relocations=yes --32"
+     {tlsld2.s}
+     {{objdump -dwr tlsld2.dd}} "tlsld2"}
     {"TLS IE->LE transition" "-melf_i386" ""
      "--32" {tlsie1.s}
      {{objdump -dwr tlsie1.dd}} "tlsie1"}
@@ -270,6 +292,7 @@ run_dump_test "pcrel16abs"
 run_dump_test "alloc"
 run_dump_test "warn1"
 run_dump_test "tlsgd2"
+run_dump_test "tlsgd4"
 run_dump_test "tlsie2"
 run_dump_test "tlsie3"
 run_dump_test "tlsie4"
@@ -286,6 +309,9 @@ run_dump_test "protected6a"
 run_dump_test "protected6b"
 run_dump_test "tlspie1"
 run_dump_test "tlspie2"
+run_dump_test "tlspie3a"
+run_dump_test "tlspie3b"
+run_dump_test "tlspie3c"
 run_dump_test "nogot1"
 run_dump_test "nogot2"
 run_dump_test "discarded1"
@@ -346,6 +372,7 @@ run_dump_test "pr19636-2c-nacl"
 run_dump_test "pr19636-2d"
 run_dump_test "pr19636-2d-nacl"
 run_dump_test "pr19636-2e"
+run_dump_test "pr19636-2e-nacl"
 run_dump_test "pr19636-3a"
 run_dump_test "pr19636-3b"
 run_dump_test "pr19636-3c"
@@ -374,6 +401,18 @@ run_dump_test "undefweaka"
 run_dump_test "undefweakb"
 run_dump_test "pr19539"
 run_dump_test "pr20117"
+run_dump_test "pr20244-1a"
+run_dump_test "pr20244-1b"
+run_dump_test "pr20244-1c"
+run_dump_test "pr20244-2a"
+run_dump_test "pr20244-2b"
+run_dump_test "pr20244-2c"
+run_dump_test "pr20244-2d"
+run_dump_test "pr20253-3"
+run_dump_test "pr20253-4a"
+run_dump_test "pr20253-4b"
+run_dump_test "pr20253-4c"
+run_dump_test "pr20253-5"
 
 if { !([istarget "i?86-*-linux*"]
        || [istarget "i?86-*-gnu*"]
@@ -780,6 +819,42 @@ if { [isnative]
     undefined_weak "-fPIE" "-pie -z nodynamic-undefined-weak"
 }
 
+# Must be native with the C compiler and working IFUNC support,
+if { [isnative]
+     && [check_ifunc_available]
+     && [istarget "i?86-*-*"]
+     && [which $CC] != 0 } {
+    run_cc_link_tests [list \
+       [list \
+           "Build ifunc-1a.o ifunc-1b.o ifunc-1c.o ifunc-1d.o" \
+           "" \
+           "-fPIC -O2 -g" \
+           { ifunc-1a.c ifunc-1b.S ifunc-1c.S ifunc-1d.S } \
+       ] \
+    ]
+
+    run_ld_link_exec_tests [] [list \
+       [list \
+           "Run ifunc-1a" \
+           "tmpdir/ifunc-1a.o tmpdir/ifunc-1b.o \
+            tmpdir/ifunc-1c.o tmpdir/ifunc-1d.o" \
+           "" \
+           { dummy.c } \
+           "ifunc-1a" \
+           "pass.out" \
+       ] \
+       [list \
+           "Run ifunc-1b" \
+           "--static tmpdir/ifunc-1a.o tmpdir/ifunc-1b.o \
+           tmpdir/ifunc-1c.o tmpdir/ifunc-1d.o" \
+           "" \
+           { dummy.c } \
+           "ifunc-1b" \
+           "pass.out" \
+       ] \
+    ]
+}
+
 if { !([istarget "i?86-*-linux*"]
        || [istarget "x86_64-*-linux*"]) } {
     return
This page took 0.038483 seconds and 4 git commands to generate.