From 4e5391148d51c58785aad637f1a92d47b91b3ae6 Mon Sep 17 00:00:00 2001 From: Sudakshina Das Date: Thu, 21 Mar 2019 16:20:21 +0000 Subject: [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 * 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 * 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. --- bfd/elfnn-aarch64.c | 25 +++++++++++++++++-------- 1 file changed, 17 insertions(+), 8 deletions(-) (limited to 'bfd/elfnn-aarch64.c') diff --git a/bfd/elfnn-aarch64.c b/bfd/elfnn-aarch64.c index 50541f0..57a723d 100644 --- a/bfd/elfnn-aarch64.c +++ b/bfd/elfnn-aarch64.c @@ -9968,7 +9968,7 @@ elfNN_aarch64_link_setup_gnu_properties (struct bfd_link_info *info) for the effect of GNU properties of the output_bfd. */ static bfd_boolean elfNN_aarch64_merge_gnu_properties (struct bfd_link_info *info, - bfd *abfd, + bfd *abfd, bfd *bbfd, elf_property *aprop, elf_property *bprop) { @@ -9977,17 +9977,26 @@ elfNN_aarch64_merge_gnu_properties (struct bfd_link_info *info, /* If output has been marked with BTI using command line argument, give out warning if necessary. */ - if ((prop & GNU_PROPERTY_AARCH64_FEATURE_1_BTI) + /* Properties are merged per type, hence only check for warnings when merging + GNU_PROPERTY_AARCH64_FEATURE_1_AND. */ + if (((aprop && aprop->pr_type == GNU_PROPERTY_AARCH64_FEATURE_1_AND) + || (bprop && bprop->pr_type == GNU_PROPERTY_AARCH64_FEATURE_1_AND)) + && (prop & GNU_PROPERTY_AARCH64_FEATURE_1_BTI) && (!elf_aarch64_tdata (info->output_bfd)->no_bti_warn)) { if ((aprop && !(aprop->u.number & GNU_PROPERTY_AARCH64_FEATURE_1_BTI)) - || (bprop && !(bprop->u.number & GNU_PROPERTY_AARCH64_FEATURE_1_BTI)) - /* If either property is NULL, it means its bfd did not have any - property. */ - || !aprop || !bprop) + || !aprop) { - _bfd_error_handler (_("warning: BTI turned on by --force-bti when " - "all inputs do not have BTI in NOTE section.")); + _bfd_error_handler (_("%pB: warning: BTI turned on by --force-bti when " + "all inputs do not have BTI in NOTE section."), + abfd); + } + if ((bprop && !(bprop->u.number & GNU_PROPERTY_AARCH64_FEATURE_1_BTI)) + || !bprop) + { + _bfd_error_handler (_("%pB: warning: BTI turned on by --force-bti when " + "all inputs do not have BTI in NOTE section."), + bbfd); } } -- cgit v1.1