2005-04-11 H.J. Lu <hongjiu.lu@intel.com>

* 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.
This commit is contained in:
H.J. Lu
2005-04-11 22:21:23 +00:00
parent bd695bcc90
commit ab82c5b97f
4 changed files with 27 additions and 6 deletions

View File

@ -1,3 +1,14 @@
2005-04-11 H.J. Lu <hongjiu.lu@intel.com>
* 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 <davem@davemloft.net> 2005-04-11 David S. Miller <davem@davemloft.net>
* elf32-sparc.c (elf32_sparc_relocate_section, * elf32-sparc.c (elf32_sparc_relocate_section,

View File

@ -1445,6 +1445,8 @@ extern const struct bfd_symbol * const bfd_ind_symbol;
*_ps = _s->next; \ *_ps = _s->next; \
if (_s->next == NULL) \ if (_s->next == NULL) \
(ABFD)->section_tail = _ps; \ (ABFD)->section_tail = _ps; \
else \
_s->next = NULL; \
} \ } \
while (0) while (0)
#define bfd_section_list_insert(ABFD, PS, S) \ #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; \ (ABFD)->section_tail = &_s->next; \
} \ } \
while (0) while (0)
#define bfd_section_removed_from_list(ABFD, S) \
((S)->next == NULL && &(S)->next != (ABFD)->section_tail)
void bfd_section_list_clear (bfd *); void bfd_section_list_clear (bfd *);

View File

@ -2363,12 +2363,14 @@ _bfd_generic_link_output_symbols (bfd *output_bfd,
abort (); abort ();
/* If this symbol is in a section which is not being included /* 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. in the output file, then we don't want to output the
symbol. .bss and similar sections won't have the linker_mark
Gross. .bss and similar sections won't have the linker_mark field set. We also check if its output section has been
field set. */ removed from the output file. */
if ((sym->section->flags & SEC_HAS_CONTENTS) != 0 if (((sym->section->flags & SEC_HAS_CONTENTS) != 0
&& ! sym->section->linker_mark) && ! sym->section->linker_mark)
|| bfd_section_removed_from_list (output_bfd,
sym->section->output_section))
output = FALSE; output = FALSE;
if (output) if (output)

View File

@ -546,6 +546,8 @@ CODE_FRAGMENT
. *_ps = _s->next; \ . *_ps = _s->next; \
. if (_s->next == NULL) \ . if (_s->next == NULL) \
. (ABFD)->section_tail = _ps; \ . (ABFD)->section_tail = _ps; \
. else \
. _s->next = NULL; \
. } \ . } \
. while (0) . while (0)
.#define bfd_section_list_insert(ABFD, PS, S) \ .#define bfd_section_list_insert(ABFD, PS, S) \
@ -559,6 +561,8 @@ CODE_FRAGMENT
. (ABFD)->section_tail = &_s->next; \ . (ABFD)->section_tail = &_s->next; \
. } \ . } \
. while (0) . while (0)
.#define bfd_section_removed_from_list(ABFD, S) \
. ((S)->next == NULL && &(S)->next != (ABFD)->section_tail)
. .
*/ */