aboutsummaryrefslogtreecommitdiff
path: root/ld
diff options
context:
space:
mode:
authorSudakshina Das <sudi.das@arm.com>2019-03-21 16:20:21 +0000
committerSudakshina Das <sudi.das@arm.com>2019-03-21 16:20:21 +0000
commit4e5391148d51c58785aad637f1a92d47b91b3ae6 (patch)
tree39854d98236b1aa76c3ecc067dd66c430804e4da /ld
parentf84bd4655c17b3ee59b73bd33ec91f75bd58546c (diff)
downloadbinutils-4e5391148d51c58785aad637f1a92d47b91b3ae6.zip
binutils-4e5391148d51c58785aad637f1a92d47b91b3ae6.tar.gz
binutils-4e5391148d51c58785aad637f1a92d47b91b3ae6.tar.bz2
[BFD, AArch64, x86] Improve warning for --force-bti
The AArch64 linker option to turn on BTI (--force-bti) warns in case there are input objects which have a missing GNU NOTE section for BTI. This patch is trying to improve the warnings that come out. In order to do so, I propose adding a new argument to elf_merge_gnu_properties and the backend function merge_gnu_properties. This new argument makes sure that we now pass both the objects along with the properties to which they belong to. The x86 backend function has also been updated to match this change. *** bfd/ChangeLog *** 2019-03-21 Sudakshina Das <sudi.das@arm.com> * elf-bfd.h (struct elf_backend_data): Add argument to merge_gnu_properties. * elf-properties.c (elf_merge_gnu_properties): Add argument to itself and while calling bed->merge_gnu_properties. (elf_merge_gnu_property_list): Update the calls for elf_merge_gnu_properties. * elfnn-aarch64.c (elfNN_aarch64_merge_gnu_properties): Update handling of --force-bti warning and add argument. * elfxx-aarch64.c (_bfd_aarch64_elf_link_setup_gnu_properties): Add warning. * elfxx-x86.c (_bfd_x86_elf_merge_gnu_properties): Add argument. * elfxx-x86.h (_bfd_x86_elf_merge_gnu_properties): Likewise in declaration. *** ld/ChangeLog *** 2019-03-21 Sudakshina Das <sudi.das@arm.com> * testsuite/ld-aarch64/aarch64-elf.exp: Add new test. * testsuite/ld-aarch64/bti-plt-1.s: Add .ifdef for PAC note section. * testsuite/ld-aarch64/bti-plt-6.d: Update warning. * testsuite/ld-aarch64/bti-plt-7.d: Likewise. * testsuite/ld-aarch64/bti-warn.d: New test.
Diffstat (limited to 'ld')
-rw-r--r--ld/ChangeLog8
-rw-r--r--ld/testsuite/ld-aarch64/aarch64-elf.exp2
-rw-r--r--ld/testsuite/ld-aarch64/bti-plt-1.s17
-rw-r--r--ld/testsuite/ld-aarch64/bti-plt-6.d4
-rw-r--r--ld/testsuite/ld-aarch64/bti-plt-7.d5
-rw-r--r--ld/testsuite/ld-aarch64/bti-warn.d16
6 files changed, 48 insertions, 4 deletions
diff --git a/ld/ChangeLog b/ld/ChangeLog
index 6116ca6..2853c09 100644
--- a/ld/ChangeLog
+++ b/ld/ChangeLog
@@ -1,3 +1,11 @@
+2019-03-21 Sudakshina Das <sudi.das@arm.com>
+
+ * testsuite/ld-aarch64/aarch64-elf.exp: Add new test.
+ * testsuite/ld-aarch64/bti-plt-1.s: Add .ifdef for PAC note section.
+ * testsuite/ld-aarch64/bti-plt-6.d: Update warning.
+ * testsuite/ld-aarch64/bti-plt-7.d: Likewise.
+ * testsuite/ld-aarch64/bti-warn.d: New test.
+
2019-03-21 Alan Modra <amodra@gmail.com>
* testsuite/ld-elf/fini2.s: Reduce alignment.
diff --git a/ld/testsuite/ld-aarch64/aarch64-elf.exp b/ld/testsuite/ld-aarch64/aarch64-elf.exp
index 12c2d97..ba3ce36 100644
--- a/ld/testsuite/ld-aarch64/aarch64-elf.exp
+++ b/ld/testsuite/ld-aarch64/aarch64-elf.exp
@@ -407,3 +407,5 @@ run_dump_test "pac-plt-1"
run_dump_test "pac-plt-2"
run_dump_test "bti-pac-plt-1"
run_dump_test "bti-pac-plt-2"
+
+run_dump_test "bti-warn"
diff --git a/ld/testsuite/ld-aarch64/bti-plt-1.s b/ld/testsuite/ld-aarch64/bti-plt-1.s
index b798ca4..8bb39c4 100644
--- a/ld/testsuite/ld-aarch64/bti-plt-1.s
+++ b/ld/testsuite/ld-aarch64/bti-plt-1.s
@@ -21,3 +21,20 @@ _start:
.p2align 3
5:
.endif
+.ifdef __property_pac__
+ .section ".note.gnu.property", "a"
+ .p2align 3
+ .long 1f - 0f /* name length */
+ .long 5f - 2f /* data length */
+ .long 5 /* note type */
+0: .asciz "GNU" /* vendor name */
+1:
+ .p2align 3
+2: .long 0xc0000000 /* pr_type. */
+ .long 4f - 3f /* pr_datasz. */
+3:
+ .long 0x2 /* PAC. */
+4:
+ .p2align 3
+5:
+.endif
diff --git a/ld/testsuite/ld-aarch64/bti-plt-6.d b/ld/testsuite/ld-aarch64/bti-plt-6.d
index c7d5169..30d225d 100644
--- a/ld/testsuite/ld-aarch64/bti-plt-6.d
+++ b/ld/testsuite/ld-aarch64/bti-plt-6.d
@@ -1,9 +1,9 @@
#name: Warn with one missing GNU NOTE BTI input
-#source: property-bti-pac1.s
#source: property-bti-pac2.s
+#source: property-bti-pac1.s
#as: -mabi=lp64 -defsym __property_pac__=1
#ld: -shared --force-bti
-#warning: .*: warning: BTI turned on by --force-bti.*$
+#warning: .*property-bti-pac2.*: warning: BTI turned on by --force-bti.*$
#readelf: -n
# Should warn about the missing input BTI NOTE but should
diff --git a/ld/testsuite/ld-aarch64/bti-plt-7.d b/ld/testsuite/ld-aarch64/bti-plt-7.d
index 625f284..e8fa0d3 100644
--- a/ld/testsuite/ld-aarch64/bti-plt-7.d
+++ b/ld/testsuite/ld-aarch64/bti-plt-7.d
@@ -1,9 +1,10 @@
#name: Warn when neither inputs has GNU NOTE BTI
-#source: property-bti-pac1.s
+#source: property-bti-pac2.s
#source: plt_mapping_symbol.s
#as: -mabi=lp64
#ld: -shared --force-bti
-#warning: .*: warning: BTI turned on by --force-bti.*$
+#warning: .*plt_mapping_symbol.*: warning: BTI turned on by --force-bti.*
+#warning: .*property-bti-pac2.*: warning: BTI turned on by --force-bti.*
#readelf: -n
# Should warn about the missing input BTI NOTE but should
diff --git a/ld/testsuite/ld-aarch64/bti-warn.d b/ld/testsuite/ld-aarch64/bti-warn.d
new file mode 100644
index 0000000..c2edccf
--- /dev/null
+++ b/ld/testsuite/ld-aarch64/bti-warn.d
@@ -0,0 +1,16 @@
+#name: Warn when both have GNU prop but neither BTI
+#source: property-bti-pac2.s
+#source: bti-plt-1.s
+#as: -mabi=lp64 --defsym __guard_property_bti__=1 --defsym __property_pac__=1
+#ld: -shared --force-bti
+#warning: .*property-bti-pac2.*: warning: BTI turned on by --force-bti.*
+#warning: .*bti-plt-1.*: warning: BTI turned on by --force-bti.*
+#readelf: -n
+
+# Should warn about the missing input BTI NOTE but should
+# still mark output as BTI
+
+Displaying notes found in: .note.gnu.property
+ Owner Data size Description
+ GNU 0x00000010 NT_GNU_PROPERTY_TYPE_0
+ Properties: AArch64 feature: BTI, PAC