/* Cached first output tls section and size of PT_TLS segment. */
asection *tls_sec;
- bfd_size_type tls_size;
+ bfd_size_type tls_size; /* Bytes. */
- /* A linked list of BFD's loaded in the link. */
- struct elf_link_loaded_list *loaded;
+ /* A linked list of dynamic BFD's loaded in the link. */
+ struct elf_link_loaded_list *dyn_loaded;
/* Short-cuts to get to dynamic linker sections. */
asection *sgot;
/* A function to convert machine dependent ELF section header flags to
BFD internal section header flags. */
bfd_boolean (*elf_backend_section_flags)
- (flagword *, const Elf_Internal_Shdr *);
+ (const Elf_Internal_Shdr *);
/* A function that returns a struct containing ELF section flags and
type for the given BFD section. */
bfd_boolean (*elf_backend_size_dynamic_sections)
(bfd *output_bfd, struct bfd_link_info *info);
+ /* The STRIP_ZERO_SIZED_DYNAMIC_SECTIONS function is called by the
+ ELF backend linker to strip zero-sized dynamic sections after
+ the section sizes have been set. */
+ bfd_boolean (*elf_backend_strip_zero_sized_dynamic_sections)
+ (struct bfd_link_info *info);
+
/* Set TEXT_INDEX_SECTION and DATA_INDEX_SECTION, the output sections
we keep to use as a base for relocs and symbols. */
void (*elf_backend_init_index_section)
emitted symbol. If not defined, the value is left unchanged. */
unsigned int (*symbol_section_index) (bfd *, elf_symbol_type *);
+ /* Called when a section has extra reloc sections. */
+ bfd_boolean (*init_secondary_reloc_section) (bfd *, Elf_Internal_Shdr *,
+ const char *, unsigned int);
+
+ /* Called when after loading the normal relocs for a section. */
+ bfd_boolean (*slurp_secondary_relocs) (bfd *, asection *, asymbol **);
+
+ /* Called after writing the normal relocs for a section. */
+ bfd_boolean (*write_secondary_relocs) (bfd *, asection *);
+
/* This is non-zero if static TLS segments require a special alignment. */
unsigned static_tls_alignment;
struct sdt_note *sdt_note_head;
Elf_Internal_Shdr **group_sect_ptr;
- int num_group;
+ unsigned int num_group;
/* Index into group_sect_ptr, updated by setup_group when finding a
section's group. Used to optimize subsequent group searches. */
extern bfd_boolean _bfd_elf_print_private_bfd_data
(bfd *, void *);
const char * _bfd_elf_get_symbol_version_string
- (bfd *, asymbol *, bfd_boolean *);
+ (bfd *, asymbol *, bfd_boolean, bfd_boolean *);
extern void bfd_elf_print_symbol
(bfd *, void *, asymbol *, bfd_print_symbol_type);
extern bfd_boolean _bfd_elf_final_write_processing (bfd *);
-extern const bfd_target *bfd_elf32_object_p
+extern bfd_cleanup bfd_elf32_object_p
(bfd *);
-extern const bfd_target *bfd_elf32_core_file_p
+extern bfd_cleanup bfd_elf32_core_file_p
(bfd *);
extern char *bfd_elf32_core_file_failing_command
(bfd *);
extern bfd_boolean bfd_elf32_slurp_reloc_table
(bfd *, asection *, asymbol **, bfd_boolean);
-extern const bfd_target *bfd_elf64_object_p
+extern bfd_cleanup bfd_elf64_object_p
(bfd *);
-extern const bfd_target *bfd_elf64_core_file_p
+extern bfd_cleanup bfd_elf64_core_file_p
(bfd *);
extern char *bfd_elf64_core_file_failing_command
(bfd *);
(bfd *, struct bfd_link_info *);
extern bfd_boolean _bfd_elf_add_dynamic_entry
(struct bfd_link_info *, bfd_vma, bfd_vma);
+extern bfd_boolean _bfd_elf_strip_zero_sized_dynamic_sections
+ (struct bfd_link_info *);
+extern int bfd_elf_add_dt_needed_tag
+ (bfd *, struct bfd_link_info *);
extern bfd_boolean _bfd_elf_link_check_relocs
(bfd *, struct bfd_link_info *);
(bfd *, char *, int *, const void *, int);
extern char *elfcore_write_aarch_pauth
(bfd *, char *, int *, const void *, int);
+extern char *elfcore_write_arc_v2
+ (bfd *, char *, int *, const void *, int);
extern char *elfcore_write_lwpstatus
(bfd *, char *, int *, long, int, const void *);
extern char *elfcore_write_register_note
extern bfd_boolean is_debuginfo_file (bfd *);
+
+extern bfd_boolean _bfd_elf_init_secondary_reloc_section
+ (bfd *, Elf_Internal_Shdr *, const char *, unsigned int);
+extern bfd_boolean _bfd_elf_slurp_secondary_reloc_section
+ (bfd *, asection *, asymbol **);
+extern bfd_boolean _bfd_elf_copy_special_section_fields
+ (const bfd *, bfd *, const Elf_Internal_Shdr *, Elf_Internal_Shdr *);
+extern bfd_boolean _bfd_elf_write_secondary_reloc_section
+ (bfd *, asection *);
+extern unsigned int _bfd_elf_symbol_section_index
+ (bfd *, elf_symbol_type *);
+
+
/* Large common section. */
extern asection _bfd_elf_large_com_section;
else if (!bfd_link_relocatable (info)) \
{ \
bfd_boolean err; \
- err = (info->unresolved_syms_in_objects == RM_GENERATE_ERROR \
- || ELF_ST_VISIBILITY (h->other) != STV_DEFAULT); \
+ err = (info->unresolved_syms_in_objects == RM_DIAGNOSE && \
+ !info->warn_unresolved_syms) \
+ || ELF_ST_VISIBILITY (h->other) != STV_DEFAULT; \
(*info->callbacks->undefined_symbol) (info, \
h->root.root.string, \
input_bfd, \