1999-07-23 Donn Terry <donn@interix.com>
* libcoff-in.h (coff_link_hash_entry): Add coff_link_hash_flags field, and define COFF_LINK_HASH_PE_SECTION_SYMBOL. * cofflink.c (coff_link_add_symbols): If PE, handle section symbols specially. * libcoff.h: Rebuild.
This commit is contained in:
parent
7d923127c0
commit
7fd9c19135
4 changed files with 52 additions and 5 deletions
|
@ -1,5 +1,11 @@
|
|||
1999-07-23 Donn Terry <donn@interix.com>
|
||||
|
||||
* libcoff-in.h (coff_link_hash_entry): Add coff_link_hash_flags
|
||||
field, and define COFF_LINK_HASH_PE_SECTION_SYMBOL.
|
||||
* cofflink.c (coff_link_add_symbols): If PE, handle section
|
||||
symbols specially.
|
||||
* libcoff.h: Rebuild.
|
||||
|
||||
* config.bfd (i[3456]86-*-interix*): New target.
|
||||
|
||||
1999-07-21 Mark Elbrecht <snowball3@bigfoot.com>
|
||||
|
|
|
@ -351,6 +351,7 @@ coff_link_add_symbols (abfd, info)
|
|||
flagword flags;
|
||||
asection *section;
|
||||
bfd_vma value;
|
||||
boolean addit;
|
||||
|
||||
/* This symbol is externally visible. */
|
||||
|
||||
|
@ -392,11 +393,41 @@ coff_link_add_symbols (abfd, info)
|
|||
|| (obj_pe (abfd) && sym.n_sclass == C_NT_WEAK))
|
||||
flags = BSF_WEAK;
|
||||
|
||||
if (! (bfd_coff_link_add_one_symbol
|
||||
(info, abfd, name, flags, section, value,
|
||||
(const char *) NULL, copy, false,
|
||||
(struct bfd_link_hash_entry **) sym_hash)))
|
||||
goto error_return;
|
||||
addit = true;
|
||||
|
||||
/* In the PE format, section symbols actually refer to the
|
||||
start of the output section. We handle them specially
|
||||
here. */
|
||||
if (obj_pe (abfd) && (flags & BSF_SECTION_SYM) != 0)
|
||||
{
|
||||
*sym_hash = coff_link_hash_lookup (coff_hash_table (info),
|
||||
name, false, copy, false);
|
||||
if (*sym_hash != NULL)
|
||||
{
|
||||
if (((*sym_hash)->coff_link_hash_flags
|
||||
& COFF_LINK_HASH_PE_SECTION_SYMBOL) == 0
|
||||
&& (*sym_hash)->root.type != bfd_link_hash_undefined
|
||||
&& (*sym_hash)->root.type != bfd_link_hash_undefweak)
|
||||
(*_bfd_error_handler)
|
||||
("Warning: symbol `%s' is both section and non-section",
|
||||
name);
|
||||
|
||||
addit = false;
|
||||
}
|
||||
}
|
||||
|
||||
if (addit)
|
||||
{
|
||||
if (! (bfd_coff_link_add_one_symbol
|
||||
(info, abfd, name, flags, section, value,
|
||||
(const char *) NULL, copy, false,
|
||||
(struct bfd_link_hash_entry **) sym_hash)))
|
||||
goto error_return;
|
||||
}
|
||||
|
||||
if (obj_pe (abfd) && (flags & BSF_SECTION_SYM) != 0)
|
||||
(*sym_hash)->coff_link_hash_flags |=
|
||||
COFF_LINK_HASH_PE_SECTION_SYMBOL;
|
||||
|
||||
if (section == bfd_com_section_ptr
|
||||
&& (*sym_hash)->root.type == bfd_link_hash_common
|
||||
|
|
|
@ -249,6 +249,11 @@ struct coff_link_hash_entry
|
|||
|
||||
/* Pointer to array of auxiliary entries, if any. */
|
||||
union internal_auxent *aux;
|
||||
|
||||
/* Flag word; legal values follow. */
|
||||
unsigned short coff_link_hash_flags;
|
||||
/* Symbol is a PE section symbol. */
|
||||
#define COFF_LINK_HASH_PE_SECTION_SYMBOL (01)
|
||||
};
|
||||
|
||||
/* COFF linker hash table. */
|
||||
|
|
|
@ -249,6 +249,11 @@ struct coff_link_hash_entry
|
|||
|
||||
/* Pointer to array of auxiliary entries, if any. */
|
||||
union internal_auxent *aux;
|
||||
|
||||
/* Flag word; legal values follow. */
|
||||
unsigned short coff_link_hash_flags;
|
||||
/* Symbol is a PE section symbol. */
|
||||
#define COFF_LINK_HASH_PE_SECTION_SYMBOL (01)
|
||||
};
|
||||
|
||||
/* COFF linker hash table. */
|
||||
|
|
Loading…
Reference in a new issue