From ab82c5b97fcf97e081a3ea5e2291882963fecdae Mon Sep 17 00:00:00 2001 From: "H.J. Lu" Date: Mon, 11 Apr 2005 22:21:23 +0000 Subject: [PATCH] 2005-04-11 H.J. Lu * linker.c (_bfd_generic_link_output_symbols): Also check if the output section of an input section has been removed from the output file. * section.c (bfd_section_list_remove): Clear the next field of the removed section. (bfd_section_removed_from_list): New. * bfd-in2.h: Regenerated. --- bfd/ChangeLog | 11 +++++++++++ bfd/bfd-in2.h | 4 ++++ bfd/linker.c | 14 ++++++++------ bfd/section.c | 4 ++++ 4 files changed, 27 insertions(+), 6 deletions(-) diff --git a/bfd/ChangeLog b/bfd/ChangeLog index 7accdd9b0ed..365b7d931a9 100644 --- a/bfd/ChangeLog +++ b/bfd/ChangeLog @@ -1,3 +1,14 @@ +2005-04-11 H.J. Lu + + * linker.c (_bfd_generic_link_output_symbols): Also check if + the output section of an input section has been removed from + the output file. + + * section.c (bfd_section_list_remove): Clear the next field + of the removed section. + (bfd_section_removed_from_list): New. + * bfd-in2.h: Regenerated. + 2005-04-11 David S. Miller * elf32-sparc.c (elf32_sparc_relocate_section, diff --git a/bfd/bfd-in2.h b/bfd/bfd-in2.h index 626642045b2..bed224d34be 100644 --- a/bfd/bfd-in2.h +++ b/bfd/bfd-in2.h @@ -1445,6 +1445,8 @@ extern const struct bfd_symbol * const bfd_ind_symbol; *_ps = _s->next; \ if (_s->next == NULL) \ (ABFD)->section_tail = _ps; \ + else \ + _s->next = NULL; \ } \ while (0) #define bfd_section_list_insert(ABFD, PS, S) \ @@ -1458,6 +1460,8 @@ extern const struct bfd_symbol * const bfd_ind_symbol; (ABFD)->section_tail = &_s->next; \ } \ while (0) +#define bfd_section_removed_from_list(ABFD, S) \ + ((S)->next == NULL && &(S)->next != (ABFD)->section_tail) void bfd_section_list_clear (bfd *); diff --git a/bfd/linker.c b/bfd/linker.c index f940d321bd0..89630c0e2f0 100644 --- a/bfd/linker.c +++ b/bfd/linker.c @@ -2363,12 +2363,14 @@ _bfd_generic_link_output_symbols (bfd *output_bfd, abort (); /* If this symbol is in a section which is not being included - in the output file, then we don't want to output the symbol. - - Gross. .bss and similar sections won't have the linker_mark - field set. */ - if ((sym->section->flags & SEC_HAS_CONTENTS) != 0 - && ! sym->section->linker_mark) + in the output file, then we don't want to output the + symbol. .bss and similar sections won't have the linker_mark + field set. We also check if its output section has been + removed from the output file. */ + if (((sym->section->flags & SEC_HAS_CONTENTS) != 0 + && ! sym->section->linker_mark) + || bfd_section_removed_from_list (output_bfd, + sym->section->output_section)) output = FALSE; if (output) diff --git a/bfd/section.c b/bfd/section.c index 49a87035b74..914d1825007 100644 --- a/bfd/section.c +++ b/bfd/section.c @@ -546,6 +546,8 @@ CODE_FRAGMENT . *_ps = _s->next; \ . if (_s->next == NULL) \ . (ABFD)->section_tail = _ps; \ +. else \ +. _s->next = NULL; \ . } \ . while (0) .#define bfd_section_list_insert(ABFD, PS, S) \ @@ -559,6 +561,8 @@ CODE_FRAGMENT . (ABFD)->section_tail = &_s->next; \ . } \ . while (0) +.#define bfd_section_removed_from_list(ABFD, S) \ +. ((S)->next == NULL && &(S)->next != (ABFD)->section_tail) . */ -- 2.30.2