aboutsummaryrefslogtreecommitdiffstats
path: root/testsuite
diff options
context:
space:
mode:
Diffstat (limited to 'testsuite')
-rw-r--r--testsuite/Makefile.am2
-rw-r--r--testsuite/Makefile.in2
-rw-r--r--testsuite/shuffle8.c20
-rwxr-xr-xtestsuite/shuffle8.sh19
4 files changed, 41 insertions, 2 deletions
diff --git a/testsuite/Makefile.am b/testsuite/Makefile.am
index 1cebc8f..3af929b 100644
--- a/testsuite/Makefile.am
+++ b/testsuite/Makefile.am
@@ -9,7 +9,7 @@ TESTS = movelibs.sh \
reloc1.sh reloc2.sh reloc3.sh reloc4.sh reloc5.sh reloc6.sh \
reloc7.sh reloc8.sh reloc9.sh reloc10.sh reloc11.sh \
shuffle1.sh shuffle2.sh shuffle3.sh shuffle4.sh shuffle5.sh \
- shuffle6.sh shuffle7.sh undo1.sh \
+ shuffle6.sh shuffle7.sh shuffle8.sh undo1.sh \
layout1.sh layout2.sh \
tls1.sh tls2.sh tls3.sh tls4.sh tls5.sh tls6.sh tls7.sh \
cxx1.sh quick1.sh quick2.sh quick3.sh cycle1.sh cycle2.sh \
diff --git a/testsuite/Makefile.in b/testsuite/Makefile.in
index b8f07b9..53feb82 100644
--- a/testsuite/Makefile.in
+++ b/testsuite/Makefile.in
@@ -104,7 +104,7 @@ TESTS = movelibs.sh \
reloc1.sh reloc2.sh reloc3.sh reloc4.sh reloc5.sh reloc6.sh \
reloc7.sh reloc8.sh reloc9.sh reloc10.sh reloc11.sh \
shuffle1.sh shuffle2.sh shuffle3.sh shuffle4.sh shuffle5.sh \
- shuffle6.sh shuffle7.sh undo1.sh \
+ shuffle6.sh shuffle7.sh shuffle8.sh undo1.sh \
layout1.sh layout2.sh \
tls1.sh tls2.sh tls3.sh tls4.sh tls5.sh tls6.sh tls7.sh \
cxx1.sh quick1.sh quick2.sh quick3.sh cycle1.sh cycle2.sh \
diff --git a/testsuite/shuffle8.c b/testsuite/shuffle8.c
new file mode 100644
index 0000000..4e80184
--- /dev/null
+++ b/testsuite/shuffle8.c
@@ -0,0 +1,20 @@
+#include "reloc1.h"
+#include <stdlib.h>
+
+static struct A local = { 77, &local, &bar + 4 };
+int vbss[16384] __attribute__((aligned (4096)));
+int vdata __attribute__((aligned (4096))) = 5;
+
+asm (".text; .balign 4096; vtext:; .previous");
+
+int main()
+{
+ if (foo.a != 1 || foo.b != &foo || foo.c != &bar || bar != 26)
+ abort ();
+ if (f1 () != 11 || f2 () != 12)
+ abort ();
+ local.c -= 4;
+ if (local.a != 77 || local.b != &local || local.c != &bar)
+ abort ();
+ exit (vbss[31] + vdata - 5);
+}
diff --git a/testsuite/shuffle8.sh b/testsuite/shuffle8.sh
new file mode 100755
index 0000000..d0768a4
--- /dev/null
+++ b/testsuite/shuffle8.sh
@@ -0,0 +1,19 @@
+#!/bin/bash
+. `dirname $0`/functions.sh
+rm -f shuffle8 shuffle8lib*.so shuffle8.log shuffle8.lds
+rm -f prelink.cache
+$CC -shared -O2 -fpic -o shuffle8lib1.so $srcdir/reloc1lib1.c
+$CC -shared -O2 -fpic -o shuffle8lib2.so $srcdir/reloc1lib2.c shuffle8lib1.so
+BINS="shuffle8"
+LIBS="shuffle8lib1.so shuffle8lib2.so"
+$CCLINK -o shuffle8 $srcdir/shuffle8.c -Wl,--rpath-link,. shuffle8lib2.so
+strip -R .comment shuffle8
+savelibs
+echo $PRELINK ${PRELINK_OPTS--vm} ./shuffle8 > shuffle8.log
+$PRELINK ${PRELINK_OPTS--vm} ./shuffle8 >> shuffle8.log 2>&1 || exit 1
+grep -q ^`echo $PRELINK | sed 's/ .*$/: /'` shuffle8.log && exit 2
+LD_LIBRARY_PATH=. ./shuffle8 || exit 3
+readelf -a ./shuffle8 >> shuffle8.log 2>&1 || exit 4
+# So that it is not prelinked again
+chmod -x ./shuffle8
+comparelibs >> shuffle8.log 2>&1 || exit 5