diff options
author | Alan Modra <amodra@bigpond.net.au> | 2007-05-15 08:39:58 +0000 |
---|---|---|
committer | Alan Modra <amodra@bigpond.net.au> | 2007-05-15 08:39:58 +0000 |
commit | 3e59b801f196c39c540d8aafabe03df999f10330 (patch) | |
tree | fc6a1a25d98f7fdfbe17e2eeb59b1e37cd32f640 | |
parent | ba0840ee97b3fb3b95067149238ec6bdd120a771 (diff) | |
download | binutils-redhat-3e59b801f196c39c540d8aafabe03df999f10330.tar.gz |
PR 4479
* elf.c (elf_fake_sections): Don't allow backend to change
SHT_NOBITS if called for strip/objcopy --only-keep-debug.
* elfxx-mips.c (_bfd_mips_elf_fake_sections): Remove similar
fix from here.
-rw-r--r-- | bfd/ChangeLog | 8 | ||||
-rw-r--r-- | bfd/elf.c | 10 | ||||
-rw-r--r-- | bfd/elfxx-mips.c | 12 |
3 files changed, 19 insertions, 11 deletions
diff --git a/bfd/ChangeLog b/bfd/ChangeLog index c8662919d9..1a97ba19f4 100644 --- a/bfd/ChangeLog +++ b/bfd/ChangeLog @@ -1,3 +1,11 @@ +2007-05-15 Alan Modra <amodra@bigpond.net.au> + + PR 4479 + * elf.c (elf_fake_sections): Don't allow backend to change + SHT_NOBITS if called for strip/objcopy --only-keep-debug. + * elfxx-mips.c (_bfd_mips_elf_fake_sections): Remove similar + fix from here. + 2007-05-14 Alan Modra <amodra@bigpond.net.au> * elf.c (bfd_elf_string_from_elf_section): Return NULL on @@ -2744,6 +2744,7 @@ elf_fake_sections (bfd *abfd, asection *asect, void *failedptrarg) const struct elf_backend_data *bed = get_elf_backend_data (abfd); bfd_boolean *failedptr = failedptrarg; Elf_Internal_Shdr *this_hdr; + unsigned int sh_type; if (*failedptr) { @@ -2901,10 +2902,19 @@ elf_fake_sections (bfd *abfd, asection *asect, void *failedptrarg) } /* Check for processor-specific section types. */ + sh_type = this_hdr->sh_type; if (bed->elf_backend_fake_sections && !(*bed->elf_backend_fake_sections) (abfd, this_hdr, asect)) *failedptr = TRUE; + if (sh_type == SHT_NOBITS + && elf_elfheader (abfd)->e_phnum == 0) + { + /* Don't change the header type from NOBITS if we are being + called for strip/objcopy --only-keep-debug. */ + this_hdr->sh_type = sh_type; + } + /* If the section has relocs, set up a section header for the SHT_REL[A] section. If two relocation sections are required for this section, it is up to the processor-specific back-end to diff --git a/bfd/elfxx-mips.c b/bfd/elfxx-mips.c index d01b3e980c..23ea876b10 100644 --- a/bfd/elfxx-mips.c +++ b/bfd/elfxx-mips.c @@ -5593,11 +5593,7 @@ _bfd_mips_elf_section_from_shdr (bfd *abfd, bfd_boolean _bfd_mips_elf_fake_sections (bfd *abfd, Elf_Internal_Shdr *hdr, asection *sec) { - register const char *name; - unsigned int sh_type; - - name = bfd_get_section_name (abfd, sec); - sh_type = hdr->sh_type; + const char *name = bfd_get_section_name (abfd, sec); if (strcmp (name, ".liblist") == 0) { @@ -5698,12 +5694,6 @@ _bfd_mips_elf_fake_sections (bfd *abfd, Elf_Internal_Shdr *hdr, asection *sec) hdr->sh_entsize = 8; } - /* In the unlikely event a special section is empty it has to lose its - special meaning. This may happen e.g. when using `strip' with the - "--only-keep-debug" option. */ - if (sec->size > 0 && !(sec->flags & SEC_HAS_CONTENTS)) - hdr->sh_type = sh_type; - /* The generic elf_fake_sections will set up REL_HDR using the default kind of relocations. We used to set up a second header for the non-default kind of relocations here, but only NewABI would use |