Fix x86 ld testsuite fails with glibc < 2.28
authorAlan Modra <amodra@gmail.com>
Wed, 10 Jun 2020 03:38:15 +0000 (13:08 +0930)
committerAlan Modra <amodra@gmail.com>
Wed, 10 Jun 2020 12:49:07 +0000 (22:19 +0930)
* testsuite/ld-elf/linux-x86.exp: Build tests when non-native.
(check_pr25749b): Add optional args.  Set expected pass file
from args.  Run -1b and -2a tests with passall.out.
* testsuite/ld-elf/passall.out: New file.
* testsuite/ld-elf/pr25749-1.c: Adjust to pass with older glibc.
* testsuite/ld-elf/pr25749-2.c: Likewise.
* testsuite/lib/ld-lib.exp (run_ld_link_exec_tests): Use
regexp_diff to compare expected output from running binary.

ld/ChangeLog
ld/testsuite/ld-elf/linux-x86.exp
ld/testsuite/ld-elf/passall.out [new file with mode: 0644]
ld/testsuite/ld-elf/pr25749-1.c
ld/testsuite/ld-elf/pr25749-2.c
ld/testsuite/lib/ld-lib.exp

index 74636bbb7c887b94bbbfca072c078e4c7180b013..18fec01e5abe209363b8ba9b185993232caf8434 100644 (file)
@@ -1,3 +1,14 @@
+2020-06-10  Alan Modra  <amodra@gmail.com>
+
+       * testsuite/ld-elf/linux-x86.exp: Build tests when non-native.
+       (check_pr25749b): Add optional args.  Set expected pass file
+       from args.  Run -1b and -2a tests with passall.out.
+       * testsuite/ld-elf/passall.out: New file.
+       * testsuite/ld-elf/pr25749-1.c: Adjust to pass with older glibc.
+       * testsuite/ld-elf/pr25749-2.c: Likewise.
+       * testsuite/lib/ld-lib.exp (run_ld_link_exec_tests): Use
+       regexp_diff to compare expected output from running binary.
+
 2020-06-10  H.J. Lu  <hongjiu.lu@intel.com>
 
        PR ld/26094
index eeaf4590e3835bad77ec89adef40dcf73acf0bf4..aae75d443fecab99a8c706c6a5306cb80c3e7d10 100644 (file)
@@ -48,10 +48,6 @@ run_ld_link_tests [list \
 ]
 
 # Test very simple native Linux/x86 programs with linux-x86.S.
