From a9922e52c74ef38d79817330f60af92b872e249a Mon Sep 17 00:00:00 2001 From: Ulf Carlsson Date: Thu, 7 Dec 2000 01:05:04 +0000 Subject: [PATCH] 2000-12-06 Ulf Carlsson From Ralf Baechle * 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 | 8 ++++++++ bfd/elf32-mips.c | 23 +++++++++++++++++++++++ 2 files changed, 31 insertions(+) diff --git a/bfd/ChangeLog b/bfd/ChangeLog index b22a04338e8..70854bde07b 100644 --- a/bfd/ChangeLog +++ b/bfd/ChangeLog @@ -1,3 +1,11 @@ +2000-12-06 Ulf Carlsson + + From Ralf Baechle + + * 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 * elf32-m32r.c: Fix formatting. diff --git a/bfd/elf32-mips.c b/bfd/elf32-mips.c index edb708a56ac..4a44ae2e7be 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)) -- 2.30.2