2000-12-06 Ulf Carlsson <ulfc@engr.sgi.com>
authorUlf Carlsson <ulfc@engr.sgi.com>
Thu, 7 Dec 2000 01:05:04 +0000 (01:05 +0000)
committerUlf Carlsson <ulfc@engr.sgi.com>
Thu, 7 Dec 2000 01:05:04 +0000 (01:05 +0000)
From  Ralf Baechle  <ralf@gnu.org>

* elf32-mips.c (elf32_mips_merge_private_bfd_data): Always permit
BFDs containing no sections or empty .text, .data or .bss sections
to be merged, regardless of their flags.

bfd/ChangeLog
bfd/elf32-mips.c

index b22a04338e896d029d34ce434b600825b61c7711..70854bde07b81827a41c4239547f21e61ad2f704 100644 (file)
@@ -1,3 +1,11 @@
+2000-12-06  Ulf Carlsson  <ulfc@engr.sgi.com>
+
+       From  Ralf Baechle  <ralf@gnu.org>
+
+       * elf32-mips.c (elf32_mips_merge_private_bfd_data): Always permit
+       BFDs containing no sections or empty .text, .data or .bss sections
+       to be merged, regardless of their flags.
+
 2000-12-06  Kazu Hirata  <kazu@hxi.com>
 
        * elf32-m32r.c: Fix formatting.
index edb708a56ac3cf1a8b53dd7d3af28e2e0c647c9c..4a44ae2e7bef9b93f52a57d60e7e8388918fe7b7 100644 (file)
@@ -2497,6 +2497,8 @@ _bfd_mips_elf_merge_private_bfd_data (ibfd, obfd)
   flagword old_flags;
   flagword new_flags;
   boolean ok;
+  boolean null_input_bfd = true;
+  asection *sec;
 
   /* Check if we have the same endianess */
   if (_bfd_generic_verify_endian_match (ibfd, obfd) == false)
@@ -2536,6 +2538,27 @@ _bfd_mips_elf_merge_private_bfd_data (ibfd, obfd)
   if (new_flags == old_flags)
     return true;
 
+  /* 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.  */
+  for (sec = ibfd->sections; sec != NULL; sec = sec->next)
+    {
+      /* Ignore synthetic sections and empty .text, .data and .bss sections
+         which are automatically generated by gas.  */
+      if (strcmp (sec->name, ".reginfo")
+         && strcmp (sec->name, ".mdebug")
+         && ((!strcmp (sec->name, ".text")
+              || !strcmp (sec->name, ".data")
+              || !strcmp (sec->name, ".bss"))
+             && sec->_raw_size != 0))
+       {
+         null_input_bfd = false;
+         break;
+       }
+    }
+  if (null_input_bfd)
+    return true;
+
   ok = true;
 
   if ((new_flags & EF_MIPS_PIC) != (old_flags & EF_MIPS_PIC))