From c755ce0fc2166c78da8bb86e729b83cbb85a70e7 Mon Sep 17 00:00:00 2001 From: Alan Modra Date: Wed, 17 Aug 2005 13:29:55 +0000 Subject: * elf64-mmix.c (mmix_elf_add_symbol_hook): Mark reg section SEC_LINKER_CREATED. (mmix_elf_final_link): Check that section hasn't already been removed before removing. * mmo.c (mmo_scan): Mark reg contents section SEC_LINKER_CREATED. (mmo_canonicalize_symtab): Likewise for reg section. --- bfd/ChangeLog | 9 +++++++++ bfd/elf64-mmix.c | 14 ++++++++++---- bfd/mmo.c | 2 ++ 3 files changed, 21 insertions(+), 4 deletions(-) (limited to 'bfd') diff --git a/bfd/ChangeLog b/bfd/ChangeLog index 52e65fbd3f..a5f42e825c 100644 --- a/bfd/ChangeLog +++ b/bfd/ChangeLog @@ -1,3 +1,12 @@ +2005-08-17 Alan Modra + + * elf64-mmix.c (mmix_elf_add_symbol_hook): Mark reg section + SEC_LINKER_CREATED. + (mmix_elf_final_link): Check that section hasn't already been + removed before removing. + * mmo.c (mmo_scan): Mark reg contents section SEC_LINKER_CREATED. + (mmo_canonicalize_symtab): Likewise for reg section. + 2005-08-17 Alan Modra * elf32-cris.c (elf_cris_adjust_gotplt_to_got): Move assert later. diff --git a/bfd/elf64-mmix.c b/bfd/elf64-mmix.c index 84db270200..6f88fe102f 100644 --- a/bfd/elf64-mmix.c +++ b/bfd/elf64-mmix.c @@ -2184,7 +2184,10 @@ mmix_elf_add_symbol_hook (abfd, info, sym, namep, flagsp, secp, valp) bfd_vma *valp ATTRIBUTE_UNUSED; { if (sym->st_shndx == SHN_REGISTER) - *secp = bfd_make_section_old_way (abfd, MMIX_REG_SECTION_NAME); + { + *secp = bfd_make_section_old_way (abfd, MMIX_REG_SECTION_NAME); + (*secp)->flags |= SEC_LINKER_CREATED; + } else if ((*namep)[0] == '_' && (*namep)[1] == '_' && (*namep)[2] == '.' && strncmp (*namep, MMIX_LOC_SECTION_START_SYMBOL_PREFIX, strlen (MMIX_LOC_SECTION_START_SYMBOL_PREFIX)) == 0) @@ -2261,9 +2264,12 @@ mmix_elf_final_link (abfd, info) if (bfd_get_section_flags (abfd, reg_section) & SEC_HAS_CONTENTS) _bfd_abort (__FILE__, __LINE__, _("Register section has contents\n")); - /* Really remove the section. */ - bfd_section_list_remove (abfd, reg_section); - --abfd->section_count; + /* Really remove the section, if it hasn't already been done. */ + if (!bfd_section_removed_from_list (abfd, reg_section)) + { + bfd_section_list_remove (abfd, reg_section); + --abfd->section_count; + } } if (! bfd_elf_final_link (abfd, info)) diff --git a/bfd/mmo.c b/bfd/mmo.c index a4559e1ba2..091b341810 100644 --- a/bfd/mmo.c +++ b/bfd/mmo.c @@ -1853,6 +1853,7 @@ mmo_scan (bfd *abfd) rsec = bfd_make_section_old_way (abfd, MMIX_REG_CONTENTS_SECTION_NAME); + rsec->flags |= SEC_LINKER_CREATED; rsec->vma = z * 8; loc = mmo_get_loc (rsec, z * 8, (255 - z) * 8); bfd_put_64 (abfd, first_octa, loc); @@ -2146,6 +2147,7 @@ mmo_canonicalize_symtab (bfd *abfd, asymbol **alocation) { c->section = bfd_make_section_old_way (abfd, MMIX_REG_SECTION_NAME); + c->section->flags |= SEC_LINKER_CREATED; } else { -- cgit v1.2.1