From 6dc132d920e943b96e9399248cd01d858757e08c Mon Sep 17 00:00:00 2001 From: "H.J. Lu" Date: Sun, 20 Mar 2005 23:36:19 +0000 Subject: [PATCH] 2005-03-20 H.J. Lu * elf-bfd.h (elf_backend_data): Add int to elf_backend_section_from_shdr. (bfd_elf_section_data): Update comment for this_idx. (_bfd_elf_make_section_from_shdr): Add int. * elfxx-mips.h (_bfd_mips_elf_section_from_shdr): Likewise. * elf.c (_bfd_elf_make_section_from_shdr): Take section index and use it to set this_idx in bfd_elf_section_data. (bfd_section_from_shdr): Pass shindex to _bfd_elf_make_section_from_shdr. (_bfd_elf_section_from_bfd_section): Use this_idx in bfd_elf_section_data to find section index. * elf32-arm.c (elf32_arm_section_from_shdr): Take section index and pass it to _bfd_elf_make_section_from_shdr. * elf32-i370.c(i370_elf_section_from_shdr): Likewise. * elf32-ppc.c (ppc_elf_section_from_shdr): Likewise. * elf32-sh64.c (sh64_backend_section_from_shdr): Likewise. * elf32-v850.c (v850_elf_section_from_shdr): Likewise. * elf64-alpha.c (elf64_alpha_section_from_shdr): Likewise. * elf64-hppa.c (elf64_hppa_section_from_shdr): Likewise. * elf64-x86-64.c (elf64_x86_64_section_from_shdr): Likewise. * elfxx-ia64.c (elfNN_ia64_section_from_shdr): Likewise. * elfxx-mips.c (_bfd_mips_elf_section_from_shdr): Likewise. --- bfd/ChangeLog | 27 +++++++++++++++++++++++++ bfd/elf-bfd.h | 7 +++---- bfd/elf.c | 49 +++++++++++++++++++++------------------------- bfd/elf32-arm.c | 10 ++++++---- bfd/elf32-i370.c | 12 +++++------- bfd/elf32-ppc.c | 10 +++++++--- bfd/elf32-sh64.c | 9 +++++---- bfd/elf32-v850.c | 12 +++++------- bfd/elf64-alpha.c | 15 +++++++------- bfd/elf64-hppa.c | 13 +++++------- bfd/elf64-x86-64.c | 7 +++++-- bfd/elfxx-ia64.c | 15 +++++++------- bfd/elfxx-mips.c | 8 +++++--- bfd/elfxx-mips.h | 2 +- 14 files changed, 110 insertions(+), 86 deletions(-) diff --git a/bfd/ChangeLog b/bfd/ChangeLog index f528566be7e..5c966886c20 100644 --- a/bfd/ChangeLog +++ b/bfd/ChangeLog @@ -1,3 +1,30 @@ +2005-03-20 H.J. Lu + + * elf-bfd.h (elf_backend_data): Add int to + elf_backend_section_from_shdr. + (bfd_elf_section_data): Update comment for this_idx. + (_bfd_elf_make_section_from_shdr): Add int. + * elfxx-mips.h (_bfd_mips_elf_section_from_shdr): Likewise. + + * elf.c (_bfd_elf_make_section_from_shdr): Take section index + and use it to set this_idx in bfd_elf_section_data. + (bfd_section_from_shdr): Pass shindex to + _bfd_elf_make_section_from_shdr. + (_bfd_elf_section_from_bfd_section): Use this_idx in + bfd_elf_section_data to find section index. + + * elf32-arm.c (elf32_arm_section_from_shdr): Take section + index and pass it to _bfd_elf_make_section_from_shdr. + * elf32-i370.c(i370_elf_section_from_shdr): Likewise. + * elf32-ppc.c (ppc_elf_section_from_shdr): Likewise. + * elf32-sh64.c (sh64_backend_section_from_shdr): Likewise. + * elf32-v850.c (v850_elf_section_from_shdr): Likewise. + * elf64-alpha.c (elf64_alpha_section_from_shdr): Likewise. + * elf64-hppa.c (elf64_hppa_section_from_shdr): Likewise. + * elf64-x86-64.c (elf64_x86_64_section_from_shdr): Likewise. + * elfxx-ia64.c (elfNN_ia64_section_from_shdr): Likewise. + * elfxx-mips.c (_bfd_mips_elf_section_from_shdr): Likewise. + 2005-03-19 Danny Smith Ross Ridge diff --git a/bfd/elf-bfd.h b/bfd/elf-bfd.h index b27aed09486..a5047de7a69 100644 --- a/bfd/elf-bfd.h +++ b/bfd/elf-bfd.h @@ -629,7 +629,7 @@ struct elf_backend_data /* A function to handle unusual section types when creating BFD sections from ELF sections. */ bfd_boolean (*elf_backend_section_from_shdr) - (bfd *, Elf_Internal_Shdr *, const char *); + (bfd *, Elf_Internal_Shdr *, const char *, int); /* A function to convert machine dependent section header flags to BFD internal section header flags. */ @@ -1059,8 +1059,7 @@ struct bfd_elf_section_data /* The number of relocations currently assigned to REL_HDR2. */ unsigned int rel_count2; - /* The ELF section number of this section. Only used for an output - file. */ + /* The ELF section number of this section. */ int this_idx; /* The ELF section number of the reloc section indicated by @@ -1416,7 +1415,7 @@ extern bfd_boolean bfd_elf_mkcorefile extern Elf_Internal_Shdr *bfd_elf_find_section (bfd *, char *); extern bfd_boolean _bfd_elf_make_section_from_shdr - (bfd *, Elf_Internal_Shdr *, const char *); + (bfd *, Elf_Internal_Shdr *, const char *, int); extern bfd_boolean _bfd_elf_make_section_from_phdr (bfd *, Elf_Internal_Phdr *, int, const char *); extern struct bfd_hash_entry *_bfd_elf_link_hash_newfunc diff --git a/bfd/elf.c b/bfd/elf.c index f8cc4011565..22230f2c777 100644 --- a/bfd/elf.c +++ b/bfd/elf.c @@ -673,7 +673,8 @@ bfd_elf_is_group_section (bfd *abfd ATTRIBUTE_UNUSED, const asection *sec) bfd_boolean _bfd_elf_make_section_from_shdr (bfd *abfd, Elf_Internal_Shdr *hdr, - const char *name) + const char *name, + int shindex) { asection *newsect; flagword flags; @@ -692,6 +693,7 @@ _bfd_elf_make_section_from_shdr (bfd *abfd, hdr->bfd_section = newsect; elf_section_data (newsect)->this_hdr = *hdr; + elf_section_data (newsect)->this_idx = shindex; /* Always use the real type/flags. */ elf_section_type (newsect) = hdr->sh_type; @@ -1728,10 +1730,10 @@ bfd_section_from_shdr (bfd *abfd, unsigned int shindex) case SHT_FINI_ARRAY: /* .fini_array section. */ case SHT_PREINIT_ARRAY: /* .preinit_array section. */ case SHT_GNU_LIBLIST: /* .gnu.liblist section. */ - return _bfd_elf_make_section_from_shdr (abfd, hdr, name); + return _bfd_elf_make_section_from_shdr (abfd, hdr, name, shindex); case SHT_DYNAMIC: /* Dynamic linking information. */ - if (! _bfd_elf_make_section_from_shdr (abfd, hdr, name)) + if (! _bfd_elf_make_section_from_shdr (abfd, hdr, name, shindex)) return FALSE; if (elf_elfsections (abfd)[hdr->sh_link]->sh_type != SHT_STRTAB) { @@ -1782,7 +1784,8 @@ bfd_section_from_shdr (bfd *abfd, unsigned int shindex) linker. */ if ((hdr->sh_flags & SHF_ALLOC) != 0 && (abfd->flags & DYNAMIC) != 0 - && ! _bfd_elf_make_section_from_shdr (abfd, hdr, name)) + && ! _bfd_elf_make_section_from_shdr (abfd, hdr, name, + shindex)) return FALSE; /* Go looking for SHT_SYMTAB_SHNDX too, since if there is one we @@ -1826,7 +1829,7 @@ bfd_section_from_shdr (bfd *abfd, unsigned int shindex) /* Besides being a symbol table, we also treat this as a regular section, so that objcopy can handle it. */ - return _bfd_elf_make_section_from_shdr (abfd, hdr, name); + return _bfd_elf_make_section_from_shdr (abfd, hdr, name, shindex); case SHT_SYMTAB_SHNDX: /* Symbol section indices when >64k sections */ if (elf_symtab_shndx (abfd) == shindex) @@ -1862,7 +1865,8 @@ bfd_section_from_shdr (bfd *abfd, unsigned int shindex) elf_elfsections (abfd)[shindex] = hdr; /* We also treat this as a regular section, so that objcopy can handle it. */ - return _bfd_elf_make_section_from_shdr (abfd, hdr, name); + return _bfd_elf_make_section_from_shdr (abfd, hdr, name, + shindex); } /* If the string table isn't one of the above, then treat it as a @@ -1887,7 +1891,7 @@ bfd_section_from_shdr (bfd *abfd, unsigned int shindex) } } } - return _bfd_elf_make_section_from_shdr (abfd, hdr, name); + return _bfd_elf_make_section_from_shdr (abfd, hdr, name, shindex); case SHT_REL: case SHT_RELA: @@ -1904,7 +1908,8 @@ bfd_section_from_shdr (bfd *abfd, unsigned int shindex) ((*_bfd_error_handler) (_("%B: invalid link %lu for reloc section %s (index %u)"), abfd, hdr->sh_link, name, shindex)); - return _bfd_elf_make_section_from_shdr (abfd, hdr, name); + return _bfd_elf_make_section_from_shdr (abfd, hdr, name, + shindex); } /* For some incomprehensible reason Oracle distributes @@ -1951,7 +1956,8 @@ bfd_section_from_shdr (bfd *abfd, unsigned int shindex) can't use it as a reloc section if it points to the null section. */ if (hdr->sh_link != elf_onesymtab (abfd) || hdr->sh_info == SHN_UNDEF) - return _bfd_elf_make_section_from_shdr (abfd, hdr, name); + return _bfd_elf_make_section_from_shdr (abfd, hdr, name, + shindex); if (! bfd_section_from_shdr (abfd, hdr->sh_info)) return FALSE; @@ -1988,19 +1994,19 @@ bfd_section_from_shdr (bfd *abfd, unsigned int shindex) case SHT_GNU_verdef: elf_dynverdef (abfd) = shindex; elf_tdata (abfd)->dynverdef_hdr = *hdr; - return _bfd_elf_make_section_from_shdr (abfd, hdr, name); + return _bfd_elf_make_section_from_shdr (abfd, hdr, name, shindex); break; case SHT_GNU_versym: elf_dynversym (abfd) = shindex; elf_tdata (abfd)->dynversym_hdr = *hdr; - return _bfd_elf_make_section_from_shdr (abfd, hdr, name); + return _bfd_elf_make_section_from_shdr (abfd, hdr, name, shindex); break; case SHT_GNU_verneed: elf_dynverref (abfd) = shindex; elf_tdata (abfd)->dynverref_hdr = *hdr; - return _bfd_elf_make_section_from_shdr (abfd, hdr, name); + return _bfd_elf_make_section_from_shdr (abfd, hdr, name, shindex); break; case SHT_SHLIB: @@ -2013,7 +2019,7 @@ bfd_section_from_shdr (bfd *abfd, unsigned int shindex) name = group_signature (abfd, hdr); if (name == NULL) return FALSE; - if (!_bfd_elf_make_section_from_shdr (abfd, hdr, name)) + if (!_bfd_elf_make_section_from_shdr (abfd, hdr, name, shindex)) return FALSE; if (hdr->contents != NULL) { @@ -2039,7 +2045,8 @@ bfd_section_from_shdr (bfd *abfd, unsigned int shindex) default: /* Check for any processor-specific section types. */ - return bed->elf_backend_section_from_shdr (abfd, hdr, name); + return bed->elf_backend_section_from_shdr (abfd, hdr, name, + shindex); } return TRUE; @@ -4781,19 +4788,7 @@ _bfd_elf_section_from_bfd_section (bfd *abfd, struct bfd_section *asect) else if (bfd_is_und_section (asect)) index = SHN_UNDEF; else - { - Elf_Internal_Shdr **i_shdrp = elf_elfsections (abfd); - int maxindex = elf_numsections (abfd); - - for (index = 1; index < maxindex; index++) - { - Elf_Internal_Shdr *hdr = i_shdrp[index]; - - if (hdr != NULL && hdr->bfd_section == asect) - return index; - } - index = -1; - } + index = -1; bed = get_elf_backend_data (abfd); if (bed->elf_backend_section_from_bfd_section) diff --git a/bfd/elf32-arm.c b/bfd/elf32-arm.c index f438f03e707..aa697f4f464 100644 --- a/bfd/elf32-arm.c +++ b/bfd/elf32-arm.c @@ -5486,13 +5486,15 @@ elf32_arm_fake_sections (bfd * abfd, Elf_Internal_Shdr * hdr, asection * sec) return TRUE; } -/* Handle an ARM specific section when reading an object file. - This is called when elf.c finds a section with an unknown type. */ +/* Handle an ARM specific section when reading an object file. This is + called when bfd_section_from_shdr finds a section with an unknown + type. */ static bfd_boolean elf32_arm_section_from_shdr (bfd *abfd, Elf_Internal_Shdr * hdr, - const char *name) + const char *name, + int shindex) { /* There ought to be a place to keep ELF backend specific flags, but at the moment there isn't one. We just keep track of the @@ -5508,7 +5510,7 @@ elf32_arm_section_from_shdr (bfd *abfd, return FALSE; } - if (! _bfd_elf_make_section_from_shdr (abfd, hdr, name)) + if (! _bfd_elf_make_section_from_shdr (abfd, hdr, name, shindex)) return FALSE; return TRUE; diff --git a/bfd/elf32-i370.c b/bfd/elf32-i370.c index f4cd9c15c8f..2166e8aaa7e 100644 --- a/bfd/elf32-i370.c +++ b/bfd/elf32-i370.c @@ -286,8 +286,6 @@ static void i370_elf_post_process_headers PARAMS ((bfd *, struct bfd_link_info *)); static bfd_boolean i370_elf_create_dynamic_sections PARAMS ((bfd *, struct bfd_link_info *)); -static bfd_boolean i370_elf_section_from_shdr - PARAMS ((bfd *, Elf_Internal_Shdr *, const char *)); static bfd_boolean i370_elf_fake_sections PARAMS ((bfd *, Elf_Internal_Shdr *, asection *)); static bfd_boolean i370_elf_check_relocs @@ -385,15 +383,15 @@ i370_elf_merge_private_bfd_data (ibfd, obfd) */ static bfd_boolean -i370_elf_section_from_shdr (abfd, hdr, name) - bfd *abfd; - Elf_Internal_Shdr *hdr; - const char *name; +i370_elf_section_from_shdr (bfd *abfd, + Elf_Internal_Shdr *hdr, + const char *name, + int shindex) { asection *newsect; flagword flags; - if (! _bfd_elf_make_section_from_shdr (abfd, hdr, name)) + if (! _bfd_elf_make_section_from_shdr (abfd, hdr, name, shindex)) return FALSE; newsect = hdr->bfd_section; diff --git a/bfd/elf32-ppc.c b/bfd/elf32-ppc.c index 5b32f147db7..27eed3b166d 100644 --- a/bfd/elf32-ppc.c +++ b/bfd/elf32-ppc.c @@ -1760,15 +1760,19 @@ ppc_elf_plt_sym_val (bfd_vma i ATTRIBUTE_UNUSED, } /* Handle a PowerPC specific section when reading an object file. This - is called when elfcode.h finds a section with an unknown type. */ + is called when bfd_section_from_shdr finds a section with an unknown + type. */ static bfd_boolean -ppc_elf_section_from_shdr (bfd *abfd, Elf_Internal_Shdr *hdr, const char *name) +ppc_elf_section_from_shdr (bfd *abfd, + Elf_Internal_Shdr *hdr, + const char *name, + int shindex) { asection *newsect; flagword flags; - if (! _bfd_elf_make_section_from_shdr (abfd, hdr, name)) + if (! _bfd_elf_make_section_from_shdr (abfd, hdr, name, shindex)) return FALSE; newsect = hdr->bfd_section; diff --git a/bfd/elf32-sh64.c b/bfd/elf32-sh64.c index 8fe837794d3..fefd13d0f2b 100644 --- a/bfd/elf32-sh64.c +++ b/bfd/elf32-sh64.c @@ -63,7 +63,7 @@ static bfd_boolean sh64_elf_link_output_symbol_hook (struct bfd_link_info *, const char *, Elf_Internal_Sym *, asection *, struct elf_link_hash_entry *); static bfd_boolean sh64_backend_section_from_shdr - (bfd *, Elf_Internal_Shdr *, const char *); + (bfd *, Elf_Internal_Shdr *, const char *, int); static void sh64_elf_final_write_processing (bfd *, bfd_boolean); static bfd_boolean sh64_bfd_elf_copy_private_section_data @@ -253,13 +253,14 @@ sh64_elf_merge_private_data (bfd *ibfd, bfd *obfd) } /* Handle a SH64-specific section when reading an object file. This - is called when elfcode.h finds a section with an unknown type. + is called when bfd_section_from_shdr finds a section with an unknown + type. We only recognize SHT_SH5_CR_SORTED, on the .cranges section. */ bfd_boolean sh64_backend_section_from_shdr (bfd *abfd, Elf_Internal_Shdr *hdr, - const char *name) + const char *name, int shindex) { flagword flags = 0; @@ -284,7 +285,7 @@ sh64_backend_section_from_shdr (bfd *abfd, Elf_Internal_Shdr *hdr, return FALSE; } - if (! _bfd_elf_make_section_from_shdr (abfd, hdr, name)) + if (! _bfd_elf_make_section_from_shdr (abfd, hdr, name, shindex)) return FALSE; if (flags diff --git a/bfd/elf32-v850.c b/bfd/elf32-v850.c index e4ca968e305..8defeb063f3 100644 --- a/bfd/elf32-v850.c +++ b/bfd/elf32-v850.c @@ -78,8 +78,6 @@ static bfd_boolean v850_elf_add_symbol_hook static bfd_boolean v850_elf_link_output_symbol_hook PARAMS ((struct bfd_link_info *, const char *, Elf_Internal_Sym *, asection *, struct elf_link_hash_entry *)); -static bfd_boolean v850_elf_section_from_shdr - PARAMS ((bfd *, Elf_Internal_Shdr *, const char *)); static bfd_boolean v850_elf_gc_sweep_hook PARAMS ((bfd *, struct bfd_link_info *, asection *, const Elf_Internal_Rela *)); @@ -2210,16 +2208,16 @@ v850_elf_link_output_symbol_hook (info, name, sym, input_sec, h) } static bfd_boolean -v850_elf_section_from_shdr (abfd, hdr, name) - bfd *abfd; - Elf_Internal_Shdr *hdr; - const char *name; +v850_elf_section_from_shdr (bfd *abfd, + Elf_Internal_Shdr *hdr, + const char *name, + int shindex) { /* There ought to be a place to keep ELF backend specific flags, but at the moment there isn't one. We just keep track of the sections by their name, instead. */ - if (! _bfd_elf_make_section_from_shdr (abfd, hdr, name)) + if (! _bfd_elf_make_section_from_shdr (abfd, hdr, name, shindex)) return FALSE; switch (hdr->sh_type) diff --git a/bfd/elf64-alpha.c b/bfd/elf64-alpha.c index f0c22d9656c..966563c935a 100644 --- a/bfd/elf64-alpha.c +++ b/bfd/elf64-alpha.c @@ -72,8 +72,6 @@ static bfd_boolean elf64_alpha_mkobject PARAMS ((bfd *)); static bfd_boolean elf64_alpha_object_p PARAMS ((bfd *)); -static bfd_boolean elf64_alpha_section_from_shdr - PARAMS ((bfd *, Elf_Internal_Shdr *, const char *)); static bfd_boolean elf64_alpha_section_flags PARAMS ((flagword *, const Elf_Internal_Shdr *)); static bfd_boolean elf64_alpha_fake_sections @@ -2260,15 +2258,16 @@ elf64_alpha_relax_section (abfd, sec, link_info, again) #define ELF_DYNAMIC_INTERPRETER "/usr/lib/ld.so" /* Handle an Alpha specific section when reading an object file. This - is called when elfcode.h finds a section with an unknown type. + is called when bfd_section_from_shdr finds a section with an unknown + type. FIXME: We need to handle the SHF_ALPHA_GPREL flag, but I'm not sure how to. */ static bfd_boolean -elf64_alpha_section_from_shdr (abfd, hdr, name) - bfd *abfd; - Elf_Internal_Shdr *hdr; - const char *name; +elf64_alpha_section_from_shdr (bfd *abfd, + Elf_Internal_Shdr *hdr, + const char *name, + int shindex) { asection *newsect; @@ -2287,7 +2286,7 @@ elf64_alpha_section_from_shdr (abfd, hdr, name) return FALSE; } - if (! _bfd_elf_make_section_from_shdr (abfd, hdr, name)) + if (! _bfd_elf_make_section_from_shdr (abfd, hdr, name, shindex)) return FALSE; newsect = hdr->bfd_section; diff --git a/bfd/elf64-hppa.c b/bfd/elf64-hppa.c index 869f7ed7072..d306a404530 100644 --- a/bfd/elf64-hppa.c +++ b/bfd/elf64-hppa.c @@ -184,9 +184,6 @@ static const char *get_dyn_name static bfd_boolean elf64_hppa_object_p PARAMS ((bfd *)); -static bfd_boolean elf64_hppa_section_from_shdr - PARAMS ((bfd *, Elf_Internal_Shdr *, const char *)); - static void elf64_hppa_post_process_headers PARAMS ((bfd *, struct bfd_link_info *)); @@ -413,10 +410,10 @@ elf64_hppa_object_p (abfd) /* Given section type (hdr->sh_type), return a boolean indicating whether or not the section is an elf64-hppa specific section. */ static bfd_boolean -elf64_hppa_section_from_shdr (abfd, hdr, name) - bfd *abfd; - Elf_Internal_Shdr *hdr; - const char *name; +elf64_hppa_section_from_shdr (bfd *abfd, + Elf_Internal_Shdr *hdr, + const char *name, + int shindex) { asection *newsect; @@ -436,7 +433,7 @@ elf64_hppa_section_from_shdr (abfd, hdr, name) return FALSE; } - if (! _bfd_elf_make_section_from_shdr (abfd, hdr, name)) + if (! _bfd_elf_make_section_from_shdr (abfd, hdr, name, shindex)) return FALSE; newsect = hdr->bfd_section; diff --git a/bfd/elf64-x86-64.c b/bfd/elf64-x86-64.c index 08e610b1db8..0608a70fd31 100644 --- a/bfd/elf64-x86-64.c +++ b/bfd/elf64-x86-64.c @@ -2822,12 +2822,15 @@ elf64_x86_64_plt_sym_val (bfd_vma i, const asection *plt, is called when elfcode.h finds a section with an unknown type. */ static bfd_boolean -elf64_x86_64_section_from_shdr (bfd *abfd, Elf_Internal_Shdr *hdr, const char *name) +elf64_x86_64_section_from_shdr (bfd *abfd, + Elf_Internal_Shdr *hdr, + const char *name, + int shindex) { if (hdr->sh_type != SHT_X86_64_UNWIND) return FALSE; - if (! _bfd_elf_make_section_from_shdr (abfd, hdr, name)) + if (! _bfd_elf_make_section_from_shdr (abfd, hdr, name, shindex)) return FALSE; return TRUE; diff --git a/bfd/elfxx-ia64.c b/bfd/elfxx-ia64.c index f94182d7ae8..b19b172e6f9 100644 --- a/bfd/elfxx-ia64.c +++ b/bfd/elfxx-ia64.c @@ -183,8 +183,6 @@ static void elfNN_ia64_relax_ldxmov PARAMS((bfd_byte *contents, bfd_vma off)); static bfd_boolean is_unwind_section_name PARAMS ((bfd *abfd, const char *)); -static bfd_boolean elfNN_ia64_section_from_shdr - PARAMS ((bfd *, Elf_Internal_Shdr *, const char *)); static bfd_boolean elfNN_ia64_section_flags PARAMS ((flagword *, const Elf_Internal_Shdr *)); static bfd_boolean elfNN_ia64_fake_sections @@ -1261,13 +1259,14 @@ is_unwind_section_name (abfd, name) } /* Handle an IA-64 specific section when reading an object file. This - is called when elfcode.h finds a section with an unknown type. */ + is called when bfd_section_from_shdr finds a section with an unknown + type. */ static bfd_boolean -elfNN_ia64_section_from_shdr (abfd, hdr, name) - bfd *abfd; - Elf_Internal_Shdr *hdr; - const char *name; +elfNN_ia64_section_from_shdr (bfd *abfd, + Elf_Internal_Shdr *hdr, + const char *name, + int shindex) { asection *newsect; @@ -1291,7 +1290,7 @@ elfNN_ia64_section_from_shdr (abfd, hdr, name) return FALSE; } - if (! _bfd_elf_make_section_from_shdr (abfd, hdr, name)) + if (! _bfd_elf_make_section_from_shdr (abfd, hdr, name, shindex)) return FALSE; newsect = hdr->bfd_section; diff --git a/bfd/elfxx-mips.c b/bfd/elfxx-mips.c index 847e7e6af2e..a4baea95138 100644 --- a/bfd/elfxx-mips.c +++ b/bfd/elfxx-mips.c @@ -5068,8 +5068,10 @@ _bfd_mips_elf_section_processing (bfd *abfd, Elf_Internal_Shdr *hdr) how to. */ bfd_boolean -_bfd_mips_elf_section_from_shdr (bfd *abfd, Elf_Internal_Shdr *hdr, - const char *name) +_bfd_mips_elf_section_from_shdr (bfd *abfd, + Elf_Internal_Shdr *hdr, + const char *name, + int shindex) { flagword flags = 0; @@ -5141,7 +5143,7 @@ _bfd_mips_elf_section_from_shdr (bfd *abfd, Elf_Internal_Shdr *hdr, return FALSE; } - if (! _bfd_elf_make_section_from_shdr (abfd, hdr, name)) + if (! _bfd_elf_make_section_from_shdr (abfd, hdr, name, shindex)) return FALSE; if (flags) diff --git a/bfd/elfxx-mips.h b/bfd/elfxx-mips.h index 29686b20491..3eb9a11bd40 100644 --- a/bfd/elfxx-mips.h +++ b/bfd/elfxx-mips.h @@ -31,7 +31,7 @@ extern bfd_boolean _bfd_mips_elf_name_local_section_symbols extern bfd_boolean _bfd_mips_elf_section_processing (bfd *, Elf_Internal_Shdr *); extern bfd_boolean _bfd_mips_elf_section_from_shdr - (bfd *, Elf_Internal_Shdr *, const char *); + (bfd *, Elf_Internal_Shdr *, const char *, int); extern bfd_boolean _bfd_mips_elf_fake_sections (bfd *, Elf_Internal_Shdr *, asection *); extern bfd_boolean _bfd_mips_elf_section_from_bfd_section -- 2.30.2