From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 19425 invoked by alias); 17 Jan 2002 13:00:49 -0000 Mailing-List: contact binutils-help@sources.redhat.com; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: binutils-owner@sources.redhat.com Received: (qmail 19315 invoked from network); 17 Jan 2002 13:00:40 -0000 Received: from unknown (HELO mta04ps.bigpond.com) (144.135.25.136) by sources.redhat.com with SMTP; 17 Jan 2002 13:00:40 -0000 Received: from bubble.local ([144.135.25.87]) by mta04ps.bigpond.com (Netscape Messaging Server 4.15) with SMTP id GQ334T00.1OQ for ; Thu, 17 Jan 2002 23:07:41 +1000 Received: from CPE-144-136-176-14.sa.bigpond.net.au ([144.136.176.14]) by psmam07.mailsvc.email.bigpond.com(MailRouter V3.0h 125/495648); 17 Jan 2002 23:00:36 Received: (qmail 26408 invoked by uid 179); 17 Jan 2002 13:00:36 -0000 Date: Thu, 17 Jan 2002 08:03:00 -0000 From: Alan Modra To: Steve Ellcey , binutils@sources.redhat.com Subject: Re: Question about an elf.c change Message-ID: <20020117130036.GT21859@bubble.sa.bigpond.net.au> Mail-Followup-To: Steve Ellcey , binutils@sources.redhat.com References: <200201161903.LAA05012@hpsje.cup.hp.com> <20020117010340.GR21859@bubble.sa.bigpond.net.au> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20020117010340.GR21859@bubble.sa.bigpond.net.au> User-Agent: Mutt/1.3.25i X-SW-Source: 2002-01/txt/msg00345.txt.bz2 On Thu, Jan 17, 2002 at 11:33:40AM +1030, Alan Modra wrote: > > Hmm, now that I look at it again, I see no reason why > bed->elf_backend_section_from_bfd_section is called from inside a > loop. None of the backends use the hdr arg. I might make a > slightly more comprehensive patch. Done. If ever a backend needs to look at the elf headers, it can rummage through the list itself. bfd/ChangeLog * elf-bfd.h (elf_backend_data ): Remove "Elf_Internal_Shdr *" param. (_bfd_mips_elf_section_from_bfd_section): Ditto. * elf32-mips.c (_bfd_mips_elf_section_from_bfd_section): Ditto. * elf32-m32r.c (_bfd_m32r_elf_section_from_bfd_section): Ditto. * elf32-v850.c (v850_elf_section_from_bfd_section): Ditto. * elf64-mmix.c (mmix_elf_section_from_bfd_section): Ditto. * elfxx-ia64.c (elfNN_hpux_backend_section_from_bfd_section): Ditto. * elf.c (_bfd_elf_section_from_bfd_section): Allow backend function to override special sections. Remove hdr arg from backend call, and don't loop. -- Alan Modra IBM OzLabs - Linux Technology Centre Index: bfd/elf-bfd.h =================================================================== RCS file: /cvs/src/src/bfd/elf-bfd.h,v retrieving revision 1.64 diff -u -p -r1.64 elf-bfd.h --- elf-bfd.h 2002/01/10 23:05:21 1.64 +++ elf-bfd.h 2002/01/17 11:26:18 @@ -493,7 +493,7 @@ struct elf_backend_data section, *RETVAL should be left unchanged. If it is not a normal ELF section *RETVAL should be set to the SHN_xxxx index. */ boolean (*elf_backend_section_from_bfd_section) - PARAMS ((bfd *, Elf32_Internal_Shdr *, asection *, int *retval)); + PARAMS ((bfd *, asection *, int *retval)); /* If this field is not NULL, it is called by the add_symbols phase of a link just before adding a symbol to the global linker hash @@ -1541,7 +1541,7 @@ extern boolean _bfd_mips_elf_section_fro extern boolean _bfd_mips_elf_fake_sections PARAMS ((bfd *, Elf_Internal_Shdr *, asection *)); extern boolean _bfd_mips_elf_section_from_bfd_section - PARAMS ((bfd *, Elf_Internal_Shdr *, asection *, int *)); + PARAMS ((bfd *, asection *, int *)); extern boolean _bfd_mips_elf_section_processing PARAMS ((bfd *, Elf_Internal_Shdr *)); extern void _bfd_mips_elf_symbol_processing Index: bfd/elf.c =================================================================== RCS file: /cvs/src/src/bfd/elf.c,v retrieving revision 1.122 diff -c -p -r1.122 elf.c *** elf.c 2002/01/15 12:52:14 1.122 --- elf.c 2002/01/17 12:54:05 *************** _bfd_elf_section_from_bfd_section (abfd, *** 4050,4099 **** bfd *abfd; struct sec *asect; { ! struct elf_backend_data *bed = get_elf_backend_data (abfd); ! Elf_Internal_Shdr **i_shdrp = elf_elfsections (abfd); int index; - Elf_Internal_Shdr *hdr; - int maxindex = elf_numsections (abfd); if (elf_section_data (asect) != NULL && elf_section_data (asect)->this_idx != 0) return elf_section_data (asect)->this_idx; if (bfd_is_abs_section (asect)) ! return SHN_ABS; ! if (bfd_is_com_section (asect)) ! return SHN_COMMON; ! if (bfd_is_und_section (asect)) ! return SHN_UNDEF; ! ! for (index = 1; index < maxindex; index++) { ! hdr = i_shdrp[index]; ! if (hdr != NULL && hdr->bfd_section == asect) ! return index; } if (bed->elf_backend_section_from_bfd_section) { ! for (index = 0; index < maxindex; index++) ! { ! int retval; ! hdr = i_shdrp[index]; ! if (hdr == NULL) ! continue; ! ! retval = index; ! if ((*bed->elf_backend_section_from_bfd_section) ! (abfd, hdr, asect, &retval)) ! return retval; ! } } ! bfd_set_error (bfd_error_nonrepresentable_section); ! return SHN_BAD; } /* Given a BFD symbol, return the index in the ELF symbol table, or -1 --- 4050,4096 ---- bfd *abfd; struct sec *asect; { ! struct elf_backend_data *bed; int index; if (elf_section_data (asect) != NULL && elf_section_data (asect)->this_idx != 0) return elf_section_data (asect)->this_idx; if (bfd_is_abs_section (asect)) ! index = SHN_ABS; ! else if (bfd_is_com_section (asect)) ! index = SHN_COMMON; ! 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; } + bed = get_elf_backend_data (abfd); if (bed->elf_backend_section_from_bfd_section) { ! int retval = index; ! if ((*bed->elf_backend_section_from_bfd_section) (abfd, asect, &retval)) ! return retval; } ! if (index == -1) ! bfd_set_error (bfd_error_nonrepresentable_section); ! return index; } /* Given a BFD symbol, return the index in the ELF symbol table, or -1 Index: bfd/elf32-m32r.c =================================================================== RCS file: /cvs/src/src/bfd/elf32-m32r.c,v retrieving revision 1.20 diff -u -p -r1.20 elf32-m32r.c --- elf32-m32r.c 2001/12/18 17:59:58 1.20 +++ elf32-m32r.c 2002/01/17 11:26:26 @@ -45,7 +45,7 @@ static reloc_howto_type *bfd_elf32_bfd_r static void m32r_info_to_howto_rel PARAMS ((bfd *, arelent *, Elf32_Internal_Rel *)); boolean _bfd_m32r_elf_section_from_bfd_section - PARAMS ((bfd *, Elf32_Internal_Shdr *, asection *, int *)); + PARAMS ((bfd *, asection *, int *)); void _bfd_m32r_elf_symbol_processing PARAMS ((bfd *, asymbol *)); static boolean m32r_elf_add_symbol_hook @@ -765,9 +765,8 @@ m32r_info_to_howto_rel (abfd, cache_ptr, index. */ boolean -_bfd_m32r_elf_section_from_bfd_section (abfd, hdr, sec, retval) +_bfd_m32r_elf_section_from_bfd_section (abfd, sec, retval) bfd *abfd ATTRIBUTE_UNUSED; - Elf32_Internal_Shdr *hdr ATTRIBUTE_UNUSED; asection *sec; int *retval; { Index: bfd/elf32-mips.c =================================================================== RCS file: /cvs/src/src/bfd/elf32-mips.c,v retrieving revision 1.136 diff -u -p -r1.136 elf32-mips.c --- elf32-mips.c 2002/01/17 08:19:08 1.136 +++ elf32-mips.c 2002/01/17 11:26:34 @@ -3585,9 +3585,8 @@ _bfd_mips_elf_fake_sections (abfd, hdr, the .scommon section. */ boolean -_bfd_mips_elf_section_from_bfd_section (abfd, hdr, sec, retval) +_bfd_mips_elf_section_from_bfd_section (abfd, sec, retval) bfd *abfd ATTRIBUTE_UNUSED; - Elf_Internal_Shdr *hdr ATTRIBUTE_UNUSED; asection *sec; int *retval; { Index: bfd/elf32-v850.c =================================================================== RCS file: /cvs/src/src/bfd/elf32-v850.c,v retrieving revision 1.19 diff -u -p -r1.19 elf32-v850.c --- elf32-v850.c 2001/12/18 17:59:59 1.19 +++ elf32-v850.c 2002/01/17 11:26:38 @@ -69,7 +69,7 @@ static boolean v850_elf_merge_private_bf static boolean v850_elf_print_private_bfd_data PARAMS ((bfd *, PTR)); static boolean v850_elf_section_from_bfd_section - PARAMS ((bfd *, Elf32_Internal_Shdr *, asection *, int *)); + PARAMS ((bfd *, asection *, int *)); static void v850_elf_symbol_processing PARAMS ((bfd *, asymbol *)); static boolean v850_elf_add_symbol_hook @@ -1930,9 +1930,8 @@ static asymbol * v850_elf_zcom_symbol_pt corresponding ELF section index. */ static boolean -v850_elf_section_from_bfd_section (abfd, hdr, sec, retval) +v850_elf_section_from_bfd_section (abfd, sec, retval) bfd * abfd ATTRIBUTE_UNUSED; - Elf32_Internal_Shdr * hdr ATTRIBUTE_UNUSED; asection * sec; int * retval; { Index: bfd/elf64-mmix.c =================================================================== RCS file: /cvs/src/src/bfd/elf64-mmix.c,v retrieving revision 1.5 diff -u -p -r1.5 elf64-mmix.c --- elf64-mmix.c 2002/01/05 13:11:31 1.5 +++ elf64-mmix.c 2002/01/17 11:26:39 @@ -77,7 +77,7 @@ static bfd_reloc_status_type mmix_elf_pe PARAMS ((asection *, reloc_howto_type *, PTR, bfd_vma, bfd_vma)); static boolean mmix_elf_section_from_bfd_section - PARAMS ((bfd *, Elf64_Internal_Shdr *, asection *, int *)); + PARAMS ((bfd *, asection *, int *)); static boolean mmix_elf_add_symbol_hook PARAMS ((bfd *, struct bfd_link_info *, const Elf_Internal_Sym *, @@ -1557,9 +1557,8 @@ mmix_elf_symbol_processing (abfd, asym) index. */ static boolean -mmix_elf_section_from_bfd_section (abfd, hdr, sec, retval) +mmix_elf_section_from_bfd_section (abfd, sec, retval) bfd * abfd ATTRIBUTE_UNUSED; - Elf64_Internal_Shdr * hdr ATTRIBUTE_UNUSED; asection * sec; int * retval; { Index: bfd/elfxx-ia64.c =================================================================== RCS file: /cvs/src/src/bfd/elfxx-ia64.c,v retrieving revision 1.40 diff -u -p -r1.40 elfxx-ia64.c --- elfxx-ia64.c 2002/01/06 11:14:19 1.40 +++ elfxx-ia64.c 2002/01/17 11:26:43 @@ -312,7 +312,7 @@ static boolean elfNN_ia64_hpux_vec static void elfNN_hpux_post_process_headers PARAMS ((bfd *abfd, struct bfd_link_info *info)); boolean elfNN_hpux_backend_section_from_bfd_section - PARAMS ((bfd *abfd, ElfNN_Internal_Shdr *hdr, asection *sec, int *retval)); + PARAMS ((bfd *abfd, asection *sec, int *retval)); /* ia64-specific relocation */ @@ -4481,9 +4481,8 @@ elfNN_hpux_post_process_headers (abfd, i } boolean -elfNN_hpux_backend_section_from_bfd_section (abfd, hdr, sec, retval) +elfNN_hpux_backend_section_from_bfd_section (abfd, sec, retval) bfd *abfd ATTRIBUTE_UNUSED; - Elf32_Internal_Shdr *hdr ATTRIBUTE_UNUSED; asection *sec; int *retval; {