This is the mail archive of the binutils@sourceware.org mailing list for the binutils project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[RFC PATCH 03/11] 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.
---
binutils-mips-bfd-merge-null-input.diff
Index: binutils/bfd/elfxx-mips.c
===================================================================
--- binutils.orig/bfd/elfxx-mips.c	2015-11-17 13:08:43.243907672 +0000
+++ binutils/bfd/elfxx-mips.c	2015-11-17 13:08:46.826263291 +0000
@@ -15056,21 +15056,9 @@ _bfd_mips_elf_merge_private_bfd_data (bf
       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,
+     its flags or attributes may not have been initialised 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 (bf
   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)
     {


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]