Do not initialise private data in output BFD if the input BFD is the default
authorNick Clifton <nickc@redhat.com>
Sat, 7 Feb 1998 01:06:49 +0000 (01:06 +0000)
committerNick Clifton <nickc@redhat.com>
Sat, 7 Feb 1998 01:06:49 +0000 (01:06 +0000)
architecture - instead allow future merges to do this.

bfd/ChangeLog
bfd/elf32-v850.c

index c65e0a3ff057a940fc10dd2e63b37d9f1dcc3433..81f6f1b93e01fc8d51fb3dc893d44cefd8470fd7 100644 (file)
@@ -2,7 +2,8 @@ start-sanitize-v850e
 Fri Feb  6 14:48:20 1998  Nick Clifton  <nickc@cygnus.com>
 
        * elf32-v850.c (v850_elf_merge_private_bfd_data): Do not complain
-       when merging v850 code into v850e/v850ea code.
+       when merging v850 code into v850e/v850ea code.  Do not initialise
+       output flags if the input is the default architecture.  PR14732.
 end-sanitize-v850e
 Fri Feb  6 11:50:22 1998  Jeffrey A Law  (law@cygnus.com)
 
index 905c4cfac2165c813c001393fbcbd96260fd3482..7e4462185952297f59a1304fefb31cfbf4271b02 100644 (file)
@@ -1564,20 +1564,29 @@ v850_elf_merge_private_bfd_data (ibfd, obfd)
      bfd * ibfd;
      bfd * obfd;
 {
-  flagword old_flags;
-  flagword new_flags;
+  flagword out_flags;
+  flagword in_flags;
 
   if (   bfd_get_flavour (ibfd) != bfd_target_elf_flavour
       || bfd_get_flavour (obfd) != bfd_target_elf_flavour)
     return true;
 
-  new_flags = elf_elfheader (ibfd)->e_flags;
-  old_flags = elf_elfheader (obfd)->e_flags;
+  in_flags = elf_elfheader (ibfd)->e_flags;
+  out_flags = elf_elfheader (obfd)->e_flags;
 
   if (! elf_flags_init (obfd))
     {
+      /* If the input is the default architecture then do not
+        bother setting the flags for the output architecture,
+        instead allow future merges to do this.  If no future
+        merges ever set these flags then they will retain their
+        unitialised values, which surprise surprise, correspond
+        to the default values.  */
+      if (bfd_get_arch_info (ibfd)->the_default)
+       return true;
+      
       elf_flags_init (obfd) = true;
-      elf_elfheader (obfd)->e_flags = new_flags;
+      elf_elfheader (obfd)->e_flags = in_flags;
 
       if (bfd_get_arch (obfd) == bfd_get_arch (ibfd)
          && bfd_get_arch_info (obfd)->the_default)
@@ -1589,16 +1598,13 @@ v850_elf_merge_private_bfd_data (ibfd, obfd)
     }
 
   /* Check flag compatibility.  */
-  if (new_flags == old_flags)
+  if (in_flags == out_flags)
     return true;
 
-  if ((new_flags & EF_V850_ARCH) != (old_flags & EF_V850_ARCH))
-    {
-      if ((old_flags & EF_V850_ARCH) != E_V850_ARCH)
-       _bfd_error_handler ("%s: Architecture mismatch with previous modules",
-                           bfd_get_filename (ibfd));
-      return true;
-    }
+  if ((in_flags & EF_V850_ARCH) != (out_flags & EF_V850_ARCH)
+      && (in_flags & EF_V850_ARCH) != E_V850_ARCH)
+    _bfd_error_handler ("%s: Architecture mismatch with previous modules",
+                       bfd_get_filename (ibfd));
 
   return true;
 }