[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