aboutsummaryrefslogtreecommitdiff
path: root/bfd/section.c
diff options
context:
space:
mode:
authorH.J. Lu <hjl.tools@gmail.com>2004-05-02 14:36:25 +0000
committerH.J. Lu <hjl.tools@gmail.com>2004-05-02 14:36:25 +0000
commitfafe6678a56d703ba0d3bfc32ff12f99b979f339 (patch)
tree7eff8f48c45bf21a28b8b12c78358aa92d9d1255 /bfd/section.c
parenteb4556d736ee14965782a320db1496fb070e54c3 (diff)
downloadfsf-binutils-gdb-fafe6678a56d703ba0d3bfc32ff12f99b979f339.zip
fsf-binutils-gdb-fafe6678a56d703ba0d3bfc32ff12f99b979f339.tar.gz
fsf-binutils-gdb-fafe6678a56d703ba0d3bfc32ff12f99b979f339.tar.bz2
bfd/
2004-05-02 H.J. Lu <hongjiu.lu@intel.com> * section.c (bfd_get_section_by_name_if): New. * bfd-in2.h: Regenerated. gas/ 2004-05-02 H.J. Lu <hongjiu.lu@intel.com> * config/obj-elf.c (get_section): Return bfd_boolean. (obj_elf_change_section): Call bfd_get_section_by_name_if instead of bfd_map_over_sections.
Diffstat (limited to 'bfd/section.c')
-rw-r--r--bfd/section.c51
1 files changed, 51 insertions, 0 deletions
diff --git a/bfd/section.c b/bfd/section.c
index 58508a2..7f5365b 100644
--- a/bfd/section.c
+++ b/bfd/section.c
@@ -801,6 +801,57 @@ bfd_get_section_by_name (bfd *abfd, const char *name)
/*
FUNCTION
+ bfd_get_section_by_name_if
+
+SYNOPSIS
+ asection *bfd_get_section_by_name_if
+ (bfd *abfd,
+ const char *name,
+ bfd_boolean (*func) (bfd *abfd, asection *sect, void *obj),
+ void *obj);
+
+DESCRIPTION
+ Call the provided function @var{func} for each section
+ attached to the BFD @var{abfd} whose name matches @var{name},
+ passing @var{obj} as an argument. The function will be called
+ as if by
+
+| func (abfd, the_section, obj);
+
+ It returns the first section for which @var{func} returns true,
+ otherwise <<NULL>>.
+
+*/
+
+asection *
+bfd_get_section_by_name_if (bfd *abfd, const char *name,
+ bfd_boolean (*operation) (bfd *,
+ asection *,
+ void *),
+ void *user_storage)
+{
+ struct section_hash_entry *sh;
+ unsigned long hash;
+
+ sh = section_hash_lookup (&abfd->section_htab, name, FALSE, FALSE);
+ if (sh == NULL)
+ 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);
+
+ return NULL;
+}
+
+/*
+FUNCTION
bfd_get_unique_section_name
SYNOPSIS