PATCH: Don't change input_elf_XXX if if they are -1

H.J. Lu hongjiu.lu@intel.com
Fri Jan 8 15:57:00 GMT 2010


Hi,

If we don't specify --input-mach, input_elf_class and input_elf_machine
are -1 initially. We shouldn't change them. Otherwise, when we process
the second file, they will be set to the value of the first file. I
checked it in.

Thanks.


H.J.
----
diff --git a/binutils/ChangeLog b/binutils/ChangeLog
index ebdc1a2..fb7adc1 100644
--- a/binutils/ChangeLog
+++ b/binutils/ChangeLog
@@ -1,3 +1,8 @@
+2010-01-08  H.J. Lu  <hongjiu.lu@intel.com>
+
+	* elfedit.c (update_elf_header): Don't change input_elf_class
+	nor input_elf_machine if they are -1.
+
 2010-01-08  Tristan Gingold  <gingold@adacore.com>
 
 	* ar.c: Remove bfd_special_undocumented_glue prototype.
diff --git a/binutils/elfedit.c b/binutils/elfedit.c
index 6e2f8db..410d89a 100644
--- a/binutils/elfedit.c
+++ b/binutils/elfedit.c
@@ -228,7 +228,7 @@ byte_put_big_endian (unsigned char * field, bfd_vma value, int size)
 static int
 update_elf_header (const char *file_name, FILE *file)
 {
-  int status;
+  int class, machine, status;
 
   if (elf_header.e_ident[EI_MAG0] != ELFMAG0
       || elf_header.e_ident[EI_MAG1] != ELFMAG1
@@ -250,35 +250,34 @@ update_elf_header (const char *file_name, FILE *file)
       return 0;
     }
 
+  /* Return if e_machine is the same as output_elf_machine.  */
+  if (output_elf_machine == elf_header.e_machine)
+    return 1;
+
+  class = elf_header.e_ident[EI_CLASS];
+
   /* Skip if class doesn't match. */
-  if (input_elf_class == -1)
-    input_elf_class = elf_header.e_ident[EI_CLASS];
-  else if (elf_header.e_ident[EI_CLASS] != input_elf_class)
+  if (input_elf_class != -1 && class != input_elf_class)
     {
       non_fatal
 	(_("%s: Unmatched EI_CLASS: %d is not %d\n"),
-	 file_name, elf_header.e_ident[EI_CLASS],
-	 input_elf_class);
+	 file_name, class, input_elf_class);
       return 0;
     }
 
-  /* Return if e_machine is the same as output_elf_machine.  */
-  if (output_elf_machine == elf_header.e_machine)
-    return 1;
+  machine = elf_header.e_machine;
 
   /* Skip if e_machine doesn't match. */
-  if (input_elf_machine == -1)
-    input_elf_machine = elf_header.e_machine;
-  else if (elf_header.e_machine != input_elf_machine)
+  if (input_elf_machine != -1 && machine != input_elf_machine)
     {
       non_fatal
 	(_("%s: Unmatched e_machine: %d is not %d\n"),
-	 file_name, elf_header.e_machine, input_elf_machine);
+	 file_name, machine, input_elf_machine);
       return 0;
     }
 
   /* Update e_machine.  */
-  switch (input_elf_class)
+  switch (class)
     {
     default:
       /* We should never get here.  */



More information about the Binutils mailing list