mirror of
https://sourceware.org/git/binutils-gdb.git
synced 2024-11-27 12:03:41 +08:00
1999-09-06 Donn Terry <donn@interix.com>
* section.c (struct bfd_comdat_info): Define. (asection): Add comdat field. (STD_SECTION): Initialize comdat field. (bfd_make_section_anyway): Likewise. * bfd-in2.h: Rebuild.
This commit is contained in:
parent
0d271c1a5e
commit
022a5af495
@ -1,3 +1,11 @@
|
||||
1999-09-06 Donn Terry <donn@interix.com>
|
||||
|
||||
* section.c (struct bfd_comdat_info): Define.
|
||||
(asection): Add comdat field.
|
||||
(STD_SECTION): Initialize comdat field.
|
||||
(bfd_make_section_anyway): Likewise.
|
||||
* bfd-in2.h: Rebuild.
|
||||
|
||||
1999-09-06 Andreas Schwab <schwab@suse.de>
|
||||
|
||||
* elflink.h (elf_link_add_object_symbols): Copy NON_GOT_REF flag
|
||||
|
@ -847,6 +847,27 @@ bfd_make_readable PARAMS ((bfd *abfd));
|
||||
#define bfd_h_get_signed_64(abfd, ptr) \
|
||||
BFD_SEND(abfd, bfd_h_getx_signed_64, (ptr))
|
||||
|
||||
/* This structure is used for a comdat section, as in PE. A comdat
|
||||
section is associated with a particular symbol. When the linker
|
||||
sees a comdat section, it keeps only one of the sections with a
|
||||
given name and associated with a given symbol. */
|
||||
|
||||
struct bfd_comdat_info
|
||||
{
|
||||
/* The name of the symbol associated with a comdat section. */
|
||||
const char *name;
|
||||
|
||||
/* The local symbol table index of the symbol associated with a
|
||||
comdat section. This is only meaningful to the object file format
|
||||
specific code; it is not an index into the list returned by
|
||||
bfd_canonicalize_symtab. */
|
||||
long symbol;
|
||||
|
||||
/* If this section is being discarded, the linker uses this field
|
||||
to point to the input section which is being kept. */
|
||||
struct sec *sec;
|
||||
};
|
||||
|
||||
typedef struct sec
|
||||
{
|
||||
/* The name of the section; the name isn't a copy, the pointer is
|
||||
@ -1118,6 +1139,10 @@ typedef struct sec
|
||||
|
||||
unsigned int lineno_count;
|
||||
|
||||
/* Optional information about a COMDAT entry; NULL if not COMDAT */
|
||||
|
||||
struct bfd_comdat_info *comdat;
|
||||
|
||||
/* When a section is being output, this value changes as more
|
||||
linenumbers are written out */
|
||||
|
||||
|
@ -150,6 +150,27 @@ SUBSECTION
|
||||
|
||||
CODE_FRAGMENT
|
||||
.
|
||||
. {* This structure is used for a comdat section, as in PE. A comdat
|
||||
. section is associated with a particular symbol. When the linker
|
||||
. sees a comdat section, it keeps only one of the sections with a
|
||||
. given name and associated with a given symbol. *}
|
||||
.
|
||||
.struct bfd_comdat_info
|
||||
.{
|
||||
. {* The name of the symbol associated with a comdat section. *}
|
||||
. const char *name;
|
||||
.
|
||||
. {* The local symbol table index of the symbol associated with a
|
||||
. comdat section. This is only meaningful to the object file format
|
||||
. specific code; it is not an index into the list returned by
|
||||
. bfd_canonicalize_symtab. *}
|
||||
. long symbol;
|
||||
.
|
||||
. {* If this section is being discarded, the linker uses this field
|
||||
. to point to the input section which is being kept. *}
|
||||
. struct sec *sec;
|
||||
.};
|
||||
.
|
||||
.typedef struct sec
|
||||
.{
|
||||
. {* The name of the section; the name isn't a copy, the pointer is
|
||||
@ -421,6 +442,10 @@ CODE_FRAGMENT
|
||||
.
|
||||
. unsigned int lineno_count;
|
||||
.
|
||||
. {* Optional information about a COMDAT entry; NULL if not COMDAT *}
|
||||
.
|
||||
. struct bfd_comdat_info *comdat;
|
||||
.
|
||||
. {* When a section is being output, this value changes as more
|
||||
. linenumbers are written out *}
|
||||
.
|
||||
@ -511,9 +536,27 @@ static const asymbol global_syms[] =
|
||||
#define STD_SECTION(SEC, FLAGS, SYM, NAME, IDX) \
|
||||
const asymbol * const SYM = (asymbol *) &global_syms[IDX]; \
|
||||
const asection SEC = \
|
||||
{ NAME, 0, 0, FLAGS, 0, 0, 0, 0, 0, 0, 0, 0, 0, (asection *) &SEC, \
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
|
||||
(asymbol *) &global_syms[IDX], (asymbol **) &SYM, 0, 0 }
|
||||
/* name, index, next, flags, set_vma, reloc_done, linker_mark, gc_mark */ \
|
||||
{ NAME, 0, 0, FLAGS, 0, 0, 0, 0, \
|
||||
\
|
||||
/* vma, lma, _cooked_size, _raw_size, output_offset, output_section, */ \
|
||||
0, 0, 0, 0, 0, (struct sec *) &SEC, \
|
||||
\
|
||||
/* alig..., reloc..., orel..., reloc_count, filepos, rel_..., line_... */ \
|
||||
0, 0, 0, 0, 0, 0, 0, \
|
||||
\
|
||||
/* userdata, contents, lineno, lineno_count */ \
|
||||
0, 0, 0, 0, \
|
||||
\
|
||||
/* comdat_info, moving_line_filepos, target_index, used_by_bfd, */ \
|
||||
NULL, 0, 0, 0, \
|
||||
\
|
||||
/* cons..., owner, symbol */ \
|
||||
0, 0, (struct symbol_cache_entry *) &global_syms[IDX], \
|
||||
\
|
||||
/* symbol_ptr_ptr, link_order_head, ..._tail */ \
|
||||
(struct symbol_cache_entry **) &SYM, 0, 0 \
|
||||
}
|
||||
|
||||
STD_SECTION (bfd_com_section, SEC_IS_COMMON, bfd_com_symbol,
|
||||
BFD_COM_SECTION_NAME, 0);
|
||||
@ -656,6 +699,7 @@ bfd_make_section_anyway (abfd, name)
|
||||
newsect->reloc_count = 0;
|
||||
newsect->line_filepos = 0;
|
||||
newsect->owner = abfd;
|
||||
newsect->comdat = NULL;
|
||||
|
||||
/* Create a symbol whos only job is to point to this section. This is
|
||||
useful for things like relocs which are relative to the base of a
|
||||
|
Loading…
Reference in New Issue
Block a user