-if { ![isnative] || ![check_compiler_available] } {
-    return
-}
-
 run_ld_link_exec_tests [list \
     [list \
        "Run PR ld/23428 test" \
@@ -215,7 +211,7 @@ if { [istarget "i?86-*-linux*"] } {
     }
 }
 
-proc check_pr25749b {testname srcfilea srcfileb cflags ldflags dsoldflags} {
+proc check_pr25749b {testname srcfilea srcfileb cflags ldflags dsoldflags args} {
     global objcopy
     global srcdir
     global subdir
@@ -253,6 +249,12 @@ proc check_pr25749b {testname srcfilea srcfileb cflags ldflags dsoldflags} {
            "lib${testname}.so" \
        ] \
     ]
+
+    set pass "pass.out"
+    if { [llength $args] > 0 } {
+       set pass [lindex $args 0]
+    }
+
     run_ld_link_exec_tests [list \
        [list \
            "Run ${testname}b ($ldflags $cflags)" \
@@ -260,7 +262,7 @@ proc check_pr25749b {testname srcfilea srcfileb cflags ldflags dsoldflags} {
            "" \
            [list $srcfilea]\
            "${testname}b" \
-           "pass.out" \
+           "$pass" \
            "$cflags -I../bfd" \
        ] \
     ]
@@ -269,13 +271,13 @@ proc check_pr25749b {testname srcfilea srcfileb cflags ldflags dsoldflags} {
 check_pr25749b "pr25749-1a" "pr25749-1.c" "pr25749-1a.c" "$NOPIE_CFLAGS" "$NOPIE_LDFLAGS" ""
 check_pr25749b "pr25749-1a" "pr25749-1.c" "pr25749-1a.c" "-fPIE" "-pie" ""
 check_pr25749b "pr25749-1a" "pr25749-1.c" "pr25749-1a.c" "-fPIE" "-pie" "-Wl,-Bsymbolic"
-check_pr25749b "pr25749-1b" "pr25749-1.c" "pr25749-1b.c" "$NOPIE_CFLAGS" "$NOPIE_LDFLAGS" ""
-check_pr25749b "pr25749-1b" "pr25749-1.c" "pr25749-1b.c" "-fPIE" "-pie" ""
+check_pr25749b "pr25749-1b" "pr25749-1.c" "pr25749-1b.c" "$NOPIE_CFLAGS" "$NOPIE_LDFLAGS" "" "passall.out"
+check_pr25749b "pr25749-1b" "pr25749-1.c" "pr25749-1b.c" "-fPIE" "-pie" "" "passall.out"
 check_pr25749b "pr25749-1b" "pr25749-1.c" "pr25749-1b.c" "-fPIE" "-pie" "-Wl,-Bsymbolic"
 check_pr25749b "pr25749-1d" "pr25749-1.c" "pr25749-1d.c" "$NOPIE_CFLAGS" "$NOPIE_LDFLAGS" "-Wl,-defsym=_begin=0"
 check_pr25749b "pr25749-1d" "pr25749-1.c" "pr25749-1d.c" "-fPIE" "-pie" "-Wl,-defsym=_begin=0"
 check_pr25749b "pr25749-1d" "pr25749-1.c" "pr25749-1d.c" "-fPIE" "-pie" "-Wl,-Bsymbolic -Wl,-defsym=_begin=0"
-check_pr25749b "pr25749-2a" "pr25749-2.c" "pr25749-2a.s" "$NOPIE_CFLAGS" "$NOPIE_LDFLAGS" ""
-check_pr25749b "pr25749-2a" "pr25749-2.c" "pr25749-2a.s" "-fPIE" "-pie" ""
+check_pr25749b "pr25749-2a" "pr25749-2.c" "pr25749-2a.s" "$NOPIE_CFLAGS" "$NOPIE_LDFLAGS" "" "passall.out"
+check_pr25749b "pr25749-2a" "pr25749-2.c" "pr25749-2a.s" "-fPIE" "-pie" "" "passall.out"
 check_pr25749b "pr25749-2b" "pr25749-2.c" "pr25749-2b.s" "$NOPIE_CFLAGS" "$NOPIE_LDFLAGS" ""
 check_pr25749b "pr25749-2b" "pr25749-2.c" "pr25749-2b.s" "-fPIE" "-pie" ""
diff --git a/ld/testsuite/ld-elf/passall.out b/ld/testsuite/ld-elf/passall.out
new file mode 100644 (file)
index 0000000..beec04b
--- /dev/null
@@ -0,0 +1 @@
+PASS.*
index 5b37af08c697569fc7333df7671ddbbe3f38ddd1..12d0574a013391595dab708e128cb9d83d0f83f4 100644 (file)
@@ -6,7 +6,13 @@ extern intptr_t size (void);
 int
 main ()
 {
-  if (size () == 147)
+  if (size () == 303 /* size of this file */)
     printf ("PASS\n");
+#ifdef __GLIBC_PREREQ
+# if !__GLIBC_PREREQ (2, 28)
+  else
+    printf ("PASS (incorrect result due to glibc bug)\n");
+# endif
+#endif
   return 0;
 }
index 820bebc1673fc95174e168b96e5f5fcd0a7212cd..3ef6f0c6a7bff5aec7e4043d66d8e99429df34f8 100644 (file)
@@ -6,7 +6,13 @@ extern intptr_t size;
 int
 main ()
 {
-  if (size == 137)
+  if (size == 293 /* size of this file */)
     printf ("PASS\n");
+#ifdef __GLIBC_PREREQ
+# if !__GLIBC_PREREQ (2, 28)
+  else
+    printf ("PASS (incorrect result due to glibc bug)\n");
+# endif
+#endif
   return 0;
 }
index 6535881dd1f7d0d258b5219dd7cabc37115a0e42..a949437cea301b944df559009e5ba0dc21c2b19b 100644 (file)
@@ -773,14 +773,9 @@ proc run_ld_link_exec_tests { ldtests args } {
                verbose "$exec_output" 1
                set failed 1
            } else {
-               send_log "diff $binfile.out $srcdir/$subdir/$expfile\n"
-               verbose "diff $binfile.out $srcdir/$subdir/$expfile"
-               catch "exec diff $binfile.out $srcdir/$subdir/$expfile" exec_output
-               set exec_output [prune_warnings $exec_output]
-
-               if ![string match "" $exec_output] then {
-                   send_log "$exec_output\n"
-                   verbose "$exec_output" 1
+               send_log [file_contents $binfile.out]
+               verbose [file_contents $binfile.out] 2
+               if [regexp_diff "$binfile.out" "$srcdir/$subdir/$expfile"] {
                    set failed 1
                }
            }