From d346bb277c7f194ece73a7200d1ed6417b1194e5 Mon Sep 17 00:00:00 2001 From: "H.J. Lu" Date: Thu, 11 Jan 2018 19:17:46 -0800 Subject: [PATCH] ld: Add tests for -z separate-code and -z noseparate-code Verify that -z separate-code works and -z noseparate-code doesn't disable -z relro. PR ld/22393 * testsuite/ld-elf/pr16322.d: Add -z noseparate-code. * testsuite/ld-elf/pr22393-1.s: New file. * testsuite/ld-elf/pr22393-1a.d: Likewise. * testsuite/ld-elf/pr22393-1b.d: Likewise. * testsuite/ld-elf/pr22393-1c.d: Likewise. * testsuite/ld-elf/pr22393-1d.d: Likewise. * testsuite/ld-elf/pr22393-1e.d: Likewise. * testsuite/ld-elf/pr22393-1f.d: Likewise. * testsuite/ld-elf/pr22393-2a.c: Likewise. * testsuite/ld-elf/pr22393-2a.rd: Likewise. * testsuite/ld-elf/pr22393-2b.c: Likewise. * testsuite/ld-elf/pr22393-2b.rd: Likewise. * testsuite/ld-elf/shared.exp: Run tests for -z separate-code. --- ld/ChangeLog | 17 ++++++++++ ld/testsuite/ld-elf/pr16322.d | 2 +- ld/testsuite/ld-elf/pr22393-1.s | 21 ++++++++++++ ld/testsuite/ld-elf/pr22393-1a.d | 9 +++++ ld/testsuite/ld-elf/pr22393-1b.d | 9 +++++ ld/testsuite/ld-elf/pr22393-1c.d | 9 +++++ ld/testsuite/ld-elf/pr22393-1d.d | 9 +++++ ld/testsuite/ld-elf/pr22393-1e.d | 9 +++++ ld/testsuite/ld-elf/pr22393-1f.d | 9 +++++ ld/testsuite/ld-elf/pr22393-2a.c | 7 ++++ ld/testsuite/ld-elf/pr22393-2a.rd | 9 +++++ ld/testsuite/ld-elf/pr22393-2b.c | 7 ++++ ld/testsuite/ld-elf/pr22393-2b.rd | 9 +++++ ld/testsuite/ld-elf/shared.exp | 71 +++++++++++++++++++++++++++++++++++++++ 14 files changed, 196 insertions(+), 1 deletion(-) create mode 100644 ld/testsuite/ld-elf/pr22393-1.s create mode 100644 ld/testsuite/ld-elf/pr22393-1a.d create mode 100644 ld/testsuite/ld-elf/pr22393-1b.d create mode 100644 ld/testsuite/ld-elf/pr22393-1c.d create mode 100644 ld/testsuite/ld-elf/pr22393-1d.d create mode 100644 ld/testsuite/ld-elf/pr22393-1e.d create mode 100644 ld/testsuite/ld-elf/pr22393-1f.d create mode 100644 ld/testsuite/ld-elf/pr22393-2a.c create mode 100644 ld/testsuite/ld-elf/pr22393-2a.rd create mode 100644 ld/testsuite/ld-elf/pr22393-2b.c create mode 100644 ld/testsuite/ld-elf/pr22393-2b.rd diff --git a/ld/ChangeLog b/ld/ChangeLog index 28ce852..5b9e3b9 100644 --- a/ld/ChangeLog +++ b/ld/ChangeLog @@ -1,6 +1,23 @@ 2018-01-11 H.J. Lu PR ld/22393 + * testsuite/ld-elf/pr16322.d: Add -z noseparate-code. + * testsuite/ld-elf/pr22393-1.s: New file. + * testsuite/ld-elf/pr22393-1a.d: Likewise. + * testsuite/ld-elf/pr22393-1b.d: Likewise. + * testsuite/ld-elf/pr22393-1c.d: Likewise. + * testsuite/ld-elf/pr22393-1d.d: Likewise. + * testsuite/ld-elf/pr22393-1e.d: Likewise. + * testsuite/ld-elf/pr22393-1f.d: Likewise. + * testsuite/ld-elf/pr22393-2a.c: Likewise. + * testsuite/ld-elf/pr22393-2a.rd: Likewise. + * testsuite/ld-elf/pr22393-2b.c: Likewise. + * testsuite/ld-elf/pr22393-2b.rd: Likewise. + * testsuite/ld-elf/shared.exp: Run tests for -z separate-code. + +2018-01-11 H.J. Lu + + PR ld/22393 * NEWS: Mention "-z separate-code". * emultempl/elf32.em (gld${EMULATION_NAME}_get_script): Get builtin linker scripts and return linker scripts from disk for diff --git a/ld/testsuite/ld-elf/pr16322.d b/ld/testsuite/ld-elf/pr16322.d index 40a7975..348927b 100644 --- a/ld/testsuite/ld-elf/pr16322.d +++ b/ld/testsuite/ld-elf/pr16322.d @@ -1,4 +1,4 @@ -#ld: -shared -z relro +#ld: -shared -z relro -z noseparate-code #readelf: -l --wide #target: *-*-linux-gnu *-*-gnu* *-*-nacl* diff --git a/ld/testsuite/ld-elf/pr22393-1.s b/ld/testsuite/ld-elf/pr22393-1.s new file mode 100644 index 0000000..ffdb620 --- /dev/null +++ b/ld/testsuite/ld-elf/pr22393-1.s @@ -0,0 +1,21 @@ + .section .rodata,"a",%progbits + .globl fx1 + .type fx1, %object +fx1: + .zero 20 + .section .data.rel.ro,"aw",%progbits + .globl px1 + .type px1, %object +px1: + .dc.a fx1 + + .text + .global start /* Used by SH targets. */ +start: + .global _start +_start: + .global __start +__start: + .global main /* Used by HPPA targets. */ +main: + .dc.a 0 diff --git a/ld/testsuite/ld-elf/pr22393-1a.d b/ld/testsuite/ld-elf/pr22393-1a.d new file mode 100644 index 0000000..f8dc0cc --- /dev/null +++ b/ld/testsuite/ld-elf/pr22393-1a.d @@ -0,0 +1,9 @@ +#source: pr22393-1.s +#ld: -shared -z separate-code -z relro +#readelf: -l --wide +#target: *-*-linux-gnu *-*-gnu* *-*-nacl* + +#failif +#... + +[0-9]+ +.*(\.note|\.gnu|\.hash|\.dyn|\.rel).*\.text.* +#... diff --git a/ld/testsuite/ld-elf/pr22393-1b.d b/ld/testsuite/ld-elf/pr22393-1b.d new file mode 100644 index 0000000..089d779 --- /dev/null +++ b/ld/testsuite/ld-elf/pr22393-1b.d @@ -0,0 +1,9 @@ +#source: pr22393-1.s +#ld: -shared -z relro -z separate-code +#readelf: -l --wide +#target: *-*-linux-gnu *-*-gnu* *-*-nacl* + +#failif +#... + +[0-9]+ +.*.text.*(.eh_frame|\.rodata).* +#... diff --git a/ld/testsuite/ld-elf/pr22393-1c.d b/ld/testsuite/ld-elf/pr22393-1c.d new file mode 100644 index 0000000..3476be3 --- /dev/null +++ b/ld/testsuite/ld-elf/pr22393-1c.d @@ -0,0 +1,9 @@ +#source: pr22393-1.s +#ld: -pie -z separate-code +#readelf: -l --wide +#target: *-*-linux-gnu *-*-gnu* *-*-nacl* + +#failif +#... + +[0-9]+ +.*(\.note|\.gnu|\.hash|\.dyn|\.rel).*\.text.* +#... diff --git a/ld/testsuite/ld-elf/pr22393-1d.d b/ld/testsuite/ld-elf/pr22393-1d.d new file mode 100644 index 0000000..c0d1051 --- /dev/null +++ b/ld/testsuite/ld-elf/pr22393-1d.d @@ -0,0 +1,9 @@ +#source: pr22393-1.s +#ld: -pie -z separate-code +#readelf: -l --wide +#target: *-*-linux-gnu *-*-gnu* *-*-nacl* + +#failif +#... + +[0-9]+ +.*.text.*(.eh_frame|\.rodata).* +#... diff --git a/ld/testsuite/ld-elf/pr22393-1e.d b/ld/testsuite/ld-elf/pr22393-1e.d new file mode 100644 index 0000000..673d3f7 --- /dev/null +++ b/ld/testsuite/ld-elf/pr22393-1e.d @@ -0,0 +1,9 @@ +#source: pr22393-1.s +#ld: -z separate-code +#readelf: -l --wide +#target: *-*-linux-gnu *-*-gnu* *-*-nacl* + +#failif +#... + +[0-9]+ +.*(\.note|\.gnu|\.hash|\.dyn|\.rel).*\.text.* +#... diff --git a/ld/testsuite/ld-elf/pr22393-1f.d b/ld/testsuite/ld-elf/pr22393-1f.d new file mode 100644 index 0000000..4c5de43 --- /dev/null +++ b/ld/testsuite/ld-elf/pr22393-1f.d @@ -0,0 +1,9 @@ +#source: pr22393-1.s +#ld: -z separate-code +#readelf: -l --wide +#target: *-*-linux-gnu *-*-gnu* *-*-nacl* + +#failif +#... + +[0-9]+ +.*.text.*(.eh_frame|\.rodata).* +#... diff --git a/ld/testsuite/ld-elf/pr22393-2a.c b/ld/testsuite/ld-elf/pr22393-2a.c new file mode 100644 index 0000000..68fa4a0 --- /dev/null +++ b/ld/testsuite/ld-elf/pr22393-2a.c @@ -0,0 +1,7 @@ +#include + +void +test() +{ + printf ("PASS\n"); +} diff --git a/ld/testsuite/ld-elf/pr22393-2a.rd b/ld/testsuite/ld-elf/pr22393-2a.rd new file mode 100644 index 0000000..b7ba110 --- /dev/null +++ b/ld/testsuite/ld-elf/pr22393-2a.rd @@ -0,0 +1,9 @@ +#source: pr22393-1.s +#ld: -shared -z textonly +#readelf: -l --wide +#target: *-*-linux-gnu *-*-gnu* *-*-nacl* + +#failif +#... + +[0-9]+ +.*(\.note|\.gnu|\.hash|\.dyn|\.rel).*\.text.* +#... diff --git a/ld/testsuite/ld-elf/pr22393-2b.c b/ld/testsuite/ld-elf/pr22393-2b.c new file mode 100644 index 0000000..3033809 --- /dev/null +++ b/ld/testsuite/ld-elf/pr22393-2b.c @@ -0,0 +1,7 @@ +void test(void); + +int main() +{ + test(); + return 0; +} diff --git a/ld/testsuite/ld-elf/pr22393-2b.rd b/ld/testsuite/ld-elf/pr22393-2b.rd new file mode 100644 index 0000000..b7ba110 --- /dev/null +++ b/ld/testsuite/ld-elf/pr22393-2b.rd @@ -0,0 +1,9 @@ +#source: pr22393-1.s +#ld: -shared -z textonly +#readelf: -l --wide +#target: *-*-linux-gnu *-*-gnu* *-*-nacl* + +#failif +#... + +[0-9]+ +.*(\.note|\.gnu|\.hash|\.dyn|\.rel).*\.text.* +#... diff --git a/ld/testsuite/ld-elf/shared.exp b/ld/testsuite/ld-elf/shared.exp index 95bac37..1247fd2 100644 --- a/ld/testsuite/ld-elf/shared.exp +++ b/ld/testsuite/ld-elf/shared.exp @@ -864,6 +864,51 @@ if { [istarget *-*-linux*] {} \ "libpr19579.so" \ ] \ + [list \ + "Build pr22393-2a.so" \ + "-shared -Wl,-z,separate-code" \ + "-fPIC" \ + {pr22393-2a.c} \ + {{readelf -lW pr22393-2a.rd} \ + {readelf -lW pr22393-2b.rd}} \ + "pr22393-2a.so" \ + ] \ + [list \ + "Build pr22393-2a-now.so" \ + "-shared -Wl,-z,separate-code,-z,now" \ + "-fPIC" \ + {pr22393-2a.c} \ + {{readelf -lW pr22393-2a.rd} \ + {readelf -lW pr22393-2b.rd}} \ + "pr22393-2a-now.so" \ + ] \ + [list \ + "Build pr22393-2" \ + "$NOPIE_LDFLAGS -Wl,-z,separate-code,--no-as-needed tmpdir/pr22393-2a.so" \ + "$NOPIE_CFLAGS" \ + {pr22393-2b.c} \ + {{readelf -lW pr22393-2a.rd} \ + {readelf -lW pr22393-2b.rd}} \ + "pr22393-2" \ + ] \ + [list \ + "Build pr22393-2 (PIE)" \ + "-pie -Wl,-z,separate-code,--no-as-needed tmpdir/pr22393-2a-now.so" \ + "-fPIE" \ + {pr22393-2b.c} \ + {{readelf -lW pr22393-2a.rd} \ + {readelf -lW pr22393-2b.rd}} \ + "pr22393-2-pie" \ + ] \ + [list \ + "Build pr22393-2 (static)" \ + "-static -Wl,-z,separate-code" \ + "" \ + {pr22393-2a.c pr22393-2b.c} \ + {{readelf -lW pr22393-2a.rd} \ + {readelf -lW pr22393-2b.rd}} \ + "pr22393-2-static" \ + ] \ ] run_ld_link_exec_tests [list \ [list \ @@ -1001,6 +1046,32 @@ if { [istarget *-*-linux*] "pass.out" \ "-fPIE" \ ] \ + [list \ + "Run pr22393-2" \ + "$NOPIE_LDFLAGS -Wl,-z,separate-code,--no-as-needed tmpdir/pr22393-2a.so" \ + "" \ + {pr22393-2b.c} \ + "pr22393-2" \ + "pass.out" \ + "$NOPIE_CFLAGS" \ + ] \ + [list \ + "Run pr22393-2 (PIE)" \ + "-pie -Wl,-z,separate-code,--no-as-needed tmpdir/pr22393-2a-now.so" \ + "" \ + {pr22393-2b.c} \ + "pr22393-2-pie" \ + "pass.out" \ + "-fPIE" \ + ] \ + [list \ + "Run pr22393-2 (static)" \ + "-static -Wl,-z,separate-code" \ + "" \ + {pr22393-2a.c pr22393-2b.c} \ + "pr22393-2-static" \ + "pass.out" \ + ] \ ] } -- 2.7.4