ld/x86: skip p_align-1 tests with unsuitable compiler
authorJan Beulich <jbeulich@suse.com>
Tue, 28 Jun 2022 06:56:06 +0000 (08:56 +0200)
committerJan Beulich <jbeulich@suse.com>
Tue, 28 Jun 2022 06:56:06 +0000 (08:56 +0200)
When the compiler doesn't properly arrange for foo's alignment, there's
no point even trying these tests. Report the situation as a single
"unsupported" test.

ld/testsuite/ld-elf/linux-x86.exp

index e3f20189e4cbe4febdc714263bfa3e619c6f57a1..ae0ed6ac0d2ec27528767f75c5346ad89c089cce 100644 (file)
@@ -185,44 +185,54 @@ run_ld_link_exec_tests [list \
        "" \
        "tmpdir/indirect-extern-access-2.so" \
     ] \
-    [list \
-       "Run p_align-1a without PIE" \
-       "$NOPIE_LDFLAGS" \
-       "" \
-       { p_align-1.c } \
-       "p_align-1a" \
-       "pass.out" \
-       "$NOPIE_CFLAGS" \
-    ] \
-    [list \
-       "Run p_align-1b with PIE" \
-       "-pie" \
-       "" \
-       { p_align-1.c } \
-       "p_align-1b" \
-       "pass.out" \
-       "-fpie" \
-    ] \
-    [list \
-       "Run p_align-1c with -Wl,-z,max-page-size=0x1000 without PIE" \
-       "$NOPIE_LDFLAGS -Wl,-z,max-page-size=0x1000" \
-       "" \
-       { p_align-1.c } \
-       "p_align-1c" \
-       "pass.out" \
-       "$NOPIE_CFLAGS" \
-    ] \
-    [list \
-       "Run p_align-1d with -Wl,-z,max-page-size=0x1000 with PIE" \
-       "-pie -Wl,-z,max-page-size=0x1000" \
-       "" \
-       { p_align-1.c } \
-       "p_align-1d" \
-       "pass.out" \
-       "-fpie" \
-    ] \
 ]
 
+# Old gcc silently ignores __attribute__ ((aligned())) with too big alignment.
+ld_compile $CC_FOR_TARGET $srcdir/$subdir/p_align-1.c tmpdir/p_align-1.o
+set output [run_host_cmd "$READELF" "-SW tmpdir/p_align-1.o"]
+if { [regexp { [.]data *PROGBITS .* 8388608[\n]} $output] } then {
+    run_ld_link_exec_tests [list \
+       [list \
+           "Run p_align-1a without PIE" \
+           "$NOPIE_LDFLAGS" \
+           "" \
+           { p_align-1.c } \
+           "p_align-1a" \
+           "pass.out" \
+           "$NOPIE_CFLAGS" \
+       ] \
+       [list \
+           "Run p_align-1b with PIE" \
+           "-pie" \
+           "" \
+           { p_align-1.c } \
+           "p_align-1b" \
+           "pass.out" \
+           "-fpie" \
+       ] \
+       [list \
+           "Run p_align-1c with -Wl,-z,max-page-size=0x1000 without PIE" \
+           "$NOPIE_LDFLAGS -Wl,-z,max-page-size=0x1000" \
+           "" \
+           { p_align-1.c } \
+           "p_align-1c" \
+           "pass.out" \
+           "$NOPIE_CFLAGS" \
+       ] \
+       [list \
+           "Run p_align-1d with -Wl,-z,max-page-size=0x1000 with PIE" \
+           "-pie -Wl,-z,max-page-size=0x1000" \
+           "" \
+           { p_align-1.c } \
+           "p_align-1d" \
+           "pass.out" \
+           "-fpie" \
+       ] \
+    ]
+} else {
+    unsupported "p_align-1"
+}
+
 proc elfedit_test { options test output } {
     global ELFEDIT
     global READELF