diff options
Diffstat (limited to 'bfd')
-rw-r--r-- | bfd/ChangeLog | 8 | ||||
-rw-r--r-- | bfd/elf32-mips.c | 23 |
2 files changed, 31 insertions, 0 deletions
diff --git a/bfd/ChangeLog b/bfd/ChangeLog index b22a043..70854bd 100644 --- a/bfd/ChangeLog +++ b/bfd/ChangeLog @@ -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. diff --git a/bfd/elf32-mips.c b/bfd/elf32-mips.c index edb708a..4a44ae2 100644 --- a/bfd/elf32-mips.c +++ b/bfd/elf32-mips.c @@ -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)) |