output file. The FINISH_DYNAMIC_SYMBOL will have been called on
all dynamic symbols. */
bool (*elf_backend_finish_dynamic_sections)
- (bfd *output_bfd, struct bfd_link_info *info);
+ (bfd *output_bfd, struct bfd_link_info *info, bfd_byte *);
/* A function to do any beginning processing needed for the ELF file
before building the ELF headers and computing file positions. */
/* Finish up the dynamic sections. */
static bool
-_bfd_mn10300_elf_finish_dynamic_sections (bfd * output_bfd,
- struct bfd_link_info * info)
+_bfd_mn10300_elf_finish_dynamic_sections (bfd *output_bfd,
+ struct bfd_link_info *info,
+ bfd_byte *buf ATTRIBUTE_UNUSED)
{
bfd * dynobj;
asection * sgot;
static bool
elf_arc_finish_dynamic_sections (bfd * output_bfd,
- struct bfd_link_info *info)
+ struct bfd_link_info *info,
+ bfd_byte *buf ATTRIBUTE_UNUSED)
{
struct elf_link_hash_table *htab = elf_hash_table (info);
bfd *dynobj = (elf_hash_table (info))->dynobj;
/* Finish up the dynamic sections. */
static bool
-elf32_arm_finish_dynamic_sections (bfd * output_bfd, struct bfd_link_info * info)
+elf32_arm_finish_dynamic_sections (bfd *output_bfd, struct bfd_link_info *info,
+ bfd_byte *buf ATTRIBUTE_UNUSED)
{
bfd * dynobj;
asection * sgot;
static bool
elf32_bfinfdpic_finish_dynamic_sections (bfd *output_bfd,
- struct bfd_link_info *info)
+ struct bfd_link_info *info,
+ bfd_byte *buf ATTRIBUTE_UNUSED)
{
bfd *dynobj;
asection *sdyn;
static bool
bfin_finish_dynamic_sections (bfd * output_bfd ATTRIBUTE_UNUSED,
- struct bfd_link_info *info)
+ struct bfd_link_info *info,
+ bfd_byte *buf ATTRIBUTE_UNUSED)
{
bfd *dynobj;
asection *sdyn;
/* Finish up the dynamic sections. */
static bool
-_bfd_cr16_elf_finish_dynamic_sections (bfd * output_bfd,
- struct bfd_link_info * info)
+_bfd_cr16_elf_finish_dynamic_sections (bfd *output_bfd,
+ struct bfd_link_info *info,
+ bfd_byte *buf ATTRIBUTE_UNUSED)
{
bfd * dynobj;
asection * sgot;
static bool
elf_cris_finish_dynamic_sections (bfd *output_bfd,
- struct bfd_link_info *info)
+ struct bfd_link_info *info,
+ bfd_byte *buf ATTRIBUTE_UNUSED)
{
bfd *dynobj;
asection *sgot;
static bool
csky_elf_finish_dynamic_sections (bfd *output_bfd,
- struct bfd_link_info *info)
+ struct bfd_link_info *info,
+ bfd_byte *buf ATTRIBUTE_UNUSED)
{
struct csky_elf_link_hash_table *htab;
bfd *dynobj;
static bool
elf32_frv_finish_dynamic_sections (bfd *output_bfd ATTRIBUTE_UNUSED,
- struct bfd_link_info *info ATTRIBUTE_UNUSED)
+ struct bfd_link_info *info ATTRIBUTE_UNUSED,
+ bfd_byte *buf ATTRIBUTE_UNUSED)
{
/* Nothing to be done for non-FDPIC. */
return true;
static bool
elf32_frvfdpic_finish_dynamic_sections (bfd *output_bfd,
- struct bfd_link_info *info)
+ struct bfd_link_info *info,
+ bfd_byte *buf ATTRIBUTE_UNUSED)
{
bfd *dynobj;
asection *sdyn;
static bool
elf32_hppa_finish_dynamic_sections (bfd *output_bfd,
- struct bfd_link_info *info)
+ struct bfd_link_info *info,
+ bfd_byte *buf ATTRIBUTE_UNUSED)
{
bfd *dynobj;
struct elf32_hppa_link_hash_table *htab;
static bool
elf_i386_finish_dynamic_sections (bfd *output_bfd,
- struct bfd_link_info *info)
+ struct bfd_link_info *info,
+ bfd_byte *buf)
{
struct elf_x86_link_hash_table *htab;
- htab = _bfd_x86_elf_finish_dynamic_sections (output_bfd, info);
+ htab = _bfd_x86_elf_finish_dynamic_sections (output_bfd, info, buf);
if (htab == NULL)
return false;
static bool
lm32_elf_finish_dynamic_sections (bfd *output_bfd,
- struct bfd_link_info *info)
+ struct bfd_link_info *info,
+ bfd_byte *buf ATTRIBUTE_UNUSED)
{
struct elf_lm32_link_hash_table *htab;
bfd *dynobj;
static bool
m32c_elf_finish_dynamic_sections (bfd *abfd ATTRIBUTE_UNUSED,
- struct bfd_link_info *info)
+ struct bfd_link_info *info,
+ bfd_byte *buf ATTRIBUTE_UNUSED)
{
bfd *dynobj = elf_hash_table (info)->dynobj;
asection *splt = elf_hash_table (info)->splt;
static bool
m32r_elf_finish_dynamic_sections (bfd *output_bfd,
- struct bfd_link_info *info)
+ struct bfd_link_info *info,
+ bfd_byte *buf ATTRIBUTE_UNUSED)
{
struct elf_link_hash_table *htab;
bfd *dynobj;
/* Finish up the dynamic sections. */
static bool
-elf_m68k_finish_dynamic_sections (bfd *output_bfd, struct bfd_link_info *info)
+elf_m68k_finish_dynamic_sections (bfd *output_bfd, struct bfd_link_info *info,
+ bfd_byte *buf ATTRIBUTE_UNUSED)
{
bfd *dynobj;
asection *sgot;
static bool
elf_metag_finish_dynamic_sections (bfd *output_bfd,
- struct bfd_link_info *info)
+ struct bfd_link_info *info,
+ bfd_byte *buf ATTRIBUTE_UNUSED)
{
bfd *dynobj;
struct elf_metag_link_hash_table *htab;
static bool
microblaze_elf_finish_dynamic_sections (bfd *output_bfd,
- struct bfd_link_info *info)
+ struct bfd_link_info *info,
+ bfd_byte *buf ATTRIBUTE_UNUSED)
{
bfd *dynobj;
asection *sdyn, *sgot;
/* Finish up the dynamic sections. */
static bool
-nds32_elf_finish_dynamic_sections (bfd *output_bfd, struct bfd_link_info *info)
+nds32_elf_finish_dynamic_sections (bfd *output_bfd, struct bfd_link_info *info,
+ bfd_byte *buf ATTRIBUTE_UNUSED)
{
bfd *dynobj;
asection *sdyn;
static bool
or1k_elf_finish_dynamic_sections (bfd *output_bfd,
- struct bfd_link_info *info)
+ struct bfd_link_info *info,
+ bfd_byte *buf ATTRIBUTE_UNUSED)
{
bfd *dynobj;
asection *sdyn, *sgot;
static bool
ppc_elf_finish_dynamic_sections (bfd *output_bfd,
- struct bfd_link_info *info)
+ struct bfd_link_info *info,
+ bfd_byte *buf ATTRIBUTE_UNUSED)
{
asection *sdyn;
struct ppc_elf_link_hash_table *htab;
static bool
rl78_elf_finish_dynamic_sections (bfd *abfd ATTRIBUTE_UNUSED,
- struct bfd_link_info *info)
+ struct bfd_link_info *info,
+ bfd_byte *buf ATTRIBUTE_UNUSED)
{
bfd *dynobj;
asection *splt;
static bool
elf_s390_finish_dynamic_sections (bfd *output_bfd,
- struct bfd_link_info *info)
+ struct bfd_link_info *info,
+ bfd_byte *buf ATTRIBUTE_UNUSED)
{
struct elf_s390_link_hash_table *htab;
bfd *dynobj;
/* Finish up the dynamic sections. */
static bool
s3_bfd_score_elf_finish_dynamic_sections (bfd *output_bfd,
- struct bfd_link_info *info)
+ struct bfd_link_info *info,
+ bfd_byte *buf ATTRIBUTE_UNUSED)
{
bfd *dynobj;
asection *sdyn;
static bool
_bfd_score_elf_finish_dynamic_sections (bfd *output_bfd,
- struct bfd_link_info *info)
+ struct bfd_link_info *info,
+ bfd_byte *buf)
{
if (bfd_get_mach (output_bfd) == bfd_mach_score3)
- return s3_bfd_score_elf_finish_dynamic_sections (output_bfd, info);
+ return s3_bfd_score_elf_finish_dynamic_sections (output_bfd, info, buf);
else
- return s7_bfd_score_elf_finish_dynamic_sections (output_bfd, info);
+ return s7_bfd_score_elf_finish_dynamic_sections (output_bfd, info, buf);
}
static bool
Elf_Internal_Sym *) ATTRIBUTE_HIDDEN;
extern bool
-s7_bfd_score_elf_finish_dynamic_sections (bfd *, struct bfd_link_info *)
- ATTRIBUTE_HIDDEN;
+s7_bfd_score_elf_finish_dynamic_sections (bfd *, struct bfd_link_info *,
+ bfd_byte *) ATTRIBUTE_HIDDEN;
extern bool
s7_bfd_score_elf_fake_sections (bfd *,
bool
s7_bfd_score_elf_finish_dynamic_sections (bfd *output_bfd,
- struct bfd_link_info *info)
+ struct bfd_link_info *info,
+ bfd_byte *buf ATTRIBUTE_UNUSED)
{
bfd *dynobj;
asection *sdyn;
/* Finish up the dynamic sections. */
static bool
-sh_elf_finish_dynamic_sections (bfd *output_bfd, struct bfd_link_info *info)
+sh_elf_finish_dynamic_sections (bfd *output_bfd, struct bfd_link_info *info,
+ bfd_byte *buf ATTRIBUTE_UNUSED)
{
struct elf_sh_link_hash_table *htab;
asection *sgotplt;
static bool
spu_elf_finish_dynamic_sections (bfd *output_bfd ATTRIBUTE_UNUSED,
- struct bfd_link_info *info ATTRIBUTE_UNUSED)
+ struct bfd_link_info *info ATTRIBUTE_UNUSED,
+ bfd_byte *buf ATTRIBUTE_UNUSED)
{
return true;
}
static bool
elf32_tic6x_finish_dynamic_sections (bfd *output_bfd ATTRIBUTE_UNUSED,
- struct bfd_link_info *info)
+ struct bfd_link_info *info,
+ bfd_byte *buf ATTRIBUTE_UNUSED)
{
struct elf32_tic6x_link_hash_table *htab;
bfd *dynobj;
static bool
tilepro_elf_finish_dynamic_sections (bfd *output_bfd,
- struct bfd_link_info *info)
+ struct bfd_link_info *info,
+ bfd_byte *buf ATTRIBUTE_UNUSED)
{
bfd *dynobj;
asection *sdyn;
static bool elf_vax_finish_dynamic_symbol (bfd *, struct bfd_link_info *,
struct elf_link_hash_entry *,
Elf_Internal_Sym *);
-static bool elf_vax_finish_dynamic_sections (bfd *, struct bfd_link_info *);
+static bool elf_vax_finish_dynamic_sections (bfd *, struct bfd_link_info *,
+ bfd_byte *);
static bfd_vma elf_vax_plt_sym_val (bfd_vma, const asection *,
const arelent *);
/* Finish up the dynamic sections. */
static bool
-elf_vax_finish_dynamic_sections (bfd *output_bfd, struct bfd_link_info *info)
+elf_vax_finish_dynamic_sections (bfd *output_bfd, struct bfd_link_info *info,
+ bfd_byte *buf ATTRIBUTE_UNUSED)
{
bfd *dynobj;
asection *sgot;
static bool
xstormy16_elf_finish_dynamic_sections (bfd *abfd ATTRIBUTE_UNUSED,
- struct bfd_link_info *info)
+ struct bfd_link_info *info,
+ bfd_byte *buf ATTRIBUTE_UNUSED)
{
bfd *dynobj = elf_hash_table (info)->dynobj;
asection *splt = elf_hash_table (info)->splt;
static bool
elf_xtensa_finish_dynamic_sections (bfd *output_bfd,
- struct bfd_link_info *info)
+ struct bfd_link_info *info,
+ bfd_byte *buf ATTRIBUTE_UNUSED)
{
struct elf_xtensa_link_hash_table *htab;
bfd *dynobj;
static bool
elf64_alpha_finish_dynamic_sections (bfd *output_bfd,
- struct bfd_link_info *info)
+ struct bfd_link_info *info,
+ bfd_byte *buf ATTRIBUTE_UNUSED)
{
bfd *dynobj;
asection *sdyn;
struct elf_link_hash_entry *, Elf_Internal_Sym *);
static bool elf64_hppa_finish_dynamic_sections
- (bfd *, struct bfd_link_info *);
+ (bfd *, struct bfd_link_info *, bfd_byte *);
static bool elf64_hppa_check_relocs
(bfd *, struct bfd_link_info *,
static bool
elf64_hppa_finish_dynamic_sections (bfd *output_bfd,
- struct bfd_link_info *info)
+ struct bfd_link_info *info,
+ bfd_byte *buf ATTRIBUTE_UNUSED)
{
bfd *dynobj;
asection *sdyn;
static bool
elf64_ia64_finish_dynamic_sections (bfd *abfd,
- struct bfd_link_info *info)
+ struct bfd_link_info *info,
+ bfd_byte *buf ATTRIBUTE_UNUSED)
{
struct elf64_ia64_link_hash_table *ia64_info;
bfd *dynobj;
static bool
ppc64_elf_finish_dynamic_sections (bfd *output_bfd,
- struct bfd_link_info *info)
+ struct bfd_link_info *info,
+ bfd_byte *buf ATTRIBUTE_UNUSED)
{
struct ppc_link_hash_table *htab;
bfd *dynobj;
static bool
elf_s390_finish_dynamic_sections (bfd *output_bfd,
- struct bfd_link_info *info)
+ struct bfd_link_info *info,
+ bfd_byte *buf ATTRIBUTE_UNUSED)
{
struct elf_s390_link_hash_table *htab;
bfd *dynobj;
static bool
elf_x86_64_finish_dynamic_sections (bfd *output_bfd,
- struct bfd_link_info *info)
+ struct bfd_link_info *info,
+ bfd_byte *buf)
{
struct elf_x86_link_hash_table *htab;
- htab = _bfd_x86_elf_finish_dynamic_sections (output_bfd, info);
+ htab = _bfd_x86_elf_finish_dynamic_sections (output_bfd, info, buf);
if (htab == NULL)
return false;
/* If we have created any dynamic sections, then output them. */
if (dynobj != NULL)
{
- if (! (*bed->elf_backend_finish_dynamic_sections) (abfd, info))
+ if (! (*bed->elf_backend_finish_dynamic_sections) (abfd, info,
+ flinfo.contents))
goto error_return;
/* Check for DT_TEXTREL (late, in case the backend removes it). */
static bool
elfNN_aarch64_finish_dynamic_sections (bfd *output_bfd,
- struct bfd_link_info *info)
+ struct bfd_link_info *info,
+ bfd_byte *buf ATTRIBUTE_UNUSED)
{
struct elf_aarch64_link_hash_table *htab;
bfd *dynobj;
static bool
elfNN_ia64_finish_dynamic_sections (bfd *abfd,
- struct bfd_link_info *info)
+ struct bfd_link_info *info,
+ bfd_byte *buf ATTRIBUTE_UNUSED)
{
struct elfNN_ia64_link_hash_table *ia64_info;
bfd *dynobj;
static bool
elfNN_kvx_finish_dynamic_sections (bfd *output_bfd,
- struct bfd_link_info *info)
+ struct bfd_link_info *info,
+ bfd_byte *buf ATTRIBUTE_UNUSED)
{
struct elf_kvx_link_hash_table *htab;
bfd *dynobj;
static bool
loongarch_elf_finish_dynamic_sections (bfd *output_bfd,
- struct bfd_link_info *info)
+ struct bfd_link_info *info,
+ bfd_byte *buf ATTRIBUTE_UNUSED)
{
bfd *dynobj;
asection *sdyn, *plt, *gotplt = NULL;
static bool
riscv_elf_finish_dynamic_sections (bfd *output_bfd,
- struct bfd_link_info *info)
+ struct bfd_link_info *info,
+ bfd_byte *buf ATTRIBUTE_UNUSED)
{
bfd *dynobj;
asection *sdyn;
bool
_bfd_mips_elf_finish_dynamic_sections (bfd *output_bfd,
- struct bfd_link_info *info)
+ struct bfd_link_info *info,
+ bfd_byte *buf ATTRIBUTE_UNUSED)
{
bfd *dynobj;
asection *sdyn;
(bfd *, struct bfd_link_info *, struct elf_link_hash_entry *,
Elf_Internal_Sym *) ATTRIBUTE_HIDDEN;
extern bool _bfd_mips_elf_finish_dynamic_sections
- (bfd *, struct bfd_link_info *) ATTRIBUTE_HIDDEN;
+ (bfd *, struct bfd_link_info *, bfd_byte *) ATTRIBUTE_HIDDEN;
extern bool _bfd_mips_elf_sort_relocs_p
(asection *) ATTRIBUTE_HIDDEN;
extern void _bfd_mips_final_write_processing
}
bool
-_bfd_sparc_elf_finish_dynamic_sections (bfd *output_bfd, struct bfd_link_info *info)
+_bfd_sparc_elf_finish_dynamic_sections (bfd *output_bfd,
+ struct bfd_link_info *info,
+ bfd_byte *buf ATTRIBUTE_UNUSED)
{
bfd *dynobj;
asection *sdyn;
(bfd *, struct bfd_link_info *, struct elf_link_hash_entry *,
Elf_Internal_Sym *sym) ATTRIBUTE_HIDDEN;
extern bool _bfd_sparc_elf_finish_dynamic_sections
- (bfd *, struct bfd_link_info *) ATTRIBUTE_HIDDEN;
+ (bfd *, struct bfd_link_info *, bfd_byte *) ATTRIBUTE_HIDDEN;
extern bool _bfd_sparc_elf_fixup_symbol
(struct bfd_link_info *, struct elf_link_hash_entry *) ATTRIBUTE_HIDDEN;
extern bool _bfd_sparc_elf_object_p
bool
tilegx_elf_finish_dynamic_sections (bfd *output_bfd,
- struct bfd_link_info *info)
+ struct bfd_link_info *info,
+ bfd_byte *buf ATTRIBUTE_UNUSED)
{
bfd *dynobj;
asection *sdyn;
Elf_Internal_Sym *) ATTRIBUTE_HIDDEN;
extern bool
-tilegx_elf_finish_dynamic_sections (bfd *, struct bfd_link_info *)
+tilegx_elf_finish_dynamic_sections (bfd *, struct bfd_link_info *, bfd_byte *)
ATTRIBUTE_HIDDEN;
extern bool
struct elf_x86_link_hash_table *
_bfd_x86_elf_finish_dynamic_sections (bfd *output_bfd,
- struct bfd_link_info *info)
+ struct bfd_link_info *info,
+ bfd_byte *buf ATTRIBUTE_UNUSED)
{
struct elf_x86_link_hash_table *htab;
const struct elf_backend_data *bed;
(bfd *, struct bfd_link_info *) ATTRIBUTE_HIDDEN;
extern struct elf_x86_link_hash_table *_bfd_x86_elf_finish_dynamic_sections
- (bfd *, struct bfd_link_info *) ATTRIBUTE_HIDDEN;
+ (bfd *, struct bfd_link_info *, bfd_byte *) ATTRIBUTE_HIDDEN;
extern bool _bfd_x86_elf_early_size_sections
(bfd *, struct bfd_link_info *) ATTRIBUTE_HIDDEN;