summaryrefslogtreecommitdiff
path: root/bfd/section.c
diff options
context:
space:
mode:
authorAlan Modra <amodra@bigpond.net.au>2005-05-03 17:05:51 +0000
committerAlan Modra <amodra@bigpond.net.au>2005-05-03 17:05:51 +0000
commit3767014261d509426ee246922a8210b86c3520ef (patch)
tree1343c81ccc72b2f6a3623e78fbe870da92e5ef8d /bfd/section.c
parentdd558dcf48e63f7a4f523df3cbe7ffd466d0dcfd (diff)
downloadbinutils-redhat-3767014261d509426ee246922a8210b86c3520ef.tar.gz
* section.c (bfd_section_list_remove): Don't clear s->next.
(bfd_section_list_append): Always init s->prev. (bfd_section_list_prepend): Define. (bfd_section_list_insert_after): Minor optimization. (bfd_section_removed_from_list): Rewrite. * elf.c (assign_section_numbers): Simplify list traversal now that bfd_section_list_remove doesn't destroy removed section next ptr. * sunos.c (sunos_add_dynamic_symbols): Likewise. * elfxx-ia64.c (elfNN_ia64_object_p): Use bfd_section_list_prepend. * xcofflink.c (_bfd_xcoff_bfd_final_link): Simplify list traversal. * bfd-in2.h: Regenerate.
Diffstat (limited to 'bfd/section.c')
-rw-r--r--bfd/section.c33
1 files changed, 26 insertions, 7 deletions
diff --git a/bfd/section.c b/bfd/section.c
index 45ede06fc6..3f008ea190 100644
--- a/bfd/section.c
+++ b/bfd/section.c
@@ -552,10 +552,7 @@ CODE_FRAGMENT
. else \
. (ABFD)->sections = _next; \
. if (_next) \
-. { \
-. _next->prev = _prev; \
-. _s->next = NULL; \
-. } \
+. _next->prev = _prev; \
. else \
. (ABFD)->section_last = _prev; \
. } \
@@ -572,10 +569,32 @@ CODE_FRAGMENT
. _abfd->section_last->next = _s; \
. } \
. else \
-. _abfd->sections = _s; \
+. { \
+. _s->prev = NULL; \
+. _abfd->sections = _s; \
+. } \
. _abfd->section_last = _s; \
. } \
. while (0)
+.#define bfd_section_list_prepend(ABFD, S) \
+. do \
+. { \
+. asection *_s = S; \
+. bfd *_abfd = ABFD; \
+. _s->prev = NULL; \
+. if (_abfd->sections) \
+. { \
+. _s->next = _abfd->sections; \
+. _abfd->sections->prev = _s; \
+. } \
+. else \
+. { \
+. _s->next = NULL; \
+. _abfd->section_last = _s; \
+. } \
+. _abfd->sections = _s; \
+. } \
+. while (0)
.#define bfd_section_list_insert_after(ABFD, A, S) \
. do \
. { \
@@ -586,7 +605,7 @@ CODE_FRAGMENT
. _s->prev = _a; \
. _a->next = _s; \
. if (_next) \
-. _s->next->prev = _s; \
+. _next->prev = _s; \
. else \
. (ABFD)->section_last = _s; \
. } \
@@ -607,7 +626,7 @@ CODE_FRAGMENT
. } \
. while (0)
.#define bfd_section_removed_from_list(ABFD, S) \
-. ((S)->next == NULL && (S) != (ABFD)->section_last)
+. ((S)->next == NULL ? (ABFD)->section_last != (S) : (S)->next->prev != (S))
.
*/