From: Maciej W. Rozycki Date: Mon, 4 Jan 2016 23:00:24 +0000 (+0000) Subject: MIPS/BFD: Suppress attribute checks for null input X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=23ba6f1807299311717df4d48b5f68d534ab6c47;p=binutils-gdb.git MIPS/BFD: Suppress attribute checks for null input We currently special-case the handling of attribute checks on input objects and make them even before we check a given input object actually contains any sections. This does not add value as empty objects do not cause a compatibility concern and we already make this observation for other properties such as ELF file header flags. Moreover the attributes themselves are stored in a `.gnu.attributes' section so the absence of any section (except from a few special cases) implies there have been no attributes provided either. Therefore it is safe to move the attribute checks later on, after the null-section check has been made. bfd/ * elfxx-mips.c (_bfd_mips_elf_merge_private_bfd_data): Suppress attribute checks for null input. --- diff --git a/bfd/ChangeLog b/bfd/ChangeLog index 7d0fdb87cb1..06dc3b3d7e8 100644 --- a/bfd/ChangeLog +++ b/bfd/ChangeLog @@ -1,3 +1,8 @@ +2016-01-04 Maciej W. Rozycki + + * elfxx-mips.c (_bfd_mips_elf_merge_private_bfd_data): Suppress + attribute checks for null input. + 2016-01-04 Maciej W. Rozycki * elfxx-mips.c (_bfd_mips_elf_merge_private_bfd_data): Use local diff --git a/bfd/elfxx-mips.c b/bfd/elfxx-mips.c index 39e65d68a03..e502f73c797 100644 --- a/bfd/elfxx-mips.c +++ b/bfd/elfxx-mips.c @@ -15056,21 +15056,9 @@ _bfd_mips_elf_merge_private_bfd_data (bfd *ibfd, bfd *obfd) return FALSE; } - /* Set up the FP ABI attribute from the abiflags if it is not already - set. */ - if (in_tdata->abiflags_valid) - { - obj_attribute *in_attr = elf_known_obj_attributes (ibfd)[OBJ_ATTR_GNU]; - if (in_attr[Tag_GNU_MIPS_ABI_FP].i == Val_GNU_MIPS_ABI_FP_ANY) - in_attr[Tag_GNU_MIPS_ABI_FP].i = in_tdata->abiflags.fp_abi; - } - - if (!mips_elf_merge_obj_attributes (ibfd, obfd)) - return FALSE; - - /* Check to see if the input BFD actually contains any sections. - If not, its flags may not have been initialised either, but it cannot - actually cause any incompatibility. */ + /* Check to see if the input BFD actually contains any sections. If not, + then it has no attributes, and its flags may not have been initialized + either, but it cannot actually cause any incompatibility. */ for (sec = ibfd->sections; sec != NULL; sec = sec->next) { /* Ignore synthetic sections and empty .text, .data and .bss sections @@ -15092,6 +15080,18 @@ _bfd_mips_elf_merge_private_bfd_data (bfd *ibfd, bfd *obfd) if (null_input_bfd) return TRUE; + /* Set up the FP ABI attribute from the abiflags if it is not already + set. */ + if (in_tdata->abiflags_valid) + { + obj_attribute *in_attr = elf_known_obj_attributes (ibfd)[OBJ_ATTR_GNU]; + if (in_attr[Tag_GNU_MIPS_ABI_FP].i == Val_GNU_MIPS_ABI_FP_ANY) + in_attr[Tag_GNU_MIPS_ABI_FP].i = in_tdata->abiflags.fp_abi; + } + + if (!mips_elf_merge_obj_attributes (ibfd, obfd)) + return FALSE; + /* Populate abiflags using existing information. */ if (!in_tdata->abiflags_valid) {