X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=bfd%2Felf-bfd.h;h=7905b37c5eead8a05da64f5792b3b31b1e61c936;hb=refs%2Fheads%2Fsandbox%2Fvbarinov%2Ftizen_6_base;hp=afd6982a92b07e8895b83e53c64b845669faab93;hpb=f3185997ac0951edac802e29df03dfc0844fda34;p=external%2Fbinutils.git diff --git a/bfd/elf-bfd.h b/bfd/elf-bfd.h index afd6982..7905b37 100644 --- a/bfd/elf-bfd.h +++ b/bfd/elf-bfd.h @@ -1,5 +1,5 @@ /* BFD back-end data structures for ELF files. - Copyright (C) 1992-2018 Free Software Foundation, Inc. + Copyright (C) 1992-2019 Free Software Foundation, Inc. Written by Cygnus Support. This file is part of BFD, the Binary File Descriptor library. @@ -489,6 +489,7 @@ enum elf_target_id AVR_ELF_DATA, BFIN_ELF_DATA, CRIS_ELF_DATA, + CSKY_ELF_DATA, FRV_ELF_DATA, HPPA32_ELF_DATA, HPPA64_ELF_DATA, @@ -515,7 +516,6 @@ enum elf_target_id TIC6X_ELF_DATA, X86_64_ELF_DATA, XTENSA_ELF_DATA, - XGATE_ELF_DATA, TILEGX_ELF_DATA, TILEPRO_ELF_DATA, RISCV_ELF_DATA, @@ -543,6 +543,9 @@ struct elf_link_hash_table when linking against or generating a shared object. */ bfd_boolean dynamic_sections_created; + /* Whether dynamic relocations are present. */ + bfd_boolean dynamic_relocs; + /* True if this target has relocatable executables, so needs dynamic section symbols. */ bfd_boolean is_relocatable_executable; @@ -828,6 +831,7 @@ typedef struct elf_property /* Add a new one if elf_property_kind is updated. */ } u; enum elf_property_kind pr_kind; + const char *filename; } elf_property; typedef struct elf_property_list @@ -864,6 +868,9 @@ struct elf_backend_data /* The common page size for this backend. */ bfd_vma commonpagesize; + /* The value of commonpagesize to use when -z relro for this backend. */ + bfd_vma relropagesize; + /* The BFD flags applied to sections created for dynamic linking. */ flagword dynamic_sec_flags; @@ -1135,10 +1142,9 @@ struct elf_backend_data (bfd *, struct bfd_link_info *); /* A function to do any final processing needed for the ELF file - before writing it out. The LINKER argument is TRUE if this BFD - was created by the ELF backend linker. */ - void (*elf_backend_final_write_processing) - (bfd *, bfd_boolean linker); + before writing it out. */ + bfd_boolean (*elf_backend_final_write_processing) + (bfd *); /* This function is called by get_program_header_size. It should return the number of additional program segments which this BFD @@ -1387,6 +1393,13 @@ struct elf_backend_data /* Return TRUE if symbol should be hashed in the `.gnu.hash' section. */ bfd_boolean (*elf_hash_symbol) (struct elf_link_hash_entry *); + /* If non-NULL, called to register the location of XLAT_LOC within + .MIPS.xhash at which real final dynindx for H will be written. + If XLAT_LOC is zero, the symbol is not included in + .MIPS.xhash and no dynindx will be written. */ + void (*record_xhash_symbol) + (struct elf_link_hash_entry *h, bfd_vma xlat_loc); + /* Return TRUE if type is a function symbol type. */ bfd_boolean (*is_function_type) (unsigned int type); @@ -1467,12 +1480,16 @@ struct elf_backend_data unsigned int); /* Merge GNU properties. Return TRUE if property is updated. */ - bfd_boolean (*merge_gnu_properties) (struct bfd_link_info *, bfd *, + bfd_boolean (*merge_gnu_properties) (struct bfd_link_info *, bfd *, bfd *, elf_property *, elf_property *); /* Set up GNU properties. */ bfd *(*setup_gnu_properties) (struct bfd_link_info *); + /* Fix up GNU properties. */ + void (*fixup_gnu_properties) (struct bfd_link_info *, + elf_property_list **); + /* Encoding used for compact EH tables. */ int (*compact_eh_encoding) (struct bfd_link_info *); @@ -1668,6 +1685,7 @@ struct bfd_elf_section_data #define elf_linked_to_section(sec) (elf_section_data(sec)->linked_to) #define elf_section_type(sec) (elf_section_data(sec)->this_hdr.sh_type) #define elf_section_flags(sec) (elf_section_data(sec)->this_hdr.sh_flags) +#define elf_section_info(sec) (elf_section_data(sec)->this_hdr.sh_info) #define elf_group_name(sec) (elf_section_data(sec)->group.name) #define elf_group_id(sec) (elf_section_data(sec)->group.id) #define elf_next_in_group(sec) (elf_section_data(sec)->next_in_group) @@ -1692,17 +1710,20 @@ struct bfd_elf_section_data /* The value of an object attribute. The type indicates whether the attribute holds and integer, a string, or both. It can also indicate that there can - be no default (i.e. all values must be written to file, even zero). */ + be no default (i.e. all values must be written to file, even zero), or + that the value is in error and should not be written to file. */ typedef struct obj_attribute { #define ATTR_TYPE_FLAG_INT_VAL (1 << 0) #define ATTR_TYPE_FLAG_STR_VAL (1 << 1) #define ATTR_TYPE_FLAG_NO_DEFAULT (1 << 2) +#define ATTR_TYPE_FLAG_ERROR (1 << 3) #define ATTR_TYPE_HAS_INT_VAL(TYPE) ((TYPE) & ATTR_TYPE_FLAG_INT_VAL) #define ATTR_TYPE_HAS_STR_VAL(TYPE) ((TYPE) & ATTR_TYPE_FLAG_STR_VAL) #define ATTR_TYPE_HAS_NO_DEFAULT(TYPE) ((TYPE) & ATTR_TYPE_FLAG_NO_DEFAULT) +#define ATTR_TYPE_HAS_ERROR(TYPE) ((TYPE) & ATTR_TYPE_FLAG_ERROR) int type; unsigned int i; @@ -1787,24 +1808,18 @@ struct output_elf_obj_tdata /* Segment flags for the PT_GNU_STACK segment. */ unsigned int stack_flags; - /* This is set to TRUE if the object was created by the backend - linker. */ - bfd_boolean linker; - /* Used to determine if the e_flags field has been initialized */ bfd_boolean flags_init; }; -/* Indicate if the bfd contains symbols that have the STT_GNU_IFUNC - symbol type or STB_GNU_UNIQUE binding. Used to set the osabi - field in the ELF header structure. */ -enum elf_gnu_symbols +/* Indicate if the bfd contains SHF_GNU_MBIND sections or symbols that + have the STT_GNU_IFUNC symbol type or STB_GNU_UNIQUE binding. Used + to set the osabi field in the ELF header structure. */ +enum elf_gnu_osabi { - elf_gnu_symbol_none = 0, - elf_gnu_symbol_any = 1 << 0, - elf_gnu_symbol_ifunc = (elf_gnu_symbol_any | 1 << 1), - elf_gnu_symbol_unique = (elf_gnu_symbol_any | 1 << 2), - elf_gnu_symbol_all = (elf_gnu_symbol_ifunc | elf_gnu_symbol_unique) + elf_gnu_osabi_mbind = 1 << 0, + elf_gnu_osabi_ifunc = 1 << 1, + elf_gnu_osabi_unique = 1 << 2, }; typedef struct elf_section_list @@ -1925,9 +1940,8 @@ struct elf_obj_tdata or was found via a DT_NEEDED entry. */ ENUM_BITFIELD (dynamic_lib_link_class) dyn_lib_class : 4; - /* Whether if the bfd contains symbols that have the STT_GNU_IFUNC - symbol type or STB_GNU_UNIQUE binding. */ - ENUM_BITFIELD (elf_gnu_symbols) has_gnu_symbols : 3; + /* Whether the bfd uses OS specific bits that require ELFOSABI_GNU. */ + ENUM_BITFIELD (elf_gnu_osabi) has_gnu_osabi : 3; /* Whether if the bfd contains the GNU_PROPERTY_NO_COPY_ON_PROTECTED property. */ @@ -1957,7 +1971,6 @@ struct elf_obj_tdata #define elf_seg_map(bfd) (elf_tdata(bfd) -> o->seg_map) #define elf_next_file_pos(bfd) (elf_tdata(bfd) -> o->next_file_pos) #define elf_eh_frame_hdr(bfd) (elf_tdata(bfd) -> o->eh_frame_hdr) -#define elf_linker(bfd) (elf_tdata(bfd) -> o->linker) #define elf_stack_flags(bfd) (elf_tdata(bfd) -> o->stack_flags) #define elf_shstrtab(bfd) (elf_tdata(bfd) -> o->strtab_ptr) #define elf_onesymtab(bfd) (elf_tdata(bfd) -> symtab_section) @@ -2082,6 +2095,8 @@ extern void _bfd_elf_link_hash_copy_indirect struct elf_link_hash_entry *); extern void _bfd_elf_link_hash_hide_symbol (struct bfd_link_info *, struct elf_link_hash_entry *, bfd_boolean); +extern void _bfd_elf_link_hide_symbol + (bfd *, struct bfd_link_info *, struct bfd_link_hash_entry *); extern bfd_boolean _bfd_elf_link_hash_fixup_symbol (struct bfd_link_info *, struct elf_link_hash_entry *); extern bfd_boolean _bfd_elf_link_hash_table_init @@ -2180,6 +2195,9 @@ extern const struct bfd_elf_special_section *_bfd_elf_get_special_section extern const struct bfd_elf_special_section *_bfd_elf_get_sec_type_attr (bfd *, asection *); +extern bfd_boolean _bfd_elf_link_hide_sym_by_version + (struct bfd_link_info *, struct elf_link_hash_entry *); + /* If the target doesn't have reloc handling written yet: */ extern bfd_boolean _bfd_elf_no_info_to_howto (bfd *, arelent *, Elf_Internal_Rela *); @@ -2317,7 +2335,9 @@ extern bfd_boolean _bfd_elf_setup_sections extern struct bfd_link_hash_entry *bfd_elf_define_start_stop (struct bfd_link_info *, const char *, asection *); -extern void _bfd_elf_post_process_headers (bfd * , struct bfd_link_info *); +extern void _bfd_elf_post_process_headers (bfd *, struct bfd_link_info *); + +extern bfd_boolean _bfd_elf_final_write_processing (bfd *); extern const bfd_target *bfd_elf32_object_p (bfd *); @@ -2533,7 +2553,8 @@ extern unsigned int _bfd_elf_ppc_at_tprel_transform /* PowerPC elf_object_p tweak. */ extern bfd_boolean _bfd_elf_ppc_set_arch (bfd *); /* PowerPC .gnu.attributes handling common to both 32-bit and 64-bit. */ -extern void _bfd_elf_ppc_merge_fp_attributes (bfd *, struct bfd_link_info *); +extern bfd_boolean _bfd_elf_ppc_merge_fp_attributes + (bfd *, struct bfd_link_info *); /* Exported interface for writing elf corefile notes. */ extern char *elfcore_write_note @@ -2554,6 +2575,32 @@ extern char *elfcore_write_ppc_vmx (bfd *, char *, int *, const void *, int); extern char *elfcore_write_ppc_vsx (bfd *, char *, int *, const void *, int); +extern char *elfcore_write_ppc_tar + (bfd *, char *, int *, const void *, int); +extern char *elfcore_write_ppc_ppr + (bfd *, char *, int *, const void *, int); +extern char *elfcore_write_ppc_dscr + (bfd *, char *, int *, const void *, int); +extern char *elfcore_write_ppc_ebb + (bfd *, char *, int *, const void *, int); +extern char *elfcore_write_ppc_pmu + (bfd *, char *, int *, const void *, int); +extern char *elfcore_write_ppc_tm_cgpr + (bfd *, char *, int *, const void *, int); +extern char *elfcore_write_ppc_tm_cfpr + (bfd *, char *, int *, const void *, int); +extern char *elfcore_write_ppc_tm_cvmx + (bfd *, char *, int *, const void *, int); +extern char *elfcore_write_ppc_tm_cvsx + (bfd *, char *, int *, const void *, int); +extern char *elfcore_write_ppc_tm_spr + (bfd *, char *, int *, const void *, int); +extern char *elfcore_write_ppc_tm_ctar + (bfd *, char *, int *, const void *, int); +extern char *elfcore_write_ppc_tm_cppr + (bfd *, char *, int *, const void *, int); +extern char *elfcore_write_ppc_tm_cdscr + (bfd *, char *, int *, const void *, int); extern char *elfcore_write_s390_timer (bfd *, char *, int *, const void *, int); extern char *elfcore_write_s390_todcmp @@ -2586,6 +2633,10 @@ extern char *elfcore_write_aarch_hw_break (bfd *, char *, int *, const void *, int); extern char *elfcore_write_aarch_hw_watch (bfd *, char *, int *, const void *, int); +extern char *elfcore_write_aarch_sve + (bfd *, char *, int *, const void *, int); +extern char *elfcore_write_aarch_pauth + (bfd *, char *, int *, const void *, int); extern char *elfcore_write_lwpstatus (bfd *, char *, int *, long, int, const void *); extern char *elfcore_write_register_note @@ -2661,6 +2712,10 @@ extern elf_property * _bfd_elf_get_property (bfd *, unsigned int, unsigned int); extern bfd *_bfd_elf_link_setup_gnu_properties (struct bfd_link_info *); +extern bfd_size_type _bfd_elf_convert_gnu_property_size + (bfd *, bfd *); +extern bfd_boolean _bfd_elf_convert_gnu_properties + (bfd *, asection *, bfd *, bfd_byte **, bfd_size_type *); /* The linker may need to keep track of the number of relocs that it decides to copy as dynamic relocs in check_relocs for each symbol. @@ -2697,6 +2752,8 @@ extern bfd_vma elf64_r_sym (bfd_vma); extern bfd_vma elf32_r_info (bfd_vma, bfd_vma); extern bfd_vma elf32_r_sym (bfd_vma); +extern bfd_boolean is_debuginfo_file (bfd *); + /* Large common section. */ extern asection _bfd_elf_large_com_section; @@ -2795,7 +2852,7 @@ extern asection _bfd_elf_large_com_section; { \ int i_; \ _bfd_clear_contents (howto, input_bfd, input_section, \ - contents + rel[index].r_offset); \ + contents, rel[index].r_offset); \ \ if (bfd_link_relocatable (info) \ && (input_section->flags & SEC_DEBUGGING)) \