* section.c (SEC_LINKER_MARK): Define.
* bfd-in2.h: Rebuild. * aoutx.h (NAME(aout,final_link)): Mark sections included in the link. (aout_link_input_bfd): Don't link unmarked sections. * cofflink.c (_bfd_coff_final_link): Mark sections included in the link. (_bfd_coff_link_input_bfd): Don't link unmarked sections. * coff-ppc.c (ppc_bfd_coff_final_link): Mark sections included in the link. * elflink.h (elf_bfd_final_link): Mark sections included in the link. (elf_link_input_bfd): Don't link unmarked sections. * xcofflink.c (_bfd_xcoff_bfd_final_link): Mark sections included in the link. (xcoff_link_input_bfd): Don't link unmarked sections.
This commit is contained in:
parent
cf2e4f5fde
commit
7ec49f9133
|
@ -1,5 +1,22 @@
|
||||||
Wed Mar 27 10:43:34 1996 Ian Lance Taylor <ian@cygnus.com>
|
Wed Mar 27 10:43:34 1996 Ian Lance Taylor <ian@cygnus.com>
|
||||||
|
|
||||||
|
* section.c (SEC_LINKER_MARK): Define.
|
||||||
|
* bfd-in2.h: Rebuild.
|
||||||
|
* aoutx.h (NAME(aout,final_link)): Mark sections included in the
|
||||||
|
link.
|
||||||
|
(aout_link_input_bfd): Don't link unmarked sections.
|
||||||
|
* cofflink.c (_bfd_coff_final_link): Mark sections included in the
|
||||||
|
link.
|
||||||
|
(_bfd_coff_link_input_bfd): Don't link unmarked sections.
|
||||||
|
* coff-ppc.c (ppc_bfd_coff_final_link): Mark sections included in
|
||||||
|
the link.
|
||||||
|
* elflink.h (elf_bfd_final_link): Mark sections included in the
|
||||||
|
link.
|
||||||
|
(elf_link_input_bfd): Don't link unmarked sections.
|
||||||
|
* xcofflink.c (_bfd_xcoff_bfd_final_link): Mark sections included
|
||||||
|
in the link.
|
||||||
|
(xcoff_link_input_bfd): Don't link unmarked sections.
|
||||||
|
|
||||||
* coffswap.h (coff_swap_scnhdr_out): Include section name in
|
* coffswap.h (coff_swap_scnhdr_out): Include section name in
|
||||||
overflow error messages.
|
overflow error messages.
|
||||||
|
|
||||||
|
|
74
bfd/aoutx.h
74
bfd/aoutx.h
|
@ -3681,6 +3681,19 @@ NAME(aout,final_link) (abfd, info, callback)
|
||||||
for (sub = info->input_bfds; sub != (bfd *) NULL; sub = sub->link_next)
|
for (sub = info->input_bfds; sub != (bfd *) NULL; sub = sub->link_next)
|
||||||
sub->output_has_begun = false;
|
sub->output_has_begun = false;
|
||||||
|
|
||||||
|
/* Mark all sections which are to be included in the link. This
|
||||||
|
will normally be every section. We need to do this so that we
|
||||||
|
can identify any sections which the linker has decided to not
|
||||||
|
include. */
|
||||||
|
for (o = abfd->sections; o != NULL; o = o->next)
|
||||||
|
{
|
||||||
|
for (p = o->link_order_head; p != NULL; p = p->next)
|
||||||
|
{
|
||||||
|
if (p->type == bfd_indirect_link_order)
|
||||||
|
p->u.indirect.section->flags |= SEC_LINKER_MARK;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
have_link_order_relocs = false;
|
have_link_order_relocs = false;
|
||||||
for (o = abfd->sections; o != (asection *) NULL; o = o->next)
|
for (o = abfd->sections; o != (asection *) NULL; o = o->next)
|
||||||
{
|
{
|
||||||
|
@ -3836,16 +3849,25 @@ aout_link_input_bfd (finfo, input_bfd)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
/* Relocate and write out the sections. These functions use the
|
/* Relocate and write out the sections. These functions use the
|
||||||
symbol map created by aout_link_write_symbols. */
|
symbol map created by aout_link_write_symbols. SEC_LINKER_MARK
|
||||||
if (! aout_link_input_section (finfo, input_bfd,
|
will be set if these sections are to be included in the link,
|
||||||
obj_textsec (input_bfd),
|
which will normally be the case. */
|
||||||
&finfo->treloff,
|
if ((obj_textsec (input_bfd)->flags & SEC_LINKER_MARK) != 0)
|
||||||
exec_hdr (input_bfd)->a_trsize)
|
{
|
||||||
|| ! aout_link_input_section (finfo, input_bfd,
|
if (! aout_link_input_section (finfo, input_bfd,
|
||||||
obj_datasec (input_bfd),
|
obj_textsec (input_bfd),
|
||||||
&finfo->dreloff,
|
&finfo->treloff,
|
||||||
exec_hdr (input_bfd)->a_drsize))
|
exec_hdr (input_bfd)->a_trsize))
|
||||||
return false;
|
return false;
|
||||||
|
}
|
||||||
|
if ((obj_datasec (input_bfd)->flags & SEC_LINKER_MARK) != 0)
|
||||||
|
{
|
||||||
|
if (! aout_link_input_section (finfo, input_bfd,
|
||||||
|
obj_datasec (input_bfd),
|
||||||
|
&finfo->dreloff,
|
||||||
|
exec_hdr (input_bfd)->a_drsize))
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
/* If we are not keeping memory, we don't need the symbols any
|
/* If we are not keeping memory, we don't need the symbols any
|
||||||
longer. We still need them if we are keeping memory, because the
|
longer. We still need them if we are keeping memory, because the
|
||||||
|
@ -3972,6 +3994,11 @@ aout_link_write_symbols (finfo, input_bfd)
|
||||||
external symbol. */
|
external symbol. */
|
||||||
h = *sym_hash;
|
h = *sym_hash;
|
||||||
|
|
||||||
|
/* Use the name from the hash table, in case the symbol was
|
||||||
|
wrapped. */
|
||||||
|
if (h != NULL)
|
||||||
|
name = h->root.root.string;
|
||||||
|
|
||||||
/* If this is an indirect or warning symbol, then change
|
/* If this is an indirect or warning symbol, then change
|
||||||
hresolve to the base symbol. We also change *sym_hash so
|
hresolve to the base symbol. We also change *sym_hash so
|
||||||
that the relocation routines relocate against the real
|
that the relocation routines relocate against the real
|
||||||
|
@ -4862,16 +4889,19 @@ aout_link_input_section_std (finfo, input_bfd, input_section, relocs,
|
||||||
{
|
{
|
||||||
const char *name;
|
const char *name;
|
||||||
|
|
||||||
name = strings + GET_WORD (input_bfd, syms[r_index].e_strx);
|
if (h != NULL)
|
||||||
|
name = h->root.root.string;
|
||||||
|
else
|
||||||
|
name = strings + GET_WORD (input_bfd, syms[r_index].e_strx);
|
||||||
if (! ((*finfo->info->callbacks->undefined_symbol)
|
if (! ((*finfo->info->callbacks->undefined_symbol)
|
||||||
(finfo->info, name, input_bfd, input_section, r_addr)))
|
(finfo->info, name, input_bfd, input_section, r_addr)))
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
r = MY_final_link_relocate (howto,
|
r = MY_final_link_relocate (howto,
|
||||||
input_bfd, input_section,
|
input_bfd, input_section,
|
||||||
contents, r_addr, relocation,
|
contents, r_addr, relocation,
|
||||||
(bfd_vma) 0);
|
(bfd_vma) 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (r != bfd_reloc_ok)
|
if (r != bfd_reloc_ok)
|
||||||
|
@ -5246,16 +5276,19 @@ aout_link_input_section_ext (finfo, input_bfd, input_section, relocs,
|
||||||
{
|
{
|
||||||
const char *name;
|
const char *name;
|
||||||
|
|
||||||
name = strings + GET_WORD (input_bfd, syms[r_index].e_strx);
|
if (h != NULL)
|
||||||
|
name = h->root.root.string;
|
||||||
|
else
|
||||||
|
name = strings + GET_WORD (input_bfd, syms[r_index].e_strx);
|
||||||
if (! ((*finfo->info->callbacks->undefined_symbol)
|
if (! ((*finfo->info->callbacks->undefined_symbol)
|
||||||
(finfo->info, name, input_bfd, input_section, r_addr)))
|
(finfo->info, name, input_bfd, input_section, r_addr)))
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
r = MY_final_link_relocate (howto_table_ext + r_type,
|
r = MY_final_link_relocate (howto_table_ext + r_type,
|
||||||
input_bfd, input_section,
|
input_bfd, input_section,
|
||||||
contents, r_addr, relocation,
|
contents, r_addr, relocation,
|
||||||
r_addend);
|
r_addend);
|
||||||
if (r != bfd_reloc_ok)
|
if (r != bfd_reloc_ok)
|
||||||
{
|
{
|
||||||
switch (r)
|
switch (r)
|
||||||
|
@ -5330,8 +5363,9 @@ aout_link_reloc_link_order (finfo, o, p)
|
||||||
|
|
||||||
BFD_ASSERT (p->type == bfd_symbol_reloc_link_order);
|
BFD_ASSERT (p->type == bfd_symbol_reloc_link_order);
|
||||||
r_extern = 1;
|
r_extern = 1;
|
||||||
h = aout_link_hash_lookup (aout_hash_table (finfo->info),
|
h = ((struct aout_link_hash_entry *)
|
||||||
pr->u.name, false, false, true);
|
bfd_wrapped_link_hash_lookup (finfo->output_bfd, finfo->info,
|
||||||
|
pr->u.name, false, false, true));
|
||||||
if (h != (struct aout_link_hash_entry *) NULL
|
if (h != (struct aout_link_hash_entry *) NULL
|
||||||
&& h->indx >= 0)
|
&& h->indx >= 0)
|
||||||
r_index = h->indx;
|
r_index = h->indx;
|
||||||
|
|
|
@ -333,6 +333,10 @@ typedef struct _symbol_info
|
||||||
short stab_desc; /* Stab desc. */
|
short stab_desc; /* Stab desc. */
|
||||||
CONST char *stab_name; /* String for stab type. */
|
CONST char *stab_name; /* String for stab type. */
|
||||||
} symbol_info;
|
} symbol_info;
|
||||||
|
|
||||||
|
/* Get the name of a stabs type code. */
|
||||||
|
|
||||||
|
extern const char *bfd_get_stab_name PARAMS ((int));
|
||||||
|
|
||||||
/* Hash table routines. There is no way to free up a hash table. */
|
/* Hash table routines. There is no way to free up a hash table. */
|
||||||
|
|
||||||
|
@ -613,7 +617,9 @@ extern boolean bfd_sunos_size_dynamic_sections
|
||||||
|
|
||||||
/* Linux shared library support routines for the linker. */
|
/* Linux shared library support routines for the linker. */
|
||||||
|
|
||||||
extern boolean bfd_linux_size_dynamic_sections
|
extern boolean bfd_i386linux_size_dynamic_sections
|
||||||
|
PARAMS ((bfd *, struct bfd_link_info *));
|
||||||
|
extern boolean bfd_m68klinux_size_dynamic_sections
|
||||||
PARAMS ((bfd *, struct bfd_link_info *));
|
PARAMS ((bfd *, struct bfd_link_info *));
|
||||||
|
|
||||||
/* mmap hacks */
|
/* mmap hacks */
|
||||||
|
@ -885,6 +891,10 @@ typedef struct sec
|
||||||
table. */
|
table. */
|
||||||
#define SEC_SORT_ENTRIES 0x80000
|
#define SEC_SORT_ENTRIES 0x80000
|
||||||
|
|
||||||
|
/* A mark flag used by some of the linker backends. This
|
||||||
|
should not be set by application code. */
|
||||||
|
#define SEC_LINKER_MARK 0x100000
|
||||||
|
|
||||||
/* End of section flags. */
|
/* End of section flags. */
|
||||||
|
|
||||||
/* The virtual memory address of the section - where it will be
|
/* The virtual memory address of the section - where it will be
|
||||||
|
|
|
@ -2745,6 +2745,12 @@ ppc_bfd_coff_final_link (abfd, info)
|
||||||
|
|
||||||
sec = p->u.indirect.section;
|
sec = p->u.indirect.section;
|
||||||
|
|
||||||
|
/* Mark all sections which are to be included in the
|
||||||
|
link. This will normally be every section. We need
|
||||||
|
to do this so that we can identify any sections which
|
||||||
|
the linker has decided to not include. */
|
||||||
|
sec->flags |= SEC_LINKER_MARK;
|
||||||
|
|
||||||
if (info->strip == strip_none
|
if (info->strip == strip_none
|
||||||
|| info->strip == strip_some)
|
|| info->strip == strip_some)
|
||||||
o->lineno_count += sec->lineno_count;
|
o->lineno_count += sec->lineno_count;
|
||||||
|
@ -2920,7 +2926,7 @@ ppc_bfd_coff_final_link (abfd, info)
|
||||||
if (! sub->output_has_begun)
|
if (! sub->output_has_begun)
|
||||||
#endif
|
#endif
|
||||||
{
|
{
|
||||||
if (! coff_link_input_bfd (&finfo, sub))
|
if (! _bfd_coff_link_input_bfd (&finfo, sub))
|
||||||
goto error_return;
|
goto error_return;
|
||||||
sub->output_has_begun = true;
|
sub->output_has_begun = true;
|
||||||
}
|
}
|
||||||
|
@ -2928,7 +2934,7 @@ ppc_bfd_coff_final_link (abfd, info)
|
||||||
else if (p->type == bfd_section_reloc_link_order
|
else if (p->type == bfd_section_reloc_link_order
|
||||||
|| p->type == bfd_symbol_reloc_link_order)
|
|| p->type == bfd_symbol_reloc_link_order)
|
||||||
{
|
{
|
||||||
if (! coff_reloc_link_order (abfd, &finfo, o, p))
|
if (! _bfd_coff_reloc_link_order (abfd, &finfo, o, p))
|
||||||
goto error_return;
|
goto error_return;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
@ -2945,14 +2951,14 @@ ppc_bfd_coff_final_link (abfd, info)
|
||||||
bfd* last_one = ppc_get_last();
|
bfd* last_one = ppc_get_last();
|
||||||
if (last_one)
|
if (last_one)
|
||||||
{
|
{
|
||||||
if (! coff_link_input_bfd (&finfo, last_one))
|
if (! _bfd_coff_link_input_bfd (&finfo, last_one))
|
||||||
goto error_return;
|
goto error_return;
|
||||||
}
|
}
|
||||||
last_one->output_has_begun = true;
|
last_one->output_has_begun = true;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* Free up the buffers used by coff_link_input_bfd. */
|
/* Free up the buffers used by _bfd_coff_link_input_bfd. */
|
||||||
|
|
||||||
coff_debug_merge_hash_table_free (&finfo.debug_merge);
|
coff_debug_merge_hash_table_free (&finfo.debug_merge);
|
||||||
debug_merge_allocated = false;
|
debug_merge_allocated = false;
|
||||||
|
@ -3012,12 +3018,12 @@ ppc_bfd_coff_final_link (abfd, info)
|
||||||
|
|
||||||
/* Write out the global symbols. */
|
/* Write out the global symbols. */
|
||||||
finfo.failed = false;
|
finfo.failed = false;
|
||||||
coff_link_hash_traverse (coff_hash_table (info), coff_write_global_sym,
|
coff_link_hash_traverse (coff_hash_table (info), _bfd_coff_write_global_sym,
|
||||||
(PTR) &finfo);
|
(PTR) &finfo);
|
||||||
if (finfo.failed)
|
if (finfo.failed)
|
||||||
goto error_return;
|
goto error_return;
|
||||||
|
|
||||||
/* The outsyms buffer is used by coff_write_global_sym. */
|
/* The outsyms buffer is used by _bfd_coff_write_global_sym. */
|
||||||
if (finfo.outsyms != NULL)
|
if (finfo.outsyms != NULL)
|
||||||
{
|
{
|
||||||
free (finfo.outsyms);
|
free (finfo.outsyms);
|
||||||
|
|
|
@ -485,13 +485,18 @@ _bfd_coff_final_link (abfd, info)
|
||||||
o->lineno_count = 0;
|
o->lineno_count = 0;
|
||||||
for (p = o->link_order_head; p != NULL; p = p->next)
|
for (p = o->link_order_head; p != NULL; p = p->next)
|
||||||
{
|
{
|
||||||
|
|
||||||
if (p->type == bfd_indirect_link_order)
|
if (p->type == bfd_indirect_link_order)
|
||||||
{
|
{
|
||||||
asection *sec;
|
asection *sec;
|
||||||
|
|
||||||
sec = p->u.indirect.section;
|
sec = p->u.indirect.section;
|
||||||
|
|
||||||
|
/* Mark all sections which are to be included in the
|
||||||
|
link. This will normally be every section. We need
|
||||||
|
to do this so that we can identify any sections which
|
||||||
|
the linker has decided to not include. */
|
||||||
|
sec->flags |= SEC_LINKER_MARK;
|
||||||
|
|
||||||
if (info->strip == strip_none
|
if (info->strip == strip_none
|
||||||
|| info->strip == strip_some)
|
|| info->strip == strip_some)
|
||||||
o->lineno_count += sec->lineno_count;
|
o->lineno_count += sec->lineno_count;
|
||||||
|
@ -1079,11 +1084,11 @@ _bfd_coff_link_input_bfd (finfo, input_bfd)
|
||||||
output_index = syment_base;
|
output_index = syment_base;
|
||||||
outsym = finfo->outsyms;
|
outsym = finfo->outsyms;
|
||||||
|
|
||||||
if (coff_data(output_bfd)->pe)
|
if (coff_data (output_bfd)->pe)
|
||||||
{
|
{
|
||||||
if (!process_embedded_commands (output_bfd, finfo->info, input_bfd))
|
if (! process_embedded_commands (output_bfd, finfo->info, input_bfd))
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
while (esym < esym_end)
|
while (esym < esym_end)
|
||||||
{
|
{
|
||||||
|
@ -1196,9 +1201,9 @@ _bfd_coff_link_input_bfd (finfo, input_bfd)
|
||||||
|
|
||||||
/* Ignore fake names invented by compiler; treat them all as
|
/* Ignore fake names invented by compiler; treat them all as
|
||||||
the same name. */
|
the same name. */
|
||||||
if (*name == '~' || *name == '.'
|
if (*name == '~' || *name == '.' || *name == '$'
|
||||||
|| (*name == bfd_get_symbol_leading_char (input_bfd)
|
|| (*name == bfd_get_symbol_leading_char (input_bfd)
|
||||||
&& (name[1] == '~' || name[1] == '.')))
|
&& (name[1] == '~' || name[1] == '.' || name[1] == '$')))
|
||||||
name = "";
|
name = "";
|
||||||
|
|
||||||
mh = coff_debug_merge_hash_lookup (&finfo->debug_merge, name,
|
mh = coff_debug_merge_hash_lookup (&finfo->debug_merge, name,
|
||||||
|
@ -1551,7 +1556,9 @@ _bfd_coff_link_input_bfd (finfo, input_bfd)
|
||||||
the index of the next symbol we are going
|
the index of the next symbol we are going
|
||||||
to include. I don't know if this is
|
to include. I don't know if this is
|
||||||
entirely right. */
|
entirely right. */
|
||||||
while (finfo->sym_indices[indx] < 0
|
while ((finfo->sym_indices[indx] < 0
|
||||||
|
|| ((bfd_size_type) finfo->sym_indices[indx]
|
||||||
|
< syment_base))
|
||||||
&& indx < obj_raw_syment_count (input_bfd))
|
&& indx < obj_raw_syment_count (input_bfd))
|
||||||
++indx;
|
++indx;
|
||||||
if (indx >= obj_raw_syment_count (input_bfd))
|
if (indx >= obj_raw_syment_count (input_bfd))
|
||||||
|
@ -1743,6 +1750,12 @@ _bfd_coff_link_input_bfd (finfo, input_bfd)
|
||||||
{
|
{
|
||||||
bfd_byte *contents;
|
bfd_byte *contents;
|
||||||
|
|
||||||
|
if ((o->flags & SEC_LINKER_MARK) == 0)
|
||||||
|
{
|
||||||
|
/* This section was omitted from the link. */
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
if ((o->flags & SEC_HAS_CONTENTS) == 0)
|
if ((o->flags & SEC_HAS_CONTENTS) == 0)
|
||||||
{
|
{
|
||||||
if ((o->flags & SEC_RELOC) != 0
|
if ((o->flags & SEC_RELOC) != 0
|
||||||
|
@ -2126,9 +2139,10 @@ _bfd_coff_reloc_link_order (output_bfd, finfo, output_section, link_order)
|
||||||
{
|
{
|
||||||
struct coff_link_hash_entry *h;
|
struct coff_link_hash_entry *h;
|
||||||
|
|
||||||
h = coff_link_hash_lookup (coff_hash_table (finfo->info),
|
h = ((struct coff_link_hash_entry *)
|
||||||
link_order->u.reloc.p->u.name,
|
bfd_wrapped_link_hash_lookup (output_bfd, finfo->info,
|
||||||
false, false, true);
|
link_order->u.reloc.p->u.name,
|
||||||
|
false, false, true));
|
||||||
if (h != NULL)
|
if (h != NULL)
|
||||||
{
|
{
|
||||||
if (h->indx >= 0)
|
if (h->indx >= 0)
|
||||||
|
|
|
@ -1798,6 +1798,12 @@ elf_bfd_final_link (abfd, info)
|
||||||
|
|
||||||
sec = p->u.indirect.section;
|
sec = p->u.indirect.section;
|
||||||
|
|
||||||
|
/* Mark all sections which are to be included in the
|
||||||
|
link. This will normally be every section. We need
|
||||||
|
to do this so that we can identify any sections which
|
||||||
|
the linker has decided to not include. */
|
||||||
|
sec->flags |= SEC_LINKER_MARK;
|
||||||
|
|
||||||
if (info->relocateable)
|
if (info->relocateable)
|
||||||
o->reloc_count += sec->reloc_count;
|
o->reloc_count += sec->reloc_count;
|
||||||
|
|
||||||
|
@ -2805,6 +2811,12 @@ elf_link_input_bfd (finfo, input_bfd)
|
||||||
/* Relocate the contents of each section. */
|
/* Relocate the contents of each section. */
|
||||||
for (o = input_bfd->sections; o != NULL; o = o->next)
|
for (o = input_bfd->sections; o != NULL; o = o->next)
|
||||||
{
|
{
|
||||||
|
if ((o->flags & SEC_LINKER_MARK) == 0)
|
||||||
|
{
|
||||||
|
/* This section was omitted from the link. */
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
if ((o->flags & SEC_HAS_CONTENTS) == 0)
|
if ((o->flags & SEC_HAS_CONTENTS) == 0)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/* Object file "section" support for the BFD library.
|
/* Object file "section" support for the BFD library.
|
||||||
Copyright (C) 1990, 1991, 1992, 1993, 1996 Free Software Foundation, Inc.
|
Copyright (C) 1990, 91, 92, 93, 94, 95, 1996 Free Software Foundation, Inc.
|
||||||
Written by Cygnus Support.
|
Written by Cygnus Support.
|
||||||
|
|
||||||
This file is part of BFD, the Binary File Descriptor library.
|
This file is part of BFD, the Binary File Descriptor library.
|
||||||
|
@ -269,6 +269,10 @@ CODE_FRAGMENT
|
||||||
. table. *}
|
. table. *}
|
||||||
.#define SEC_SORT_ENTRIES 0x80000
|
.#define SEC_SORT_ENTRIES 0x80000
|
||||||
.
|
.
|
||||||
|
. {* A mark flag used by some of the linker backends. This
|
||||||
|
. should not be set by application code. *}
|
||||||
|
.#define SEC_LINKER_MARK 0x100000
|
||||||
|
.
|
||||||
. {* End of section flags. *}
|
. {* End of section flags. *}
|
||||||
.
|
.
|
||||||
. {* The virtual memory address of the section - where it will be
|
. {* The virtual memory address of the section - where it will be
|
||||||
|
|
|
@ -3217,6 +3217,12 @@ _bfd_xcoff_bfd_final_link (abfd, info)
|
||||||
|
|
||||||
sec = p->u.indirect.section;
|
sec = p->u.indirect.section;
|
||||||
|
|
||||||
|
/* Mark all sections which are to be included in the
|
||||||
|
link. This will normally be every section. We need
|
||||||
|
to do this so that we can identify any sections which
|
||||||
|
the linker has decided to not include. */
|
||||||
|
sec->flags |= SEC_LINKER_MARK;
|
||||||
|
|
||||||
if (info->strip == strip_none
|
if (info->strip == strip_none
|
||||||
|| info->strip == strip_some)
|
|| info->strip == strip_some)
|
||||||
o->lineno_count += sec->lineno_count;
|
o->lineno_count += sec->lineno_count;
|
||||||
|
@ -4571,6 +4577,12 @@ xcoff_link_input_bfd (finfo, input_bfd)
|
||||||
{
|
{
|
||||||
bfd_byte *contents;
|
bfd_byte *contents;
|
||||||
|
|
||||||
|
if ((o->flags & SEC_LINKER_MARK) == 0)
|
||||||
|
{
|
||||||
|
/* This section was omitted from the link. */
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
if ((o->flags & SEC_HAS_CONTENTS) == 0
|
if ((o->flags & SEC_HAS_CONTENTS) == 0
|
||||||
|| o->_raw_size == 0
|
|| o->_raw_size == 0
|
||||||
|| (o->flags & SEC_IN_MEMORY) != 0)
|
|| (o->flags & SEC_IN_MEMORY) != 0)
|
||||||
|
|
Loading…
Reference in New Issue