From 04dd1667401316be04feb97696399d0728b63bf6 Mon Sep 17 00:00:00 2001 From: Alan Modra Date: Tue, 3 May 2005 17:05:51 +0000 Subject: * 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. --- bfd/section.c | 33 ++++++++++++++++++++++++++------- 1 file changed, 26 insertions(+), 7 deletions(-) (limited to 'bfd/section.c') 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)) . */ -- cgit v1.1