2005-07-25 H.J. Lu <hongjiu.lu@intel.com>
* elf-bfd.h (elf_backend_data): Add common_definition, common_section_index, common_section, and merge_symbol. (_bfd_elf_common_definition): New. (_bfd_elf_common_section_index): New. (_bfd_elf_common_section): New. * elf.c (elf_fake_sections): Don't clear sh_flags. * elflink.c (_bfd_elf_merge_symbol): Call backend merge_symbol if it is available. (is_global_data_symbol_definition): Call backend common_definition instead of checking SHN_COMMON. (elf_link_add_object_symbols): Likewise. (elf_link_output_extsym): Call backend common_section_index for common section index. (_bfd_elf_common_definition): New. (_bfd_elf_common_section_index): New. (_bfd_elf_common_section): New. * elfxx-target.h (elf_backend_common_definition): New. (elf_backend_common_section_index): New. (elf_backend_common_section): New. (elf_backend_merge_symbol): New. (elfNN_bed): Initialize common_definition, common_section_index, common_section, and merge_symbol. * section.c (BFD_FAKE_SECTION): New. (STD_SECTION): Use it. * bfd-in2.h: Regenerated.
This commit is contained in:
parent
40afd87930
commit
a4d8e49b50
7 changed files with 214 additions and 50 deletions
|
@ -635,6 +635,47 @@ CODE_FRAGMENT
|
|||
.#define bfd_section_removed_from_list(ABFD, S) \
|
||||
. ((S)->next == NULL ? (ABFD)->section_last != (S) : (S)->next->prev != (S))
|
||||
.
|
||||
.#define BFD_FAKE_SECTION(SEC, FLAGS, SYM, SYM_PTR, NAME, IDX) \
|
||||
. {* name, id, index, next, prev, flags, user_set_vma, *} \
|
||||
. { NAME, IDX, 0, NULL, NULL, FLAGS, 0, \
|
||||
. \
|
||||
. {* linker_mark, linker_has_input, gc_mark, gc_mark_from_eh, *} \
|
||||
. 0, 0, 1, 0, \
|
||||
. \
|
||||
. {* segment_mark, sec_info_type, use_rela_p, has_tls_reloc, *} \
|
||||
. 0, 0, 0, 0, \
|
||||
. \
|
||||
. {* has_gp_reloc, need_finalize_relax, reloc_done, *} \
|
||||
. 0, 0, 0, \
|
||||
. \
|
||||
. {* vma, lma, size, rawsize *} \
|
||||
. 0, 0, 0, 0, \
|
||||
. \
|
||||
. {* output_offset, output_section, alignment_power, *} \
|
||||
. 0, (struct bfd_section *) &SEC, 0, \
|
||||
. \
|
||||
. {* relocation, orelocation, reloc_count, filepos, rel_filepos, *} \
|
||||
. NULL, NULL, 0, 0, 0, \
|
||||
. \
|
||||
. {* line_filepos, userdata, contents, lineno, lineno_count, *} \
|
||||
. 0, NULL, NULL, NULL, 0, \
|
||||
. \
|
||||
. {* entsize, kept_section, moving_line_filepos, *} \
|
||||
. 0, NULL, 0, \
|
||||
. \
|
||||
. {* target_index, used_by_bfd, constructor_chain, owner, *} \
|
||||
. 0, NULL, NULL, NULL, \
|
||||
. \
|
||||
. {* symbol, *} \
|
||||
. (struct bfd_symbol *) SYM, \
|
||||
. \
|
||||
. {* symbol_ptr_ptr, *} \
|
||||
. (struct bfd_symbol **) SYM_PTR, \
|
||||
. \
|
||||
. {* map_head, map_tail *} \
|
||||
. { NULL }, { NULL } \
|
||||
. }
|
||||
.
|
||||
*/
|
||||
|
||||
/* We use a macro to initialize the static asymbol structures because
|
||||
|
@ -662,46 +703,8 @@ static const asymbol global_syms[] =
|
|||
|
||||
#define STD_SECTION(SEC, FLAGS, SYM, NAME, IDX) \
|
||||
const asymbol * const SYM = (asymbol *) &global_syms[IDX]; \
|
||||
asection SEC = \
|
||||
/* name, id, index, next, prev, flags, user_set_vma, */ \
|
||||
{ NAME, IDX, 0, NULL, NULL, FLAGS, 0, \
|
||||
\
|
||||
/* linker_mark, linker_has_input, gc_mark, gc_mark_from_eh, */ \
|
||||
0, 0, 1, 0, \
|
||||
\
|
||||
/* segment_mark, sec_info_type, use_rela_p, has_tls_reloc, */ \
|
||||
0, 0, 0, 0, \
|
||||
\
|
||||
/* has_gp_reloc, need_finalize_relax, reloc_done, */ \
|
||||
0, 0, 0, \
|
||||
\
|
||||
/* vma, lma, size, rawsize */ \
|
||||
0, 0, 0, 0, \
|
||||
\
|
||||
/* output_offset, output_section, alignment_power, */ \
|
||||
0, (struct bfd_section *) &SEC, 0, \
|
||||
\
|
||||
/* relocation, orelocation, reloc_count, filepos, rel_filepos, */ \
|
||||
NULL, NULL, 0, 0, 0, \
|
||||
\
|
||||
/* line_filepos, userdata, contents, lineno, lineno_count, */ \
|
||||
0, NULL, NULL, NULL, 0, \
|
||||
\
|
||||
/* entsize, kept_section, moving_line_filepos, */ \
|
||||
0, NULL, 0, \
|
||||
\
|
||||
/* target_index, used_by_bfd, constructor_chain, owner, */ \
|
||||
0, NULL, NULL, NULL, \
|
||||
\
|
||||
/* symbol, */ \
|
||||
(struct bfd_symbol *) &global_syms[IDX], \
|
||||
\
|
||||
/* symbol_ptr_ptr, */ \
|
||||
(struct bfd_symbol **) &SYM, \
|
||||
\
|
||||
/* map_head, map_tail */ \
|
||||
{ NULL }, { NULL } \
|
||||
}
|
||||
asection SEC = BFD_FAKE_SECTION(SEC, FLAGS, &global_syms[IDX], &SYM, \
|
||||
NAME, IDX)
|
||||
|
||||
STD_SECTION (bfd_com_section, SEC_IS_COMMON, bfd_com_symbol,
|
||||
BFD_COM_SECTION_NAME, 0);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue