diff options
author | H.J. Lu <hjl.tools@gmail.com> | 2013-01-18 00:21:52 +0000 |
---|---|---|
committer | H.J. Lu <hjl.tools@gmail.com> | 2013-01-18 00:21:52 +0000 |
commit | 9a645e5c0d65fe630ce98bcecbd9138e768f2bdd (patch) | |
tree | 42ec68283af846c9cf92bada476ee6e905f0c884 | |
parent | 1cf48f484248026335ee15c3a178e4bb4f88d2ba (diff) | |
download | gdb-9a645e5c0d65fe630ce98bcecbd9138e768f2bdd.zip gdb-9a645e5c0d65fe630ce98bcecbd9138e768f2bdd.tar.gz gdb-9a645e5c0d65fe630ce98bcecbd9138e768f2bdd.tar.bz2 |
Verify run-time size relocations if supported
* ld-size/size-7.out: New file.
* ld-size/size-8.out: Likewise.
* ld-size/size-9.out: Likewise.
* ld-size/size-9.rd: Likewise.
* ld-size/size-9a.c: Likewise.
* ld-size/size-9b.c: Likewise.
* ld-size/size-10.out: Likewise.
* ld-size/size-10.rd: Likewise.
* ld-size/size-10a.c: Likewise.
* ld-size/size-10b.c: Likewise.
* ld-size/size.exp (build_tests): Build libsize-9.so and
libsize-10.so.
Run-time size relocation tests if supported.
(run_time_tests): New.
-rw-r--r-- | ld/testsuite/ChangeLog | 18 | ||||
-rw-r--r-- | ld/testsuite/ld-size/size-10.out | 1 | ||||
-rw-r--r-- | ld/testsuite/ld-size/size-10.rd | 3 | ||||
-rw-r--r-- | ld/testsuite/ld-size/size-10a.c | 14 | ||||
-rw-r--r-- | ld/testsuite/ld-size/size-10b.c | 10 | ||||
-rw-r--r-- | ld/testsuite/ld-size/size-7.out | 1 | ||||
-rw-r--r-- | ld/testsuite/ld-size/size-8.out | 1 | ||||
-rw-r--r-- | ld/testsuite/ld-size/size-9.out | 1 | ||||
-rw-r--r-- | ld/testsuite/ld-size/size-9.rd | 3 | ||||
-rw-r--r-- | ld/testsuite/ld-size/size-9a.c | 13 | ||||
-rw-r--r-- | ld/testsuite/ld-size/size-9b.c | 3 | ||||
-rw-r--r-- | ld/testsuite/ld-size/size.exp | 35 |
12 files changed, 103 insertions, 0 deletions
diff --git a/ld/testsuite/ChangeLog b/ld/testsuite/ChangeLog index c7ffa1e..76d4585 100644 --- a/ld/testsuite/ChangeLog +++ b/ld/testsuite/ChangeLog @@ -1,5 +1,23 @@ 2013-01-17 H.J. Lu <hongjiu.lu@intel.com> + * ld-size/size-7.out: New file. + * ld-size/size-8.out: Likewise. + * ld-size/size-9.out: Likewise. + * ld-size/size-9.rd: Likewise. + * ld-size/size-9a.c: Likewise. + * ld-size/size-9b.c: Likewise. + * ld-size/size-10.out: Likewise. + * ld-size/size-10.rd: Likewise. + * ld-size/size-10a.c: Likewise. + * ld-size/size-10b.c: Likewise. + + * ld-size/size.exp (build_tests): Build libsize-9.so and + libsize-10.so. + Run-time size relocation tests if supported. + (run_time_tests): New. + +2013-01-17 H.J. Lu <hongjiu.lu@intel.com> + * ld-size/size-1.c: New file. * ld-size/size-1.out: Likewise. * ld-size/size-1a.c: Likewise. diff --git a/ld/testsuite/ld-size/size-10.out b/ld/testsuite/ld-size/size-10.out new file mode 100644 index 0000000..d86bac9 --- /dev/null +++ b/ld/testsuite/ld-size/size-10.out @@ -0,0 +1 @@ +OK diff --git a/ld/testsuite/ld-size/size-10.rd b/ld/testsuite/ld-size/size-10.rd new file mode 100644 index 0000000..a5f8ee8 --- /dev/null +++ b/ld/testsuite/ld-size/size-10.rd @@ -0,0 +1,3 @@ +#... +[0-9a-f]+ +[0-9a-f]+ +R_.*_SIZE(32|64) +.* +#pass diff --git a/ld/testsuite/ld-size/size-10a.c b/ld/testsuite/ld-size/size-10a.c new file mode 100644 index 0000000..47e6a2f --- /dev/null +++ b/ld/testsuite/ld-size/size-10a.c @@ -0,0 +1,14 @@ +#include <stdio.h> + +extern int bar_size; +extern char *get_bar (int, int); + +int +main () +{ + char *bar = get_bar (2, 20); + if (bar_size == 10 && bar[2] == 20) + printf ("OK\n"); + + return 0; +} diff --git a/ld/testsuite/ld-size/size-10b.c b/ld/testsuite/ld-size/size-10b.c new file mode 100644 index 0000000..d043371 --- /dev/null +++ b/ld/testsuite/ld-size/size-10b.c @@ -0,0 +1,10 @@ +__thread char bar[10]; +extern char size_of_bar asm ("bar@SIZE"); +char *bar_size = &size_of_bar; + +char * +get_bar (int i, int v) +{ + bar[i] = v; + return bar; +} diff --git a/ld/testsuite/ld-size/size-7.out b/ld/testsuite/ld-size/size-7.out new file mode 100644 index 0000000..d86bac9 --- /dev/null +++ b/ld/testsuite/ld-size/size-7.out @@ -0,0 +1 @@ +OK diff --git a/ld/testsuite/ld-size/size-8.out b/ld/testsuite/ld-size/size-8.out new file mode 100644 index 0000000..d86bac9 --- /dev/null +++ b/ld/testsuite/ld-size/size-8.out @@ -0,0 +1 @@ +OK diff --git a/ld/testsuite/ld-size/size-9.out b/ld/testsuite/ld-size/size-9.out new file mode 100644 index 0000000..d86bac9 --- /dev/null +++ b/ld/testsuite/ld-size/size-9.out @@ -0,0 +1 @@ +OK diff --git a/ld/testsuite/ld-size/size-9.rd b/ld/testsuite/ld-size/size-9.rd new file mode 100644 index 0000000..a5f8ee8 --- /dev/null +++ b/ld/testsuite/ld-size/size-9.rd @@ -0,0 +1,3 @@ +#... +[0-9a-f]+ +[0-9a-f]+ +R_.*_SIZE(32|64) +.* +#pass diff --git a/ld/testsuite/ld-size/size-9a.c b/ld/testsuite/ld-size/size-9a.c new file mode 100644 index 0000000..229534b --- /dev/null +++ b/ld/testsuite/ld-size/size-9a.c @@ -0,0 +1,13 @@ +#include <stdio.h> + +char bar[20]; +extern int bar_size; + +int +main () +{ + if (bar_size == 20) + printf ("OK\n"); + + return 0; +} diff --git a/ld/testsuite/ld-size/size-9b.c b/ld/testsuite/ld-size/size-9b.c new file mode 100644 index 0000000..16890d1 --- /dev/null +++ b/ld/testsuite/ld-size/size-9b.c @@ -0,0 +1,3 @@ +char bar[10]; +extern char size_of_bar asm ("bar@SIZE"); +char *bar_size = &size_of_bar; diff --git a/ld/testsuite/ld-size/size.exp b/ld/testsuite/ld-size/size.exp index fe4702c..24269c5 100644 --- a/ld/testsuite/ld-size/size.exp +++ b/ld/testsuite/ld-size/size.exp @@ -85,6 +85,12 @@ set build_tests { {"Build size-8" "tmpdir/libsize-8.so" "" {size-8a.c} {{readelf -rW size-8.rd}} "size-8.exe"} + {"Build libsize-9.so" + "-shared" "-fPIC" + {size-9b.c} {{readelf -rW size-9.rd}} "libsize-9.so"} + {"Build libsize-10.so" + "-shared" "-fPIC" + {size-10b.c} {{readelf -rW size-10.rd}} "libsize-10.so"} } run_cc_link_tests $build_tests @@ -132,3 +138,32 @@ set run_tests { } run_ld_link_exec_tests [] $run_tests + +# Check if size relocation works at run-time. +catch "exec tmpdir/size-7.exe > tmpdir/dump.out" exec_output +if ![string match "" $exec_output] then { + send_log "No run-time size relocation support: $exec_output\n" + verbose "No run-time size relocation support: $exec_output" 1 + return +} + +if { [regexp_diff "tmpdir/dump.out" "$srcdir/$subdir/size-7.out" ] } then { + verbose "output is [file_contents "tmpdir/dump.out"]" 2 + fail "Run-time size relocation" + return +} + +# Run-time size relocation tests. +set run_time_tests { + {"Run size-8" + "tmpdir/libsize-8.so" "" + {size-8a.c} "size-8" "size-8.out"} + {"Run size-9" + "tmpdir/libsize-9.so" "" + {size-9a.c} "size-9" "size-9.out"} + {"Run size-10" + "tmpdir/libsize-10.so" "" + {size-10a.c} "size-10" "size-10.out"} +} + +run_ld_link_exec_tests [] $run_time_tests |