From 9a645e5c0d65fe630ce98bcecbd9138e768f2bdd Mon Sep 17 00:00:00 2001 From: "H.J. Lu" Date: Fri, 18 Jan 2013 00:21:52 +0000 Subject: [PATCH] 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. --- ld/testsuite/ChangeLog | 18 ++++++++++++++++ ld/testsuite/ld-size/size-10.out | 1 + ld/testsuite/ld-size/size-10.rd | 3 +++ ld/testsuite/ld-size/size-10a.c | 14 +++++++++++++ ld/testsuite/ld-size/size-10b.c | 10 +++++++++ ld/testsuite/ld-size/size-7.out | 1 + ld/testsuite/ld-size/size-8.out | 1 + ld/testsuite/ld-size/size-9.out | 1 + ld/testsuite/ld-size/size-9.rd | 3 +++ ld/testsuite/ld-size/size-9a.c | 13 ++++++++++++ ld/testsuite/ld-size/size-9b.c | 3 +++ ld/testsuite/ld-size/size.exp | 35 ++++++++++++++++++++++++++++++++ 12 files changed, 103 insertions(+) create mode 100644 ld/testsuite/ld-size/size-10.out create mode 100644 ld/testsuite/ld-size/size-10.rd create mode 100644 ld/testsuite/ld-size/size-10a.c create mode 100644 ld/testsuite/ld-size/size-10b.c create mode 100644 ld/testsuite/ld-size/size-7.out create mode 100644 ld/testsuite/ld-size/size-8.out create mode 100644 ld/testsuite/ld-size/size-9.out create mode 100644 ld/testsuite/ld-size/size-9.rd create mode 100644 ld/testsuite/ld-size/size-9a.c create mode 100644 ld/testsuite/ld-size/size-9b.c diff --git a/ld/testsuite/ChangeLog b/ld/testsuite/ChangeLog index c7ffa1e262..76d4585ab8 100644 --- a/ld/testsuite/ChangeLog +++ b/ld/testsuite/ChangeLog @@ -1,3 +1,21 @@ +2013-01-17 H.J. Lu + + * 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 * ld-size/size-1.c: New file. diff --git a/ld/testsuite/ld-size/size-10.out b/ld/testsuite/ld-size/size-10.out new file mode 100644 index 0000000000..d86bac9de5 --- /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 0000000000..a5f8ee8ded --- /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 0000000000..47e6a2fc50 --- /dev/null +++ b/ld/testsuite/ld-size/size-10a.c @@ -0,0 +1,14 @@ +#include + +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 0000000000..d043371b11 --- /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 0000000000..d86bac9de5 --- /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 0000000000..d86bac9de5 --- /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 0000000000..d86bac9de5 --- /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 0000000000..a5f8ee8ded --- /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 0000000000..229534b05b --- /dev/null +++ b/ld/testsuite/ld-size/size-9a.c @@ -0,0 +1,13 @@ +#include + +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 0000000000..16890d15fa --- /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 fe4702cf39..24269c5f54 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 -- 2.34.1