diff options
Diffstat (limited to 'testsuite')
-rw-r--r-- | testsuite/Makefile.am | 2 | ||||
-rw-r--r-- | testsuite/Makefile.in | 2 | ||||
-rw-r--r-- | testsuite/shuffle8.c | 20 | ||||
-rwxr-xr-x | testsuite/shuffle8.sh | 19 |
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 |