diff options
author | Alan Modra <amodra@gmail.com> | 2012-05-22 12:09:26 +0000 |
---|---|---|
committer | Alan Modra <amodra@gmail.com> | 2012-05-22 12:09:26 +0000 |
commit | 90061c3348116fbc64c9ef19dc28c154450d218e (patch) | |
tree | 15133347a508e842b514ed9829d35af6b3dab5cd /bfd/section.c | |
parent | 43011e5218454a59f78d74380b5072fa5e564645 (diff) | |
download | gdb-90061c3348116fbc64c9ef19dc28c154450d218e.zip gdb-90061c3348116fbc64c9ef19dc28c154450d218e.tar.gz gdb-90061c3348116fbc64c9ef19dc28c154450d218e.tar.bz2 |
* elflink.c (bfd_elf_discard_info): Handle multiple .eh_frame
sections attached to a BFD.
* section.c (bfd_get_section_by_name): Rewrite description.
(bfd_get_next_section_by_name): New function.
* bfd-in2.h: Regenerate.
Diffstat (limited to 'bfd/section.c')
-rw-r--r-- | bfd/section.c | 45 |
1 files changed, 37 insertions, 8 deletions
diff --git a/bfd/section.c b/bfd/section.c index 3a70ccf..0a7908e 100644 --- a/bfd/section.c +++ b/bfd/section.c @@ -845,14 +845,8 @@ SYNOPSIS asection *bfd_get_section_by_name (bfd *abfd, const char *name); DESCRIPTION - Run through @var{abfd} and return the one of the - <<asection>>s whose name matches @var{name}, otherwise <<NULL>>. - @xref{Sections}, for more information. - - This should only be used in special cases; the normal way to process - all sections of a given name is to use <<bfd_map_over_sections>> and - <<strcmp>> on the name (or better yet, base it on the section flags - or something else) for each section. + Return the most recently created section attached to @var{abfd} + named @var{name}. Return NULL if no such section exists. */ asection * @@ -869,6 +863,41 @@ bfd_get_section_by_name (bfd *abfd, const char *name) /* FUNCTION + bfd_get_next_section_by_name + +SYNOPSIS + asection *bfd_get_next_section_by_name (asection *sec); + +DESCRIPTION + Given @var{sec} is a section returned by @code{bfd_get_section_by_name}, + return the next most recently created section attached to the same + BFD with the same name. Return NULL if no such section exists. +*/ + +asection * +bfd_get_next_section_by_name (asection *sec) +{ + struct section_hash_entry *sh; + const char *name; + unsigned long hash; + + sh = ((struct section_hash_entry *) + ((char *) sec - offsetof (struct section_hash_entry, section))); + + hash = sh->root.hash; + name = sec->name; + for (sh = (struct section_hash_entry *) sh->root.next; + sh != NULL; + sh = (struct section_hash_entry *) sh->root.next) + if (sh->root.hash == hash + && strcmp (sh->root.string, name) == 0) + return &sh->section; + + return NULL; +} + +/* +FUNCTION bfd_get_section_by_name_if SYNOPSIS |