aboutsummaryrefslogtreecommitdiff
path: root/bfd/section.c
diff options
context:
space:
mode:
authorAlan Modra <amodra@gmail.com>2005-05-03 17:05:51 +0000
committerAlan Modra <amodra@gmail.com>2005-05-03 17:05:51 +0000
commit04dd1667401316be04feb97696399d0728b63bf6 (patch)
tree849dce115776a1595762ea91b3fc857ea24673fb /bfd/section.c
parentc1d05a606c3ae775523d364d3aa185ba1dd7ab46 (diff)
downloadgdb-04dd1667401316be04feb97696399d0728b63bf6.zip
gdb-04dd1667401316be04feb97696399d0728b63bf6.tar.gz
gdb-04dd1667401316be04feb97696399d0728b63bf6.tar.bz2
* 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 45ede06..3f008ea 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))
.
*/