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 04/11] MIPS/BFD: Fold the handling of input MIPS ABI flags together


Fold the handling of input MIPS ABI flags in private BFD data merging 
together, moving the attribute check afterwards, and consequently making 
input vs output compatibility checks only start once all input ABI flag 
data has been gathered, checked for inconsistencies and put in order.

Consequently also address the issue of input ABI flag inconsistencies 
being masked by a failing attribute check, which currently makes 
`_bfd_mips_elf_merge_private_bfd_data' exit prematurely and therefore 
prevent input ABI flag inconsistencies from being reported.  Such 
inconsistencies need to be reported as they may be the very cause of an 
attribute check failure.

	bfd/
	* elfxx-mips.c (_bfd_mips_elf_merge_private_bfd_data): Fold the 
	handling of input MIPS ABI flags together.
---
binutils-mips-bfd-merge-input-attrs-abiflags.diff
Index: binutils/bfd/elfxx-mips.c
===================================================================
--- binutils.orig/bfd/elfxx-mips.c	2015-11-17 13:08:46.826263291 +0000
+++ binutils/bfd/elfxx-mips.c	2015-11-17 13:08:50.254179063 +0000
@@ -15080,28 +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.  */
+  /* Populate abiflags using existing information.  */
   if (in_tdata->abiflags_valid)
     {
       obj_attribute *in_attr = elf_known_obj_attributes (ibfd)[OBJ_ATTR_GNU];
+      Elf_Internal_ABIFlags_v0 in_abiflags;
+      Elf_Internal_ABIFlags_v0 abiflags;
+
+      /* Set up the FP ABI attribute from the abiflags if it is not already
+         set.  */
       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)
-    {
-      infer_mips_abiflags (ibfd, &in_tdata->abiflags);
-      in_tdata->abiflags_valid = TRUE;
-    }
-  else
-    {
-      Elf_Internal_ABIFlags_v0 abiflags;
-      Elf_Internal_ABIFlags_v0 in_abiflags;
       infer_mips_abiflags (ibfd, &abiflags);
       in_abiflags = in_tdata->abiflags;
 
@@ -15137,6 +15127,14 @@ _bfd_mips_elf_merge_private_bfd_data (bf
 	     ".MIPS.abiflags (0x%lx)"), ibfd,
 	   (unsigned long) in_abiflags.flags2);
     }
+  else
+    {
+      infer_mips_abiflags (ibfd, &in_tdata->abiflags);
+      in_tdata->abiflags_valid = TRUE;
+    }
+
+  if (!mips_elf_merge_obj_attributes (ibfd, obfd))
+    return FALSE;
 
   if (!out_tdata->abiflags_valid)
     {


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