[PATCH v1 21/27] aarch64: refactoring _bfd_aarch64_elf_link_setup_gnu_properties (part 5)
Matthieu Longo
matthieu.longo@arm.com
Mon Dec 2 14:22:13 GMT 2024
Use _bfd_aarch64_elf_check_bti_report to report any BTI issue on the
first input object.
---
bfd/elfxx-aarch64.c | 42 ++++++++++++++++++++++++------------------
1 file changed, 24 insertions(+), 18 deletions(-)
diff --git a/bfd/elfxx-aarch64.c b/bfd/elfxx-aarch64.c
index 9a27988b1c4..406b2fac0d3 100644
--- a/bfd/elfxx-aarch64.c
+++ b/bfd/elfxx-aarch64.c
@@ -756,9 +756,6 @@ _bfd_aarch64_elf_create_gnu_property_section (struct bfd_link_info *info,
bfd *
_bfd_aarch64_elf_link_setup_gnu_properties (struct bfd_link_info *info)
{
- bfd *pbfd;
- elf_property *prop;
-
struct elf_aarch64_obj_tdata *tdata = elf_aarch64_tdata (info->output_bfd);
uint32_t outprop = tdata->gnu_property_aarch64_feature_1_and;
@@ -767,29 +764,38 @@ _bfd_aarch64_elf_link_setup_gnu_properties (struct bfd_link_info *info)
_bfd_aarch64_elf_find_1st_bfd_input_with_gnu_property (info,
&has_gnu_property);
- /* If ebfd != NULL it is either an input with property note or the last
- input. Either way if we have gnu_prop, we should add it (by creating
- a section if needed). */
+ /* If ebfd != NULL it is either an input with property note or the last input.
+ Either way if we have an output GNU property that was provided, we should
+ add it (by creating a section if needed). */
if (ebfd != NULL && outprop)
{
- prop = _bfd_elf_get_property (ebfd,
- GNU_PROPERTY_AARCH64_FEATURE_1_AND,
- 4);
- if (outprop & GNU_PROPERTY_AARCH64_FEATURE_1_BTI
- && !(prop->u.number & GNU_PROPERTY_AARCH64_FEATURE_1_BTI))
- _bfd_error_handler (_("%pB: warning: BTI turned on by -z force-bti "
- "when all inputs do not have BTI in NOTE "
- "section."), ebfd);
- prop->u.number |= outprop;
- prop->pr_kind = property_number;
-
/* If no GNU property node was found, create the GNU property note
section. */
if (!has_gnu_property)
_bfd_aarch64_elf_create_gnu_property_section (info, ebfd);
+
+ /* Merge the found input property with output properties. Note: if no
+ property was found, _bfd_elf_get_property will create one. */
+ elf_property *prop =
+ _bfd_elf_get_property (ebfd,
+ GNU_PROPERTY_AARCH64_FEATURE_1_AND,
+ 4);
+
+ /* Check for a feature mismatch and report issue (if any) before this
+ information get lost as the value of ebfd will be overriden with
+ outprop. */
+ if ((outprop & GNU_PROPERTY_AARCH64_FEATURE_1_BTI)
+ && !(prop->u.number & GNU_PROPERTY_AARCH64_FEATURE_1_BTI))
+ _bfd_aarch64_elf_check_bti_report (info, ebfd);
+
+ prop->u.number |= outprop;
+ prop->pr_kind = property_number;
}
- pbfd = _bfd_elf_link_setup_gnu_properties (info);
+ /* Set up generic GNU properties, and merge them with the backend-specific
+ ones (if any). pbfd points to the first relocatable ELF input with
+ GNU properties (if found). */
+ bfd *pbfd = _bfd_elf_link_setup_gnu_properties (info);
if (bfd_link_relocatable (info))
return pbfd;
--
2.47.0
More information about the Binutils
mailing list