_bfd_elf_symbol_refs_local_p (H, INFO, 1)
/* Whether an undefined weak symbol should resolve to its link-time
- value, even in PIC or PIE objects. */
+ value, even in PIC or PIE objects. The linker_def test is to
+ handle symbols like __ehdr_start that may be undefweak in early
+ stages of linking but are guaranteed to be defined later. */
#define UNDEFWEAK_NO_DYNAMIC_RELOC(INFO, H) \
((H)->root.type == bfd_link_hash_undefweak \
+ && !(H)->root.linker_def \
&& (ELF_ST_VISIBILITY ((H)->other) != STV_DEFAULT \
|| (INFO)->dynamic_undefined_weak == 0))
{
AARCH64_ELF_DATA = 1,
ALPHA_ELF_DATA,
+ AMDGCN_ELF_DATA,
ARC_ELF_DATA,
ARM_ELF_DATA,
AVR_ELF_DATA,
/* TRUE if DT_JMPREL is a required dynamic tag. */
bool dt_jmprel_required;
+ /* TRUE when we are handling DT_NEEDED entries. */
+ bool handling_dt_needed;
+
/* The BFD used to hold special sections created by the linker.
This will be the first BFD found which requires these sections to
be created. */
/* 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 p_align value for this backend. If it is set, p_align of
PT_LOAD alignment will be to p_align by default. */
bfd_vma p_align;
(bfd *abfd, struct bfd_link_info *info, asection *o,
const Elf_Internal_Rela *relocs);
+ /* The SIZE_RELATIVE_RELOCS function is called to size relative
+ relocations when mappig sections to segments. */
+ bool (*size_relative_relocs)
+ (struct bfd_link_info *info, bool *need_layout);
+
+ /* The FINISH_RELATIVE_RELOCS function is called to finish relative
+ relocations in bfd_elf_final_link. */
+ bool (*finish_relative_relocs)
+ (struct bfd_link_info *info);
+
/* The CHECK_DIRECTIVES function is called once per input file by
the add_symbols phase of the ELF backend linker. The function
must inspect the bfd and create any additional symbols according
/* STT_SECTION symbols for each section */
asymbol **section_syms;
- /* Used to determine if PT_GNU_EH_FRAME segment header should be
- created. */
- asection *eh_frame_hdr;
-
/* NT_GNU_BUILD_ID note type info. */
struct
{
asection *sec;
} build_id;
+ /* FDO_PACKAGING_METADATA note type info. */
+ struct
+ {
+ bool (*after_write_object_contents) (bfd *);
+ const char *json;
+ asection *sec;
+ } package_metadata;
+
/* Records the result of `get_program_header_size'. */
bfd_size_type program_header_size;
#define elf_seg_map(bfd) (elf_tdata(bfd) -> o->seg_map)
#define elf_link_info(bfd) (elf_tdata(bfd) -> o->link_info)
#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_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)
extern bool _bfd_elf_adjust_eh_frame_global_symbol
(struct elf_link_hash_entry *, void *);
extern bool _bfd_elf_discard_section_eh_frame_hdr
- (bfd *, struct bfd_link_info *);
+ (struct bfd_link_info *);
extern bfd_vma _bfd_elf_eh_frame_section_offset
(bfd *, struct bfd_link_info *, asection *, bfd_vma);
extern bool _bfd_elf_write_section_eh_frame
(bfd *, char *, int *, const void *, int);
extern char *elfcore_write_xstatereg
(bfd *, char *, int *, const void *, int);
+extern char *elfcore_write_x86_segbases
+ (bfd *, char *, int *, const void *, int);
extern char *elfcore_write_ppc_vmx
(bfd *, char *, int *, const void *, int);
extern char *elfcore_write_ppc_vsx