From 27d12e195b2811bba95458cff09b5363fcc3d9af Mon Sep 17 00:00:00 2001 From: "H.J. Lu" Date: Wed, 19 Sep 2018 15:28:15 -0700 Subject: [PATCH] ELF: Add testcases for PR ld/23658 Add testcases to verify that all SHT_NOTE sections with the same section alignment are placed in a single PT_NOTE segment. PR ld/23658 * testsuite/ld-elf/pr23658-1.d: New file. * testsuite/ld-elf/pr23658-1a.s: Likewise. * testsuite/ld-elf/pr23658-1b.s: Likewise. * testsuite/ld-elf/pr23658-1c.s: Likewise. * testsuite/ld-elf/pr23658-1d.s: Likewise. * testsuite/ld-elf/pr23658-2.rd: Likewise. * testsuite/ld-elf/pr23658-3.d: Likewise. * testsuite/ld-elf/pr23658-3.s: Likewise. * testsuite/ld-elf/pr23658-3.t: Likewise. * testsuite/ld-elf/shared.exp: Run PR ld/23658 tests. --- ld/testsuite/ld-elf/pr23658-1.d | 16 ++++++++++++++++ ld/testsuite/ld-elf/pr23658-1a.s | 21 +++++++++++++++++++++ ld/testsuite/ld-elf/pr23658-1b.s | 16 ++++++++++++++++ ld/testsuite/ld-elf/pr23658-1c.s | 16 ++++++++++++++++ ld/testsuite/ld-elf/pr23658-1d.s | 16 ++++++++++++++++ ld/testsuite/ld-elf/pr23658-2.rd | 6 ++++++ ld/testsuite/ld-elf/pr23658-3.d | 8 ++++++++ ld/testsuite/ld-elf/pr23658-3.s | 4 ++++ ld/testsuite/ld-elf/pr23658-3.t | 14 ++++++++++++++ ld/testsuite/ld-elf/shared.exp | 21 +++++++++++++++++++++ 10 files changed, 138 insertions(+) create mode 100644 ld/testsuite/ld-elf/pr23658-1.d create mode 100644 ld/testsuite/ld-elf/pr23658-1a.s create mode 100644 ld/testsuite/ld-elf/pr23658-1b.s create mode 100644 ld/testsuite/ld-elf/pr23658-1c.s create mode 100644 ld/testsuite/ld-elf/pr23658-1d.s create mode 100644 ld/testsuite/ld-elf/pr23658-2.rd create mode 100644 ld/testsuite/ld-elf/pr23658-3.d create mode 100644 ld/testsuite/ld-elf/pr23658-3.s create mode 100644 ld/testsuite/ld-elf/pr23658-3.t diff --git a/ld/testsuite/ld-elf/pr23658-1.d b/ld/testsuite/ld-elf/pr23658-1.d new file mode 100644 index 0000000000..252fb872ed --- /dev/null +++ b/ld/testsuite/ld-elf/pr23658-1.d @@ -0,0 +1,16 @@ +#source: pr23658-1a.s +#source: pr23658-1b.s +#source: pr23658-1c.s +#source: pr23658-1d.s +#source: start.s +#ld: --build-id +#readelf: -l --wide +# Since generic linker targets don't place SHT_NOTE sections as orphan, +# SHT_NOTE sections aren't grouped nor sorted. +#xfail: cr16-* crx-* d30v-* dlx-* fr30-* frv-* iq2000-* +#xfail: m68hc12-* mn10200-* moxie-* mt-* msp430-* pj-* + +#... + +[0-9]+ +\.note\.4 \.note\.1 + + +[0-9]+ +\.note.gnu.build-id \.note\.2 .note\.3 + +#pass diff --git a/ld/testsuite/ld-elf/pr23658-1a.s b/ld/testsuite/ld-elf/pr23658-1a.s new file mode 100644 index 0000000000..bc34f868fe --- /dev/null +++ b/ld/testsuite/ld-elf/pr23658-1a.s @@ -0,0 +1,21 @@ + .text + .global foo +foo: + .dc.a 0 + + .section ".note.4", "a" + .p2align 3 + .long .L1 - .L0 /* name length. */ + .long .L3 - .L1 /* data length. */ + .long 123456 /* note type. */ +.L0: + .asciz "GNU" /* vendor name. */ +.L1: + .p2align 3 + .long 0 /* pr_type. */ + .long .L5 - .L4 /* pr_datasz. */ +.L4: + .zero 0x10 +.L5: + .p2align 3 +.L3: diff --git a/ld/testsuite/ld-elf/pr23658-1b.s b/ld/testsuite/ld-elf/pr23658-1b.s new file mode 100644 index 0000000000..3b44b42df7 --- /dev/null +++ b/ld/testsuite/ld-elf/pr23658-1b.s @@ -0,0 +1,16 @@ + .section ".note.2", "a" + .p2align 2 + .long .L1 - .L0 /* name length. */ + .long .L3 - .L1 /* data length. */ + .long 12345 /* note type. */ +.L0: + .asciz "GNU" /* vendor name. */ +.L1: + .p2align 2 + .long 0 /* pr_type. */ + .long .L5 - .L4 /* pr_datasz. */ +.L4: + .zero 0x10 +.L5: + .p2align 2 +.L3: diff --git a/ld/testsuite/ld-elf/pr23658-1c.s b/ld/testsuite/ld-elf/pr23658-1c.s new file mode 100644 index 0000000000..fb218ce311 --- /dev/null +++ b/ld/testsuite/ld-elf/pr23658-1c.s @@ -0,0 +1,16 @@ + .section ".note.1", "a" + .p2align 3 + .long .L1 - .L0 /* name length. */ + .long .L3 - .L1 /* data length. */ + .long 12345 /* note type. */ +.L0: + .asciz "GNU" /* vendor name. */ +.L1: + .p2align 3 + .long 0 /* pr_type. */ + .long .L5 - .L4 /* pr_datasz. */ +.L4: + .zero 0x10 +.L5: + .p2align 3 +.L3: diff --git a/ld/testsuite/ld-elf/pr23658-1d.s b/ld/testsuite/ld-elf/pr23658-1d.s new file mode 100644 index 0000000000..93fe502fb3 --- /dev/null +++ b/ld/testsuite/ld-elf/pr23658-1d.s @@ -0,0 +1,16 @@ + .section ".note.3", "a" + .p2align 2 + .long .L1 - .L0 /* name length. */ + .long .L3 - .L1 /* data length. */ + .long 12345 /* note type. */ +.L0: + .asciz "GNU" /* vendor name. */ +.L1: + .p2align 2 + .long 0 /* pr_type. */ + .long .L5 - .L4 /* pr_datasz. */ +.L4: + .zero 0x10 +.L5: + .p2align 2 +.L3: diff --git a/ld/testsuite/ld-elf/pr23658-2.rd b/ld/testsuite/ld-elf/pr23658-2.rd new file mode 100644 index 0000000000..9f89c4b40a --- /dev/null +++ b/ld/testsuite/ld-elf/pr23658-2.rd @@ -0,0 +1,6 @@ +#... + +[0-9]+ +\.interp \.note.4 \.note.1 \.note.2 \.note.3.* +#... + +[0-9]+ +\.note\.4 \.note\.1 + + +[0-9]+ +\.note\.2 .note\.3 + +#pass diff --git a/ld/testsuite/ld-elf/pr23658-3.d b/ld/testsuite/ld-elf/pr23658-3.d new file mode 100644 index 0000000000..2f018aa1d2 --- /dev/null +++ b/ld/testsuite/ld-elf/pr23658-3.d @@ -0,0 +1,8 @@ +#as: -mx86-used-note=yes +#ld: -T pr23658-3.t -z noseparate-code +#nm: -B +#target: i?86-*-* x86_64-*-* + +#... +0+4000 D __FOO +#... diff --git a/ld/testsuite/ld-elf/pr23658-3.s b/ld/testsuite/ld-elf/pr23658-3.s new file mode 100644 index 0000000000..1d05efd858 --- /dev/null +++ b/ld/testsuite/ld-elf/pr23658-3.s @@ -0,0 +1,4 @@ + .data + .global baz +baz: + .word 0 diff --git a/ld/testsuite/ld-elf/pr23658-3.t b/ld/testsuite/ld-elf/pr23658-3.t new file mode 100644 index 0000000000..ffc3467911 --- /dev/null +++ b/ld/testsuite/ld-elf/pr23658-3.t @@ -0,0 +1,14 @@ +SECTIONS +{ + .data 0x1000 : + { + *(.data) + QUAD (__FOO); + } + + .foo 0x4000 : + { + PROVIDE (__FOO = .); + *(.foo) + } +} diff --git a/ld/testsuite/ld-elf/shared.exp b/ld/testsuite/ld-elf/shared.exp index cdb171d0d1..c894d2196b 100644 --- a/ld/testsuite/ld-elf/shared.exp +++ b/ld/testsuite/ld-elf/shared.exp @@ -49,6 +49,12 @@ if [istarget "sparc*-*-*"] { append AFLAGS_PIC " -K PIC" } +# GAS options to disable program property note. +set AFLAGS_NOTE "" +if { [istarget "i?86-*-*"] || [istarget "x86_64-*-*"] } { + append AFLAGS_NOTE "-mx86-used-note=no" +} + # This target requires a non-default emulation for successful shared # library/executable builds. set LFLAGS "" @@ -1474,3 +1480,18 @@ if { [istarget "i?86-*-*"] ] \ ] } + +run_ld_link_tests [list \ + [list "Build pr23658.so" \ + "-shared" "" "$AFLAGS_PIC" \ + {pr23658-1a.s} {} "pr23658.so"] \ + [list \ + "Build pr23658-2" \ + "--dynamic-linker tmpdir/pr23658.so --no-as-needed tmpdir/pr23658.so" \ + "" \ + $AFLAGS_NOTE \ + { pr23658-1a.s pr23658-1b.s pr23658-1c.s pr23658-1d.s start.s } \ + {{readelf {-lW} pr23658-2.rd}} \ + "pr23658-2" \ + ] \ +] -- 2.17.1