H.J. Lu
2018-10-01 18:54:36 UTC
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 | 15 +++++++++++++++
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, 137 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..5f8794e7c3
--- /dev/null
+++ b/ld/testsuite/ld-elf/pr23658-1.d
@@ -0,0 +1,15 @@
+#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
+# These targets don't support --build-id properly.
+#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" \
+ ] \
+]
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 | 15 +++++++++++++++
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, 137 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..5f8794e7c3
--- /dev/null
+++ b/ld/testsuite/ld-elf/pr23658-1.d
@@ -0,0 +1,15 @@
+#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
+# These targets don't support --build-id properly.
+#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
2.17.1