bfd_get_section_by_name_if hash chain traversal
This function stops too soon, as I found when the hash chain happened to contain two .debug_macro sections and a .bss section: .debug_macro -> .bss -> .debug_macro * section.c (bfd_get_section_by_name_if): Iterate over entire hash chain.
This commit is contained in:
parent
f0b0791b05
commit
2fb9328d8d
2 changed files with 10 additions and 8 deletions
|
@ -1,3 +1,8 @@
|
|||
2015-07-24 Alan Modra <amodra@gmail.com>
|
||||
|
||||
* section.c (bfd_get_section_by_name_if): Iterate over entire hash
|
||||
chain.
|
||||
|
||||
2015-07-23 Joseph Myers <joseph@codesourcery.com>
|
||||
|
||||
* elfxx-mips.c (_bfd_mips_elf_finish_dynamic_sections)
|
||||
|
|
|
@ -994,14 +994,11 @@ bfd_get_section_by_name_if (bfd *abfd, const char *name,
|
|||
return NULL;
|
||||
|
||||
hash = sh->root.hash;
|
||||
do
|
||||
{
|
||||
if ((*operation) (abfd, &sh->section, user_storage))
|
||||
return &sh->section;
|
||||
sh = (struct section_hash_entry *) sh->root.next;
|
||||
}
|
||||
while (sh != NULL && sh->root.hash == hash
|
||||
&& strcmp (sh->root.string, name) == 0);
|
||||
for (; sh != NULL; sh = (struct section_hash_entry *) sh->root.next)
|
||||
if (sh->root.hash == hash
|
||||
&& strcmp (sh->root.string, name) == 0
|
||||
&& (*operation) (abfd, &sh->section, user_storage))
|
||||
return &sh->section;
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue