[binutils-gdb] aarch64: GCS tests for linking issues with dynamic objects
Matthieu Longo
mlongo@sourceware.org
Wed Jan 15 17:16:04 GMT 2025
https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=1c136b8ee9b9fb402b66957bd51e89e47b94a0f6
commit 1c136b8ee9b9fb402b66957bd51e89e47b94a0f6
Author: Matthieu Longo <matthieu.longo@arm.com>
Date: Tue Nov 5 12:58:51 2024 +0000
aarch64: GCS tests for linking issues with dynamic objects
Diff:
---
.../ld-aarch64/protections/aarch64-protections.exp | 15 ++++++++++++
.../ld-aarch64/protections/gcs-dynamic-1-a.d | 12 ++++++++++
.../ld-aarch64/protections/gcs-dynamic-1-b.d | 12 ++++++++++
.../ld-aarch64/protections/gcs-dynamic-2-a-i.d | 15 ++++++++++++
.../ld-aarch64/protections/gcs-dynamic-2-a-ii.d | 8 +++++++
.../ld-aarch64/protections/gcs-dynamic-2-a-iii.d | 15 ++++++++++++
.../ld-aarch64/protections/gcs-dynamic-2-a-iv.d | 12 ++++++++++
.../ld-aarch64/protections/gcs-dynamic-2-b.d | 14 +++++++++++
.../ld-aarch64/protections/gcs-dynamic-2-c.d | 12 ++++++++++
.../ld-aarch64/protections/gcs-dynamic-2-d.d | 14 +++++++++++
.../ld-aarch64/protections/gcs-dynamic-3-a.d | 15 ++++++++++++
.../ld-aarch64/protections/gcs-dynamic-3-b.d | 14 +++++++++++
.../ld-aarch64/protections/gcs-dynamic-3-c.d | 12 ++++++++++
.../ld-aarch64/protections/gcs-dynamic-4-a.d | 7 ++++++
.../ld-aarch64/protections/gcs-dynamic-4-b.d | 7 ++++++
.../ld-aarch64/protections/gcs-dynamic-4-c.d | 7 ++++++
ld/testsuite/ld-aarch64/protections/gcs-so.s | 28 ++++++++++++++++++++++
ld/testsuite/ld-aarch64/protections/gcs-so2.s | 28 ++++++++++++++++++++++
18 files changed, 247 insertions(+)
diff --git a/ld/testsuite/ld-aarch64/protections/aarch64-protections.exp b/ld/testsuite/ld-aarch64/protections/aarch64-protections.exp
index b49428d1039..cf0f03daee6 100644
--- a/ld/testsuite/ld-aarch64/protections/aarch64-protections.exp
+++ b/ld/testsuite/ld-aarch64/protections/aarch64-protections.exp
@@ -42,6 +42,21 @@ set aarch64elflinktests {
"-shared" ""
"-I$srcdir/$subdir -defsym __property_bti__=1"
{bti-plt-so.s} {} "libbti-plt-so.so"}
+
+ {"Build gcs-so for GCS tests"
+ "-shared" ""
+ "-I$srcdir/$subdir -defsym __property_gcs__=1"
+ {gcs-so.s} {} "libgcs-so.so"}
+
+ {"Build nogcs-so for GCS tests"
+ "-shared" ""
+ "-I$srcdir/$subdir"
+ {gcs-so.s} {} "libnogcs-so.so"}
+
+ {"Build gcs-so2 for GCS tests"
+ "-shared" ""
+ "-I$srcdir/$subdir -defsym __property_gcs__=1"
+ {gcs-so2.s} {} "libgcs-so2.so"}
}
if [check_shared_lib_support] {
diff --git a/ld/testsuite/ld-aarch64/protections/gcs-dynamic-1-a.d b/ld/testsuite/ld-aarch64/protections/gcs-dynamic-1-a.d
new file mode 100644
index 00000000000..be8a301f6c0
--- /dev/null
+++ b/ld/testsuite/ld-aarch64/protections/gcs-dynamic-1-a.d
@@ -0,0 +1,12 @@
+#name: '-z gcs=always -z gcs-report=error' and shared library with GCS feature reports no error.
+#source: gcs.s
+#source: gcs2.s
+#alltargets: [check_shared_lib_support] *linux*
+#as: -march=armv9.4-a+gcs -defsym __property_gcs__=1
+#ld: -z gcs=always -z gcs-report=error -L./tmpdir -lgcs-so
+#readelf: -n
+
+Displaying notes found in: .note.gnu.property
+[ ]+Owner[ ]+Data size[ ]+Description
+ GNU 0x00000010 NT_GNU_PROPERTY_TYPE_0
+ Properties: AArch64 feature: GCS
diff --git a/ld/testsuite/ld-aarch64/protections/gcs-dynamic-1-b.d b/ld/testsuite/ld-aarch64/protections/gcs-dynamic-1-b.d
new file mode 100644
index 00000000000..d53d45ae598
--- /dev/null
+++ b/ld/testsuite/ld-aarch64/protections/gcs-dynamic-1-b.d
@@ -0,0 +1,12 @@
+#name: '-z gcs=always -z gcs-report=error -z gcs-report-dynamic=error' and shared library with GCS feature reports no error.
+#source: gcs.s
+#source: gcs2.s
+#alltargets: [check_shared_lib_support] *linux*
+#as: -march=armv9.4-a+gcs -defsym __property_gcs__=1
+#ld: -z gcs=always -z gcs-report=error -z gcs-report-dynamic=error -L./tmpdir -lgcs-so
+#readelf: -n
+
+Displaying notes found in: .note.gnu.property
+[ ]+Owner[ ]+Data size[ ]+Description
+ GNU 0x00000010 NT_GNU_PROPERTY_TYPE_0
+ Properties: AArch64 feature: GCS
diff --git a/ld/testsuite/ld-aarch64/protections/gcs-dynamic-2-a-i.d b/ld/testsuite/ld-aarch64/protections/gcs-dynamic-2-a-i.d
new file mode 100644
index 00000000000..903d14099be
--- /dev/null
+++ b/ld/testsuite/ld-aarch64/protections/gcs-dynamic-2-a-i.d
@@ -0,0 +1,15 @@
+#name: '-z gcs=always -z gcs-report=error' and shared libraries without GCS feature reports warnings.
+#source: gcs.s
+#source: gcs2.s
+#alltargets: [check_shared_lib_support] *linux*
+#as: -march=armv9.4-a+gcs -defsym __property_gcs__=1
+#ld: -z gcs=always -z gcs-report=error -L./tmpdir -lnogcs-so -lbti-plt-so -lgcs-so2
+#warning: \A[^\n]*libnogcs-so\.so: warning: GCS is required by -z gcs[^\n]*\n
+#warning: [^\n]*libbti-plt-so\.so: warning: GCS is required by -z gcs[^\n]*
+
+#readelf: -n
+
+Displaying notes found in: .note.gnu.property
+[ ]+Owner[ ]+Data size[ ]+Description
+ GNU 0x00000010 NT_GNU_PROPERTY_TYPE_0
+ Properties: AArch64 feature: GCS
diff --git a/ld/testsuite/ld-aarch64/protections/gcs-dynamic-2-a-ii.d b/ld/testsuite/ld-aarch64/protections/gcs-dynamic-2-a-ii.d
new file mode 100644
index 00000000000..7adb481bc30
--- /dev/null
+++ b/ld/testsuite/ld-aarch64/protections/gcs-dynamic-2-a-ii.d
@@ -0,0 +1,8 @@
+#name: '-z gcs=always -z gcs-report=error -z gcs-report-dynamic=error' and shared libraries without GCS feature reports errors.
+#source: gcs.s
+#source: gcs2.s
+#alltargets: [check_shared_lib_support] *linux*
+#as: -march=armv9.4-a+gcs -defsym __property_gcs__=1
+#ld: -z gcs=always -z gcs-report=error -z gcs-report-dynamic=error -L./tmpdir -lnogcs-so -lbti-plt-so -lgcs-so2
+#error: \A[^\n]*libnogcs-so\.so: error: GCS is required by -z gcs[^\n]*\n
+#error: [^\n]*libbti-plt-so\.so: error: GCS is required by -z gcs[^\n]*
\ No newline at end of file
diff --git a/ld/testsuite/ld-aarch64/protections/gcs-dynamic-2-a-iii.d b/ld/testsuite/ld-aarch64/protections/gcs-dynamic-2-a-iii.d
new file mode 100644
index 00000000000..76a7c461347
--- /dev/null
+++ b/ld/testsuite/ld-aarch64/protections/gcs-dynamic-2-a-iii.d
@@ -0,0 +1,15 @@
+#name: '-z gcs=always -z gcs-report=error -z gcs-report-dynamic=warning' and shared libraries without GCS feature reports warnings.
+#source: gcs.s
+#source: gcs2.s
+#alltargets: [check_shared_lib_support] *linux*
+#as: -march=armv9.4-a+gcs -defsym __property_gcs__=1
+#ld: -z gcs=always -z gcs-report=error -z gcs-report-dynamic=warning -L./tmpdir -lnogcs-so -lbti-plt-so -lgcs-so2
+#warning: \A[^\n]*libnogcs-so\.so: warning: GCS is required by -z gcs[^\n]*\n
+#warning: [^\n]*libbti-plt-so\.so: warning: GCS is required by -z gcs[^\n]*
+
+#readelf: -n
+
+Displaying notes found in: .note.gnu.property
+[ ]+Owner[ ]+Data size[ ]+Description
+ GNU 0x00000010 NT_GNU_PROPERTY_TYPE_0
+ Properties: AArch64 feature: GCS
\ No newline at end of file
diff --git a/ld/testsuite/ld-aarch64/protections/gcs-dynamic-2-a-iv.d b/ld/testsuite/ld-aarch64/protections/gcs-dynamic-2-a-iv.d
new file mode 100644
index 00000000000..554ca1186ef
--- /dev/null
+++ b/ld/testsuite/ld-aarch64/protections/gcs-dynamic-2-a-iv.d
@@ -0,0 +1,12 @@
+#name: '-z gcs=always -z gcs-report=error -z gcs-report-dynamic=none' and shared libraries without GCS feature reports nothing.
+#source: gcs.s
+#source: gcs2.s
+#alltargets: [check_shared_lib_support] *linux*
+#as: -march=armv9.4-a+gcs -defsym __property_gcs__=1
+#ld: -z gcs=always -z gcs-report=error -z gcs-report-dynamic=none -L./tmpdir -lnogcs-so -lbti-plt-so -lgcs-so2
+#readelf: -n
+
+Displaying notes found in: .note.gnu.property
+[ ]+Owner[ ]+Data size[ ]+Description
+ GNU 0x00000010 NT_GNU_PROPERTY_TYPE_0
+ Properties: AArch64 feature: GCS
\ No newline at end of file
diff --git a/ld/testsuite/ld-aarch64/protections/gcs-dynamic-2-b.d b/ld/testsuite/ld-aarch64/protections/gcs-dynamic-2-b.d
new file mode 100644
index 00000000000..36262bbc087
--- /dev/null
+++ b/ld/testsuite/ld-aarch64/protections/gcs-dynamic-2-b.d
@@ -0,0 +1,14 @@
+#name: '-z gcs=always -z gcs-report=warning' and shared libraries without GCS feature reports warnings.
+#source: gcs.s
+#source: gcs2.s
+#alltargets: [check_shared_lib_support] *linux*
+#as: -march=armv9.4-a+gcs -defsym __property_gcs__=1
+#ld: -z gcs=always -z gcs-report=warning -L./tmpdir -lnogcs-so -lbti-plt-so -lgcs-so2
+#warning: \A[^\n]*libnogcs-so\.so: warning: GCS is required by -z gcs[^\n]*\n
+#warning: [^\n]*libbti-plt-so\.so: warning: GCS is required by -z gcs[^\n]*
+#readelf: -n
+
+Displaying notes found in: .note.gnu.property
+[ ]+Owner[ ]+Data size[ ]+Description
+ GNU 0x00000010 NT_GNU_PROPERTY_TYPE_0
+ Properties: AArch64 feature: GCS
diff --git a/ld/testsuite/ld-aarch64/protections/gcs-dynamic-2-c.d b/ld/testsuite/ld-aarch64/protections/gcs-dynamic-2-c.d
new file mode 100644
index 00000000000..6c7f5da8be7
--- /dev/null
+++ b/ld/testsuite/ld-aarch64/protections/gcs-dynamic-2-c.d
@@ -0,0 +1,12 @@
+#name: '-z gcs=always -z gcs-report=none' and shared libraries without GCS feature reports nothing.
+#source: gcs.s
+#source: gcs2.s
+#alltargets: [check_shared_lib_support] *linux*
+#as: -march=armv9.4-a+gcs -defsym __property_gcs__=1
+#ld: -z gcs=always -z gcs-report=none -L./tmpdir -lnogcs-so -lbti-plt-so -lgcs-so2
+#readelf: -n
+
+Displaying notes found in: .note.gnu.property
+[ ]+Owner[ ]+Data size[ ]+Description
+ GNU 0x00000010 NT_GNU_PROPERTY_TYPE_0
+ Properties: AArch64 feature: GCS
diff --git a/ld/testsuite/ld-aarch64/protections/gcs-dynamic-2-d.d b/ld/testsuite/ld-aarch64/protections/gcs-dynamic-2-d.d
new file mode 100644
index 00000000000..58498e6c00b
--- /dev/null
+++ b/ld/testsuite/ld-aarch64/protections/gcs-dynamic-2-d.d
@@ -0,0 +1,14 @@
+#name: '-z gcs=always -z gcs-report' and shared libraries without GCS feature reports warnings.
+#source: gcs.s
+#source: gcs2.s
+#alltargets: [check_shared_lib_support] *linux*
+#as: -march=armv9.4-a+gcs -defsym __property_gcs__=1
+#ld: -z gcs=always -z gcs-report -L./tmpdir -lnogcs-so -lbti-plt-so -lgcs-so2
+#warning: \A[^\n]*libnogcs-so\.so: warning: GCS is required by -z gcs[^\n]*\n
+#warning: [^\n]*libbti-plt-so\.so: warning: GCS is required by -z gcs[^\n]*
+#readelf: -n
+
+Displaying notes found in: .note.gnu.property
+[ ]+Owner[ ]+Data size[ ]+Description
+ GNU 0x00000010 NT_GNU_PROPERTY_TYPE_0
+ Properties: AArch64 feature: GCS
diff --git a/ld/testsuite/ld-aarch64/protections/gcs-dynamic-3-a.d b/ld/testsuite/ld-aarch64/protections/gcs-dynamic-3-a.d
new file mode 100644
index 00000000000..ecdaf526779
--- /dev/null
+++ b/ld/testsuite/ld-aarch64/protections/gcs-dynamic-3-a.d
@@ -0,0 +1,15 @@
+#name: '-z gcs=implicit -z gcs-report=error' and shared libraries without GCS feature reports warnings.
+#source: gcs.s
+#source: gcs2.s
+#alltargets: [check_shared_lib_support] *linux*
+#as: -march=armv9.4-a+gcs -defsym __property_gcs__=1
+#ld: -z gcs=implicit -z gcs-report=error -L./tmpdir -lnogcs-so -lbti-plt-so -lgcs-so2
+#warning: \A[^\n]*libnogcs-so\.so: warning: GCS is required by -z gcs[^\n]*\n
+#warning: [^\n]*libbti-plt-so\.so: warning: GCS is required by -z gcs[^\n]*
+
+#readelf: -n
+
+Displaying notes found in: .note.gnu.property
+[ ]+Owner[ ]+Data size[ ]+Description
+ GNU 0x00000010 NT_GNU_PROPERTY_TYPE_0
+ Properties: AArch64 feature: GCS
diff --git a/ld/testsuite/ld-aarch64/protections/gcs-dynamic-3-b.d b/ld/testsuite/ld-aarch64/protections/gcs-dynamic-3-b.d
new file mode 100644
index 00000000000..4d32fb6aa54
--- /dev/null
+++ b/ld/testsuite/ld-aarch64/protections/gcs-dynamic-3-b.d
@@ -0,0 +1,14 @@
+#name: '-z gcs=implicit -z gcs-report=warning' and shared libraries without GCS feature reports warnings.
+#source: gcs.s
+#source: gcs2.s
+#alltargets: [check_shared_lib_support] *linux*
+#as: -march=armv9.4-a+gcs -defsym __property_gcs__=1
+#ld: -z gcs=implicit -z gcs-report=warning -L./tmpdir -lnogcs-so -lbti-plt-so -lgcs-so2
+#warning: \A[^\n]*libnogcs-so\.so: warning: GCS is required by -z gcs[^\n]*\n
+#warning: [^\n]*libbti-plt-so\.so: warning: GCS is required by -z gcs[^\n]*
+#readelf: -n
+
+Displaying notes found in: .note.gnu.property
+[ ]+Owner[ ]+Data size[ ]+Description
+ GNU 0x00000010 NT_GNU_PROPERTY_TYPE_0
+ Properties: AArch64 feature: GCS
\ No newline at end of file
diff --git a/ld/testsuite/ld-aarch64/protections/gcs-dynamic-3-c.d b/ld/testsuite/ld-aarch64/protections/gcs-dynamic-3-c.d
new file mode 100644
index 00000000000..c0da6c1d9c6
--- /dev/null
+++ b/ld/testsuite/ld-aarch64/protections/gcs-dynamic-3-c.d
@@ -0,0 +1,12 @@
+#name: '-z gcs=implicit -z gcs-report=none' and shared libraries without GCS feature reports no warning.
+#source: gcs.s
+#source: gcs2.s
+#alltargets: [check_shared_lib_support] *linux*
+#as: -march=armv9.4-a+gcs -defsym __property_gcs__=1
+#ld: -z gcs=implicit -z gcs-report=none -L./tmpdir -lnogcs-so -lbti-plt-so -lgcs-so2
+#readelf: -n
+
+Displaying notes found in: .note.gnu.property
+[ ]+Owner[ ]+Data size[ ]+Description
+ GNU 0x00000010 NT_GNU_PROPERTY_TYPE_0
+ Properties: AArch64 feature: GCS
\ No newline at end of file
diff --git a/ld/testsuite/ld-aarch64/protections/gcs-dynamic-4-a.d b/ld/testsuite/ld-aarch64/protections/gcs-dynamic-4-a.d
new file mode 100644
index 00000000000..ae324bbba1e
--- /dev/null
+++ b/ld/testsuite/ld-aarch64/protections/gcs-dynamic-4-a.d
@@ -0,0 +1,7 @@
+#name: '-z gcs=never -z gcs-report=error' and shared libraries without GCS feature reports no warning/error.
+#source: gcs.s
+#source: gcs2.s
+#alltargets: [check_shared_lib_support] *linux*
+#as: -march=armv9.4-a+gcs -defsym __property_gcs__=1
+#ld: -z gcs=never -z gcs-report=error -L./tmpdir -lnogcs-so -lbti-plt-so -lgcs-so2
+#readelf: -n
diff --git a/ld/testsuite/ld-aarch64/protections/gcs-dynamic-4-b.d b/ld/testsuite/ld-aarch64/protections/gcs-dynamic-4-b.d
new file mode 100644
index 00000000000..6b65898b924
--- /dev/null
+++ b/ld/testsuite/ld-aarch64/protections/gcs-dynamic-4-b.d
@@ -0,0 +1,7 @@
+#name: '-z gcs=never -z gcs-report=warning' and shared libraries without GCS feature reports no warning/error.
+#source: gcs.s
+#source: gcs2.s
+#alltargets: [check_shared_lib_support] *linux*
+#as: -march=armv9.4-a+gcs -defsym __property_gcs__=1
+#ld: -z gcs=never -z gcs-report=warning -L./tmpdir -lnogcs-so -lbti-plt-so -lgcs-so2
+#readelf: -n
diff --git a/ld/testsuite/ld-aarch64/protections/gcs-dynamic-4-c.d b/ld/testsuite/ld-aarch64/protections/gcs-dynamic-4-c.d
new file mode 100644
index 00000000000..35b011f6a8e
--- /dev/null
+++ b/ld/testsuite/ld-aarch64/protections/gcs-dynamic-4-c.d
@@ -0,0 +1,7 @@
+#name: '-z gcs=never -z gcs-report=none' and shared libraries without GCS feature reports no warning/error.
+#source: gcs.s
+#source: gcs2.s
+#alltargets: [check_shared_lib_support] *linux*
+#as: -march=armv9.4-a+gcs -defsym __property_gcs__=1
+#ld: -z gcs=never -z gcs-report=none -L./tmpdir -lnogcs-so -lbti-plt-so -lgcs-so2
+#readelf: -n
diff --git a/ld/testsuite/ld-aarch64/protections/gcs-so.s b/ld/testsuite/ld-aarch64/protections/gcs-so.s
new file mode 100644
index 00000000000..aa6485b9dde
--- /dev/null
+++ b/ld/testsuite/ld-aarch64/protections/gcs-so.s
@@ -0,0 +1,28 @@
+ .global foo2
+ .type foo2, %function
+foo2:
+ sub sp, sp, #16
+ mov w0, 9
+ str w0, [sp, 12]
+ ldr w0, [sp, 12]
+ add w0, w0, 4
+ str w0, [sp, 12]
+ nop
+ add sp, sp, 16
+ ret
+ .size foo2, .-foo2
+ .global bar2
+ .type bar2, %function
+bar2:
+ sub sp, sp, #16
+ mov w0, 9
+ str w0, [sp, 12]
+ ldr w0, [sp, 12]
+ add w0, w0, 4
+ str w0, [sp, 12]
+ nop
+ add sp, sp, 16
+ ret
+ .size bar2, .-bar2
+
+.include "gnu-note-properties-selectable-merged.inc"
diff --git a/ld/testsuite/ld-aarch64/protections/gcs-so2.s b/ld/testsuite/ld-aarch64/protections/gcs-so2.s
new file mode 100644
index 00000000000..938ba43c69c
--- /dev/null
+++ b/ld/testsuite/ld-aarch64/protections/gcs-so2.s
@@ -0,0 +1,28 @@
+ .global foo3
+ .type foo3, %function
+foo3:
+ sub sp, sp, #16
+ mov w0, 9
+ str w0, [sp, 12]
+ ldr w0, [sp, 12]
+ add w0, w0, 4
+ str w0, [sp, 12]
+ nop
+ add sp, sp, 16
+ ret
+ .size foo3, .-foo3
+ .global bar3
+ .type bar3, %function
+bar3:
+ sub sp, sp, #16
+ mov w0, 9
+ str w0, [sp, 12]
+ ldr w0, [sp, 12]
+ add w0, w0, 4
+ str w0, [sp, 12]
+ nop
+ add sp, sp, 16
+ ret
+ .size bar3, .-bar3
+
+.include "gnu-note-properties-selectable-merged.inc"
More information about the Binutils-cvs
mailing list