diff options
author | 2019-11-18 17:09:40 +1030 | |
---|---|---|
committer | 2019-11-18 22:06:09 +1030 | |
commit | ed7e9d0bdaa0cbeb157e427c262e692a993e4432 (patch) | |
tree | 9029ace1cff9aeb0602301c28f6b3e8e11ce7394 | |
parent | elf_backend_modify_headers (diff) | |
download | binutils-gdb-ed7e9d0bdaa0cbeb157e427c262e692a993e4432.tar.gz binutils-gdb-ed7e9d0bdaa0cbeb157e427c262e692a993e4432.tar.bz2 binutils-gdb-ed7e9d0bdaa0cbeb157e427c262e692a993e4432.zip |
elf_backend_init_file_header
This patch renames elf_backend_post_process_headers and moves the
prep_headers code into the new function. Naming the backend functions
elf_backend_init_file_header and elf_backend_modify_headers makes it
clear which function is called first.
* elf-bfd.h (struct elf_backend_data <elf_backend_init_file_header>):
Rename from elf_backend_post_process_headers.
(_bfd_elf_post_process_headers): Delete.
(_bfd_elf_init_file_header): Declare.
* elf.c (_bfd_elf_compute_section_file_positions): Call new function
in place of prep_headers and elf_backend_post_process_headers.
(_bfd_elf_init_file_header): Renamed from prep_headers with
updated args and made global. Delete dead code.
(_bfd_elf_post_process_headers): Delete.
* elf32-arm.c (elf32_arm_init_file_header): Rename from
elf32_arm_post_process_headers and call _bfd_elf_init_file_header.
Return status.
(elf_backend_init_file_header): Define.
(elf_backend_post_process_headers): Don't define.
* elf32-i386.c (elf_i386_fbsd_init_file_header): Similarly.
* elf32-m68hc1x.c (elf32_m68hc11_init_file_header): Similarly.
* elf32-metag.c (elf_metag_init_file_header): Similarly.
* elf32-spu.c (spu_elf_init_file_header
* elf32-visium.c (visium_elf_init_file_header
* elf64-alpha.c (elf64_alpha_fbsd_init_file_header
* elf64-hppa.c (elf64_hppa_init_file_header
* elf64-ia64-vms.c (elf64_vms_init_file_header
* elfnn-aarch64.c (elfNN_aarch64_init_file_header
* elfnn-ia64.c (elfNN_hpux_init_file_header
* elfxx-mips.c (_bfd_mips_init_file_header
* elfxx-mips.h (_bfd_mips_post_process_headers): Delete.
(_bfd_mips_init_file_header): Declare.
(elf_backend_post_process_headers): Delete.
(elf_backend_init_file_header): Define.
* elfxx-target.h (elf_backend_post_process_headers): Delete.
(elf_backend_init_file_header): Define and use.
* elf32-m68hc12.c (elf_backend_init_file_header): Define.
(elf_backend_post_process_headers): Don't define.
* elf32-m68hc1x.h (elf32_m68hc11_post_process_headers): Delete.
(elf32_m68hc11_init_file_header): Declare.
* elf32-ppc.c (elf_backend_post_process_headers): Remove
unnecessary undef.
-rw-r--r-- | bfd/ChangeLog | 40 | ||||
-rw-r--r-- | bfd/elf-bfd.h | 9 | ||||
-rw-r--r-- | bfd/elf.c | 29 | ||||
-rw-r--r-- | bfd/elf32-arm.c | 12 | ||||
-rw-r--r-- | bfd/elf32-i386.c | 17 | ||||
-rw-r--r-- | bfd/elf32-m68hc12.c | 2 | ||||
-rw-r--r-- | bfd/elf32-m68hc1x.c | 12 | ||||
-rw-r--r-- | bfd/elf32-m68hc1x.h | 2 | ||||
-rw-r--r-- | bfd/elf32-metag.c | 11 | ||||
-rw-r--r-- | bfd/elf32-ppc.c | 1 | ||||
-rw-r--r-- | bfd/elf32-spu.c | 12 | ||||
-rw-r--r-- | bfd/elf32-visium.c | 15 | ||||
-rw-r--r-- | bfd/elf64-alpha.c | 15 | ||||
-rw-r--r-- | bfd/elf64-hppa.c | 17 | ||||
-rw-r--r-- | bfd/elf64-ia64-vms.c | 16 | ||||
-rw-r--r-- | bfd/elfnn-aarch64.c | 15 | ||||
-rw-r--r-- | bfd/elfnn-ia64.c | 16 | ||||
-rw-r--r-- | bfd/elfxx-mips.c | 10 | ||||
-rw-r--r-- | bfd/elfxx-mips.h | 4 | ||||
-rw-r--r-- | bfd/elfxx-target.h | 6 |
20 files changed, 154 insertions, 107 deletions
diff --git a/bfd/ChangeLog b/bfd/ChangeLog index a6705ef6885..1a9e64f3f35 100644 --- a/bfd/ChangeLog +++ b/bfd/ChangeLog @@ -1,5 +1,45 @@ 2019-11-18 Alan Modra <amodra@gmail.com> + * elf-bfd.h (struct elf_backend_data <elf_backend_init_file_header>): + Rename from elf_backend_post_process_headers. + (_bfd_elf_post_process_headers): Delete. + (_bfd_elf_init_file_header): Declare. + * elf.c (_bfd_elf_compute_section_file_positions): Call new function + in place of prep_headers and elf_backend_post_process_headers. + (_bfd_elf_init_file_header): Renamed from prep_headers with + updated args and made global. Delete dead code. + (_bfd_elf_post_process_headers): Delete. + * elf32-arm.c (elf32_arm_init_file_header): Rename from + elf32_arm_post_process_headers and call _bfd_elf_init_file_header. + Return status. + (elf_backend_init_file_header): Define. + (elf_backend_post_process_headers): Don't define. + * elf32-i386.c (elf_i386_fbsd_init_file_header): Similarly. + * elf32-m68hc1x.c (elf32_m68hc11_init_file_header): Similarly. + * elf32-metag.c (elf_metag_init_file_header): Similarly. + * elf32-spu.c (spu_elf_init_file_header + * elf32-visium.c (visium_elf_init_file_header + * elf64-alpha.c (elf64_alpha_fbsd_init_file_header + * elf64-hppa.c (elf64_hppa_init_file_header + * elf64-ia64-vms.c (elf64_vms_init_file_header + * elfnn-aarch64.c (elfNN_aarch64_init_file_header + * elfnn-ia64.c (elfNN_hpux_init_file_header + * elfxx-mips.c (_bfd_mips_init_file_header + * elfxx-mips.h (_bfd_mips_post_process_headers): Delete. + (_bfd_mips_init_file_header): Declare. + (elf_backend_post_process_headers): Delete. + (elf_backend_init_file_header): Define. + * elfxx-target.h (elf_backend_post_process_headers): Delete. + (elf_backend_init_file_header): Define and use. + * elf32-m68hc12.c (elf_backend_init_file_header): Define. + (elf_backend_post_process_headers): Don't define. + * elf32-m68hc1x.h (elf32_m68hc11_post_process_headers): Delete. + (elf32_m68hc11_init_file_header): Declare. + * elf32-ppc.c (elf_backend_post_process_headers): Remove + unnecessary undef. + +2019-11-18 Alan Modra <amodra@gmail.com> + * elf-bfd.h (struct elf_backend_data <elf_backend_modify_headers>): Rename from elf_backend_modify_program_headers. (_bfd_elf_modify_headers): Declare. diff --git a/bfd/elf-bfd.h b/bfd/elf-bfd.h index 09975c75fc1..6cfd1ac27f6 100644 --- a/bfd/elf-bfd.h +++ b/bfd/elf-bfd.h @@ -1192,10 +1192,9 @@ struct elf_backend_data bfd_boolean (*gc_mark_extra_sections) (struct bfd_link_info *, elf_gc_mark_hook_fn); - /* This function, if defined, is called after the ELF headers have - been created. This allows for things like the OS and ABI versions - to be changed. */ - void (*elf_backend_post_process_headers) + /* This function is called to initialise ELF file header info. + Customised versions can modify things like the OS and ABI version. */ + bfd_boolean (*elf_backend_init_file_header) (bfd *, struct bfd_link_info *); /* This function, if defined, prints a symbol to file and returns the @@ -2391,7 +2390,7 @@ 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 bfd_boolean _bfd_elf_init_file_header (bfd *, struct bfd_link_info *); extern bfd_boolean _bfd_elf_final_write_processing (bfd *); diff --git a/bfd/elf.c b/bfd/elf.c index d1815e15264..88e51c4f7d3 100644 --- a/bfd/elf.c +++ b/bfd/elf.c @@ -51,7 +51,6 @@ SECTION static int elf_sort_sections (const void *, const void *); static bfd_boolean assign_file_positions_except_relocs (bfd *, struct bfd_link_info *); -static bfd_boolean prep_headers (bfd *); static bfd_boolean swap_out_syms (bfd *, struct elf_strtab_hash **, int) ; static bfd_boolean elf_parse_notes (bfd *abfd, char *buf, size_t size, file_ptr offset, size_t align); @@ -4312,12 +4311,9 @@ _bfd_elf_compute_section_file_positions (bfd *abfd, if (bed->elf_backend_begin_write_processing) (*bed->elf_backend_begin_write_processing) (abfd, link_info); - if (! prep_headers (abfd)) + if (!(*bed->elf_backend_init_file_header) (abfd, link_info)) return FALSE; - /* Post process the headers if necessary. */ - (*bed->elf_backend_post_process_headers) (abfd, link_info); - fsargs.failed = FALSE; fsargs.link_info = link_info; bfd_map_over_sections (abfd, elf_fake_sections, &fsargs); @@ -4350,7 +4346,7 @@ _bfd_elf_compute_section_file_positions (bfd *abfd, } shstrtab_hdr = &elf_tdata (abfd)->shstrtab_hdr; - /* sh_name was set in prep_headers. */ + /* sh_name was set in init_file_header. */ shstrtab_hdr->sh_type = SHT_STRTAB; shstrtab_hdr->sh_flags = bed->elf_strtab_flags; shstrtab_hdr->sh_addr = 0; @@ -6385,8 +6381,9 @@ assign_file_positions_except_relocs (bfd *abfd, return TRUE; } -static bfd_boolean -prep_headers (bfd *abfd) +bfd_boolean +_bfd_elf_init_file_header (bfd *abfd, + struct bfd_link_info *info ATTRIBUTE_UNUSED) { Elf_Internal_Ehdr *i_ehdrp; /* Elf file header, internal form. */ struct elf_strtab_hash *shstrtab; @@ -6449,16 +6446,6 @@ prep_headers (bfd *abfd) i_ehdrp->e_entry = bfd_get_start_address (abfd); i_ehdrp->e_shentsize = bed->s->sizeof_shdr; - /* If we're building an executable, we'll need a program header table. */ - if (abfd->flags & EXEC_P) - /* It all happens later. */ - ; - else - { - i_ehdrp->e_phentsize = 0; - i_ehdrp->e_phoff = 0; - } - elf_tdata (abfd)->symtab_hdr.sh_name = (unsigned int) _bfd_elf_strtab_add (shstrtab, ".symtab", FALSE); elf_tdata (abfd)->strtab_hdr.sh_name = @@ -12224,12 +12211,6 @@ asection _bfd_elf_large_com_section = BFD_FAKE_SECTION (_bfd_elf_large_com_section, &lcomm_sym, "LARGE_COMMON", 0, SEC_IS_COMMON); -void -_bfd_elf_post_process_headers (bfd *abfd ATTRIBUTE_UNUSED, - struct bfd_link_info *info ATTRIBUTE_UNUSED) -{ -} - bfd_boolean _bfd_elf_final_write_processing (bfd *abfd) { diff --git a/bfd/elf32-arm.c b/bfd/elf32-arm.c index 8fb2b473786..f27ee421833 100644 --- a/bfd/elf32-arm.c +++ b/bfd/elf32-arm.c @@ -17850,19 +17850,20 @@ elf32_arm_finish_dynamic_sections (bfd * output_bfd, struct bfd_link_info * info return TRUE; } -static void -elf32_arm_post_process_headers (bfd * abfd, struct bfd_link_info * link_info ATTRIBUTE_UNUSED) +static bfd_boolean +elf32_arm_init_file_header (bfd *abfd, struct bfd_link_info *link_info) { Elf_Internal_Ehdr * i_ehdrp; /* ELF file header, internal form. */ struct elf32_arm_link_hash_table *globals; struct elf_segment_map *m; + if (!_bfd_elf_init_file_header (abfd, link_info)) + return FALSE; + i_ehdrp = elf_elfheader (abfd); if (EF_ARM_EABI_VERSION (i_ehdrp->e_flags) == EF_ARM_EABI_UNKNOWN) i_ehdrp->e_ident[EI_OSABI] = ELFOSABI_ARM; - else - _bfd_elf_post_process_headers (abfd, link_info); i_ehdrp->e_ident[EI_ABIVERSION] = ARM_ELF_ABI_VERSION; if (link_info) @@ -17904,6 +17905,7 @@ elf32_arm_post_process_headers (bfd * abfd, struct bfd_link_info * link_info ATT m->p_flags_valid = 1; } } + return TRUE; } static enum elf_reloc_type_class @@ -20504,7 +20506,7 @@ elf32_arm_backend_symbol_processing (bfd *abfd, asymbol *sym) #define elf_backend_size_dynamic_sections elf32_arm_size_dynamic_sections #define elf_backend_always_size_sections elf32_arm_always_size_sections #define elf_backend_init_index_section _bfd_elf_init_2_index_sections -#define elf_backend_post_process_headers elf32_arm_post_process_headers +#define elf_backend_init_file_header elf32_arm_init_file_header #define elf_backend_reloc_type_class elf32_arm_reloc_type_class #define elf_backend_object_p elf32_arm_object_p #define elf_backend_fake_sections elf32_arm_fake_sections diff --git a/bfd/elf32-i386.c b/bfd/elf32-i386.c index 2afd4f6766c..41fc403e07b 100644 --- a/bfd/elf32-i386.c +++ b/bfd/elf32-i386.c @@ -4400,10 +4400,11 @@ elf_i386_link_setup_gnu_properties (struct bfd_link_info *info) "FreeBSD" label in the ELF header. So we put this label on all executables and (for simplicity) also all other object files. */ -static void -elf_i386_fbsd_post_process_headers (bfd *abfd, struct bfd_link_info *info) +static bfd_boolean +elf_i386_fbsd_init_file_header (bfd *abfd, struct bfd_link_info *info) { - _bfd_elf_post_process_headers (abfd, info); + if (!_bfd_elf_init_file_header (abfd, info)) + return FALSE; #ifdef OLD_FREEBSD_ABI_LABEL { @@ -4412,10 +4413,11 @@ elf_i386_fbsd_post_process_headers (bfd *abfd, struct bfd_link_info *info) memcpy (&i_ehdrp->e_ident[EI_ABIVERSION], "FreeBSD", 8); } #endif + return TRUE; } -#undef elf_backend_post_process_headers -#define elf_backend_post_process_headers elf_i386_fbsd_post_process_headers +#undef elf_backend_init_file_header +#define elf_backend_init_file_header elf_i386_fbsd_init_file_header #undef elf32_bed #define elf32_bed elf32_i386_fbsd_bed @@ -4423,6 +4425,8 @@ elf_i386_fbsd_post_process_headers (bfd *abfd, struct bfd_link_info *info) #include "elf32-target.h" +#undef elf_backend_init_file_header + /* Solaris 2. */ #undef TARGET_LITTLE_SYM @@ -4438,8 +4442,6 @@ static const struct elf_x86_backend_data elf_i386_solaris_arch_bed = #undef elf_backend_arch_data #define elf_backend_arch_data &elf_i386_solaris_arch_bed -#undef elf_backend_post_process_headers - /* Restore default: we cannot use ELFOSABI_SOLARIS, otherwise ELFOSABI_NONE objects won't be recognized. */ #undef ELF_OSABI @@ -4607,7 +4609,6 @@ elf32_iamcu_elf_object_p (bfd *abfd) #undef ELF_OSABI #undef elf_backend_want_plt_sym #define elf_backend_want_plt_sym 0 -#undef elf_backend_post_process_headers #undef elf_backend_static_tls_alignment /* NaCl uses substantially different PLT entries for the same effects. */ diff --git a/bfd/elf32-m68hc12.c b/bfd/elf32-m68hc12.c index 97c513258d7..87eeab4e5be 100644 --- a/bfd/elf32-m68hc12.c +++ b/bfd/elf32-m68hc12.c @@ -656,7 +656,7 @@ static const struct bfd_elf_special_section elf32_m68hc12_special_sections[] = #define elf_backend_object_p m68hc12_elf_set_mach_from_flags #define elf_backend_can_gc_sections 1 #define elf_backend_special_sections elf32_m68hc12_special_sections -#define elf_backend_post_process_headers elf32_m68hc11_post_process_headers +#define elf_backend_init_file_header elf32_m68hc11_init_file_header #define elf_backend_add_symbol_hook elf32_m68hc11_add_symbol_hook #define elf_backend_merge_symbol_attribute elf32_m68hc11_merge_symbol_attribute diff --git a/bfd/elf32-m68hc1x.c b/bfd/elf32-m68hc1x.c index b8aeeae6b96..68ace451eaa 100644 --- a/bfd/elf32-m68hc1x.c +++ b/bfd/elf32-m68hc1x.c @@ -1456,20 +1456,21 @@ static void scan_sections_for_abi (bfd *abfd ATTRIBUTE_UNUSED, /* Tweak the OSABI field of the elf header. */ -void -elf32_m68hc11_post_process_headers (bfd *abfd, struct bfd_link_info *link_info) +bfd_boolean +elf32_m68hc11_init_file_header (bfd *abfd, struct bfd_link_info *link_info) { struct m68hc11_scan_param param; struct m68hc11_elf_link_hash_table *htab; - _bfd_elf_post_process_headers (abfd, link_info); + if (!_bfd_elf_init_file_header (abfd, link_info)) + return FALSE; if (link_info == NULL) - return; + return TRUE; htab = m68hc11_elf_hash_table (link_info); if (htab == NULL) - return; + return TRUE; m68hc11_elf_get_bank_parameters (link_info); @@ -1485,4 +1486,5 @@ elf32_m68hc11_post_process_headers (bfd *abfd, struct bfd_link_info *link_info) i_ehdrp = elf_elfheader (abfd); i_ehdrp->e_flags |= E_M68HC12_BANKS; } + return TRUE; } diff --git a/bfd/elf32-m68hc1x.h b/bfd/elf32-m68hc1x.h index f85b6de6ba5..7143821b887 100644 --- a/bfd/elf32-m68hc1x.h +++ b/bfd/elf32-m68hc1x.h @@ -181,7 +181,7 @@ void elf32_m68hc11_merge_symbol_attribute /* Tweak the OSABI field of the elf header. */ -extern void elf32_m68hc11_post_process_headers (bfd*, struct bfd_link_info*); +extern bfd_boolean elf32_m68hc11_init_file_header (bfd*, struct bfd_link_info*); int elf32_m68hc11_setup_section_lists (bfd *, struct bfd_link_info *); diff --git a/bfd/elf32-metag.c b/bfd/elf32-metag.c index e3df8c56843..5f09239b59f 100644 --- a/bfd/elf32-metag.c +++ b/bfd/elf32-metag.c @@ -3237,14 +3237,17 @@ elf_metag_finish_dynamic_symbol (bfd *output_bfd, /* Set the Meta ELF ABI version. */ -static void -elf_metag_post_process_headers (bfd * abfd, struct bfd_link_info * link_info) +static bfd_boolean +elf_metag_init_file_header (bfd *abfd, struct bfd_link_info *link_info) { Elf_Internal_Ehdr * i_ehdrp; /* ELF file header, internal form. */ - _bfd_elf_post_process_headers (abfd, link_info); + if (!_bfd_elf_init_file_header (abfd, link_info)) + return FALSE; + i_ehdrp = elf_elfheader (abfd); i_ehdrp->e_ident[EI_ABIVERSION] = METAG_ELF_ABI_VERSION; + return TRUE; } /* Used to decide how to sort relocs in an optimal manner for the @@ -4145,7 +4148,7 @@ elf_metag_plt_sym_val (bfd_vma i, const asection *plt, #define elf_backend_size_dynamic_sections elf_metag_size_dynamic_sections #define elf_backend_omit_section_dynsym \ _bfd_elf_omit_section_dynsym_all -#define elf_backend_post_process_headers elf_metag_post_process_headers +#define elf_backend_init_file_header elf_metag_init_file_header #define elf_backend_reloc_type_class elf_metag_reloc_type_class #define elf_backend_copy_indirect_symbol elf_metag_copy_indirect_symbol #define elf_backend_plt_sym_val elf_metag_plt_sym_val diff --git a/bfd/elf32-ppc.c b/bfd/elf32-ppc.c index cb6cd114af3..b9bcc506ae7 100644 --- a/bfd/elf32-ppc.c +++ b/bfd/elf32-ppc.c @@ -10509,6 +10509,5 @@ ppc_elf_vxworks_final_write_processing (bfd *abfd) #undef elf32_bed #define elf32_bed ppc_elf_vxworks_bed -#undef elf_backend_post_process_headers #include "elf32-target.h" diff --git a/bfd/elf32-spu.c b/bfd/elf32-spu.c index aa1510596fb..9a1648f850f 100644 --- a/bfd/elf32-spu.c +++ b/bfd/elf32-spu.c @@ -5185,17 +5185,19 @@ spu_elf_plugin (int val) /* Set ELF header e_type for plugins. */ -static void -spu_elf_post_process_headers (bfd *abfd, struct bfd_link_info *info) +static bfd_boolean +spu_elf_init_file_header (bfd *abfd, struct bfd_link_info *info) { + if (!_bfd_elf_init_file_header (abfd, info)) + return FALSE; + if (spu_plugin) { Elf_Internal_Ehdr *i_ehdrp = elf_elfheader (abfd); i_ehdrp->e_type = ET_DYN; } - - _bfd_elf_post_process_headers (abfd, info); + return TRUE; } /* We may add an extra PT_LOAD segment for .toe. We also need extra @@ -5531,7 +5533,7 @@ spu_elf_size_sections (bfd *obfd ATTRIBUTE_UNUSED, struct bfd_link_info *info) #define elf_backend_additional_program_headers spu_elf_additional_program_headers #define elf_backend_modify_segment_map spu_elf_modify_segment_map #define elf_backend_modify_headers spu_elf_modify_headers -#define elf_backend_post_process_headers spu_elf_post_process_headers +#define elf_backend_init_file_header spu_elf_init_file_header #define elf_backend_fake_sections spu_elf_fake_sections #define elf_backend_special_sections spu_elf_special_sections #define bfd_elf32_bfd_final_link spu_elf_final_link diff --git a/bfd/elf32-visium.c b/bfd/elf32-visium.c index 35e4b84ed14..8721b77666a 100644 --- a/bfd/elf32-visium.c +++ b/bfd/elf32-visium.c @@ -722,12 +722,17 @@ visium_elf_gc_mark_hook (asection *sec, struct bfd_link_info *info, return _bfd_elf_gc_mark_hook (sec, info, rel, h, sym); } -static void -visium_elf_post_process_headers (bfd *abfd, - struct bfd_link_info *info ATTRIBUTE_UNUSED) +static bfd_boolean +visium_elf_init_file_header (bfd *abfd, struct bfd_link_info *info) { - Elf_Internal_Ehdr *i_ehdrp = elf_elfheader (abfd); + Elf_Internal_Ehdr *i_ehdrp; + + if (!_bfd_elf_init_file_header (abfd, info)) + return FALSE; + + i_ehdrp = elf_elfheader (abfd); i_ehdrp->e_ident[EI_ABIVERSION] = 1; + return TRUE; } /* Function to set the ELF flag bits. */ @@ -873,6 +878,6 @@ visium_elf_print_private_bfd_data (bfd *abfd, void *ptr) #define bfd_elf32_bfd_copy_private_bfd_data visium_elf_copy_private_bfd_data #define bfd_elf32_bfd_merge_private_bfd_data visium_elf_merge_private_bfd_data #define bfd_elf32_bfd_print_private_bfd_data visium_elf_print_private_bfd_data -#define elf_backend_post_process_headers visium_elf_post_process_headers +#define elf_backend_init_file_header visium_elf_init_file_header #include "elf32-target.h" diff --git a/bfd/elf64-alpha.c b/bfd/elf64-alpha.c index 3ea12891579..d4ac0c14693 100644 --- a/bfd/elf64-alpha.c +++ b/bfd/elf64-alpha.c @@ -5544,12 +5544,14 @@ static const struct elf_size_info alpha_elf_size_info = "FreeBSD" label in the ELF header. So we put this label on all executables and (for simplicity) also all other object files. */ -static void -elf64_alpha_fbsd_post_process_headers (bfd * abfd, - struct bfd_link_info * link_info ATTRIBUTE_UNUSED) +static bfd_boolean +elf64_alpha_fbsd_init_file_header (bfd *abfd, struct bfd_link_info *info) { Elf_Internal_Ehdr * i_ehdrp; /* ELF file header, internal form. */ + if (!_bfd_elf_init_file_header (abfd, info)) + return FALSE; + i_ehdrp = elf_elfheader (abfd); /* Put an ABI label supported by FreeBSD >= 4.1. */ @@ -5558,11 +5560,12 @@ elf64_alpha_fbsd_post_process_headers (bfd * abfd, /* The ABI label supported by FreeBSD <= 4.0 is quite nonstandard. */ memcpy (&i_ehdrp->e_ident[EI_ABIVERSION], "FreeBSD", 8); #endif + return TRUE; } -#undef elf_backend_post_process_headers -#define elf_backend_post_process_headers \ - elf64_alpha_fbsd_post_process_headers +#undef elf_backend_init_file_header +#define elf_backend_init_file_header \ + elf64_alpha_fbsd_init_file_header #undef elf64_bed #define elf64_bed elf64_alpha_fbsd_bed diff --git a/bfd/elf64-hppa.c b/bfd/elf64-hppa.c index 25e91d8a233..6ec592d7403 100644 --- a/bfd/elf64-hppa.c +++ b/bfd/elf64-hppa.c @@ -169,9 +169,6 @@ static struct bfd_link_hash_table *elf64_hppa_hash_table_create static bfd_boolean elf64_hppa_object_p (bfd *); -static void elf64_hppa_post_process_headers - (bfd *, struct bfd_link_info *); - static bfd_boolean elf64_hppa_create_dynamic_sections (bfd *, struct bfd_link_info *); @@ -1120,16 +1117,18 @@ allocate_global_data_opd (struct elf_link_hash_entry *eh, void *data) /* HP requires the EI_OSABI field to be filled in. The assignment to EI_ABIVERSION may not be strictly necessary. */ -static void -elf64_hppa_post_process_headers (bfd *abfd, - struct bfd_link_info *link_info ATTRIBUTE_UNUSED) +static bfd_boolean +elf64_hppa_init_file_header (bfd *abfd, struct bfd_link_info *info) { - Elf_Internal_Ehdr * i_ehdrp; + Elf_Internal_Ehdr *i_ehdrp; - i_ehdrp = elf_elfheader (abfd); + if (!_bfd_elf_init_file_header (abfd, info)) + return FALSE; + i_ehdrp = elf_elfheader (abfd); i_ehdrp->e_ident[EI_OSABI] = get_elf_backend_data (abfd)->elf_osabi; i_ehdrp->e_ident[EI_ABIVERSION] = 1; + return TRUE; } /* Create function descriptor section (.opd). This section is called .opd @@ -4024,7 +4023,7 @@ const struct elf_size_info hppa64_elf_size_info = #define elf_backend_create_dynamic_sections \ elf64_hppa_create_dynamic_sections -#define elf_backend_post_process_headers elf64_hppa_post_process_headers +#define elf_backend_init_file_header elf64_hppa_init_file_header #define elf_backend_omit_section_dynsym _bfd_elf_omit_section_dynsym_all diff --git a/bfd/elf64-ia64-vms.c b/bfd/elf64-ia64-vms.c index aa2aa119f5e..d0cb7e08e10 100644 --- a/bfd/elf64-ia64-vms.c +++ b/bfd/elf64-ia64-vms.c @@ -4611,14 +4611,18 @@ elf64_vms_object_p (bfd *abfd) return TRUE; } -static void -elf64_vms_post_process_headers (bfd *abfd, - struct bfd_link_info *info ATTRIBUTE_UNUSED) +static bfd_boolean +elf64_vms_init_file_header (bfd *abfd, struct bfd_link_info *info) { - Elf_Internal_Ehdr *i_ehdrp = elf_elfheader (abfd); + Elf_Internal_Ehdr *i_ehdrp; + if (!_bfd_elf_init_file_header (abfd, info)) + return FALSE; + + i_ehdrp = elf_elfheader (abfd); i_ehdrp->e_ident[EI_OSABI] = ELFOSABI_OPENVMS; i_ehdrp->e_ident[EI_ABIVERSION] = 2; + return TRUE; } static bfd_boolean @@ -5553,8 +5557,8 @@ static const struct elf_size_info elf64_ia64_vms_size_info = { #undef elf_backend_section_from_shdr #define elf_backend_section_from_shdr elf64_vms_section_from_shdr -#undef elf_backend_post_process_headers -#define elf_backend_post_process_headers elf64_vms_post_process_headers +#undef elf_backend_init_file_header +#define elf_backend_init_file_header elf64_vms_init_file_header #undef elf_backend_section_processing #define elf_backend_section_processing elf64_vms_section_processing diff --git a/bfd/elfnn-aarch64.c b/bfd/elfnn-aarch64.c index 666f6a75f6e..a71071161c7 100644 --- a/bfd/elfnn-aarch64.c +++ b/bfd/elfnn-aarch64.c @@ -8131,16 +8131,17 @@ elfNN_aarch64_find_inliner_info (bfd *abfd, } -static void -elfNN_aarch64_post_process_headers (bfd *abfd, - struct bfd_link_info *link_info) +static bfd_boolean +elfNN_aarch64_init_file_header (bfd *abfd, struct bfd_link_info *link_info) { Elf_Internal_Ehdr *i_ehdrp; /* ELF file header, internal form. */ + if (!_bfd_elf_init_file_header (abfd, link_info)) + return FALSE; + i_ehdrp = elf_elfheader (abfd); i_ehdrp->e_ident[EI_ABIVERSION] = AARCH64_ELF_ABI_VERSION; - - _bfd_elf_post_process_headers (abfd, link_info); + return TRUE; } static enum elf_reloc_type_class @@ -10172,8 +10173,8 @@ const struct elf_size_info elfNN_aarch64_size_info = #define elf_backend_plt_sym_val \ elfNN_aarch64_plt_sym_val -#define elf_backend_post_process_headers \ - elfNN_aarch64_post_process_headers +#define elf_backend_init_file_header \ + elfNN_aarch64_init_file_header #define elf_backend_relocate_section \ elfNN_aarch64_relocate_section diff --git a/bfd/elfnn-ia64.c b/bfd/elfnn-ia64.c index 63917702ded..459d986c035 100644 --- a/bfd/elfnn-ia64.c +++ b/bfd/elfnn-ia64.c @@ -4972,14 +4972,18 @@ elfNN_ia64_hpux_vec (const bfd_target *vec) return (vec == &ia64_elfNN_hpux_be_vec); } -static void -elfNN_hpux_post_process_headers (bfd *abfd, - struct bfd_link_info *info ATTRIBUTE_UNUSED) +static bfd_boolean +elfNN_hpux_init_file_header (bfd *abfd, struct bfd_link_info *info) { - Elf_Internal_Ehdr *i_ehdrp = elf_elfheader (abfd); + Elf_Internal_Ehdr *i_ehdrp; + if (!_bfd_elf_init_file_header (abfd, info)) + return FALSE; + + i_ehdrp = elf_elfheader (abfd); i_ehdrp->e_ident[EI_OSABI] = get_elf_backend_data (abfd)->elf_osabi; i_ehdrp->e_ident[EI_ABIVERSION] = 1; + return TRUE; } static bfd_boolean @@ -5121,8 +5125,8 @@ elfNN_hpux_backend_symbol_processing (bfd *abfd ATTRIBUTE_UNUSED, /* These are HP-UX specific functions. */ -#undef elf_backend_post_process_headers -#define elf_backend_post_process_headers elfNN_hpux_post_process_headers +#undef elf_backend_init_file_header +#define elf_backend_init_file_header elfNN_hpux_init_file_header #undef elf_backend_section_from_bfd_section #define elf_backend_section_from_bfd_section elfNN_hpux_backend_section_from_bfd_section diff --git a/bfd/elfxx-mips.c b/bfd/elfxx-mips.c index 3462c8b1511..3982ed25e91 100644 --- a/bfd/elfxx-mips.c +++ b/bfd/elfxx-mips.c @@ -16645,12 +16645,15 @@ enum MIPS_LIBC_ABI_MAX }; -void -_bfd_mips_post_process_headers (bfd *abfd, struct bfd_link_info *link_info) +bfd_boolean +_bfd_mips_init_file_header (bfd *abfd, struct bfd_link_info *link_info) { struct mips_elf_link_hash_table *htab = NULL; Elf_Internal_Ehdr *i_ehdrp; + if (!_bfd_elf_init_file_header (abfd, link_info)) + return FALSE; + i_ehdrp = elf_elfheader (abfd); if (link_info) { @@ -16673,8 +16676,7 @@ _bfd_mips_post_process_headers (bfd *abfd, struct bfd_link_info *link_info) if it is the only hash section that will be created. */ if (link_info && link_info->emit_gnu_hash && !link_info->emit_hash) i_ehdrp->e_ident[EI_ABIVERSION] = MIPS_LIBC_ABI_XHASH; - - _bfd_elf_post_process_headers (abfd, link_info); + return TRUE; } int diff --git a/bfd/elfxx-mips.h b/bfd/elfxx-mips.h index fe0e50ff398..fc4e54bc8fd 100644 --- a/bfd/elfxx-mips.h +++ b/bfd/elfxx-mips.h @@ -163,7 +163,7 @@ extern long _bfd_mips_elf_get_synthetic_symtab (bfd *, long, asymbol **, long, asymbol **, asymbol **); extern bfd_boolean _bfd_mips_elf_gc_mark_extra_sections (struct bfd_link_info *, elf_gc_mark_hook_fn); -extern void _bfd_mips_post_process_headers +extern bfd_boolean _bfd_mips_init_file_header (bfd *abfd, struct bfd_link_info *link_info); extern const struct bfd_elf_special_section _bfd_mips_elf_special_sections []; @@ -201,7 +201,7 @@ literal_reloc_p (int r_type) #define elf_backend_eh_frame_address_size _bfd_mips_elf_eh_frame_address_size #define elf_backend_merge_symbol_attribute _bfd_mips_elf_merge_symbol_attribute #define elf_backend_ignore_undef_symbol _bfd_mips_elf_ignore_undef_symbol -#define elf_backend_post_process_headers _bfd_mips_post_process_headers +#define elf_backend_init_file_header _bfd_mips_init_file_header #define elf_backend_compact_eh_encoding _bfd_mips_elf_compact_eh_encoding #define elf_backend_cant_unwind_opcode _bfd_mips_elf_cant_unwind_opcode #define elf_backend_record_xhash_symbol _bfd_mips_elf_record_xhash_symbol diff --git a/bfd/elfxx-target.h b/bfd/elfxx-target.h index a10601bd531..80c47769306 100644 --- a/bfd/elfxx-target.h +++ b/bfd/elfxx-target.h @@ -563,8 +563,8 @@ #ifndef elf_backend_static_tls_alignment #define elf_backend_static_tls_alignment 1 #endif -#ifndef elf_backend_post_process_headers -#define elf_backend_post_process_headers _bfd_elf_post_process_headers +#ifndef elf_backend_init_file_header +#define elf_backend_init_file_header _bfd_elf_init_file_header #endif #ifndef elf_backend_print_symbol_all #define elf_backend_print_symbol_all NULL @@ -829,7 +829,7 @@ static struct elf_backend_data elfNN_bed = elf_backend_gc_mark_dynamic_ref, elf_backend_gc_mark_hook, elf_backend_gc_mark_extra_sections, - elf_backend_post_process_headers, + elf_backend_init_file_header, elf_backend_print_symbol_all, elf_backend_output_arch_local_syms, elf_backend_output_arch_syms, |