diff options
author | Alan Modra <amodra@gmail.com> | 2005-05-03 17:05:51 +0000 |
---|---|---|
committer | Alan Modra <amodra@gmail.com> | 2005-05-03 17:05:51 +0000 |
commit | 04dd1667401316be04feb97696399d0728b63bf6 (patch) | |
tree | 849dce115776a1595762ea91b3fc857ea24673fb /bfd/section.c | |
parent | c1d05a606c3ae775523d364d3aa185ba1dd7ab46 (diff) | |
download | binutils-04dd1667401316be04feb97696399d0728b63bf6.zip binutils-04dd1667401316be04feb97696399d0728b63bf6.tar.gz binutils-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.c | 33 |
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)) . */ |