commit b0924416a98ef6aef417718d0777d3b82228d1a5 Author: Yury Gribov Date: Thu Mar 6 10:57:28 2014 +0400 Added optional context to plt_sym_val callback. diff --git a/bfd/elf-bfd.h b/bfd/elf-bfd.h index 76cac2f..b3f6a1d 100644 --- a/bfd/elf-bfd.h +++ b/bfd/elf-bfd.h @@ -1197,7 +1197,7 @@ struct elf_backend_data /* This function is used by `_bfd_elf_get_synthetic_symtab'; see elf.c. */ - bfd_vma (*plt_sym_val) (bfd_vma, const asection *, const arelent *); + bfd_vma (*plt_sym_val) (bfd_vma, const asection *, const arelent *, void **); /* Is symbol defined in common section? */ bfd_boolean (*common_definition) (Elf_Internal_Sym *); diff --git a/bfd/elf.c b/bfd/elf.c index c0303fc..febb47a 100644 --- a/bfd/elf.c +++ b/bfd/elf.c @@ -9933,6 +9933,7 @@ _bfd_elf_get_synthetic_symtab (bfd *abfd, Elf_Internal_Shdr *hdr; char *names; asection *plt; + void *ctx = NULL; *ret = NULL; @@ -9993,7 +9994,7 @@ _bfd_elf_get_synthetic_symtab (bfd *abfd, size_t len; bfd_vma addr; - addr = bed->plt_sym_val (i, plt, p); + addr = bed->plt_sym_val (i, plt, p, &ctx); if (addr == (bfd_vma) -1) continue; diff --git a/bfd/elf32-arm.c b/bfd/elf32-arm.c index db9566b..744431f 100644 --- a/bfd/elf32-arm.c +++ b/bfd/elf32-arm.c @@ -16460,7 +16460,8 @@ elf32_arm_symbian_modify_segment_map (bfd *abfd, static bfd_vma elf32_arm_symbian_plt_sym_val (bfd_vma i, const asection *plt, - const arelent *rel ATTRIBUTE_UNUSED) + const arelent *rel ATTRIBUTE_UNUSED, + void **ctx ATTRIBUTE_UNUSED) { return plt->vma + 4 * ARRAY_SIZE (elf32_arm_symbian_plt_entry) * i; } diff --git a/bfd/elf32-cris.c b/bfd/elf32-cris.c index ab79151..87220ee 100644 --- a/bfd/elf32-cris.c +++ b/bfd/elf32-cris.c @@ -2652,7 +2652,7 @@ cris_elf_gc_sweep_hook (bfd *abfd, static bfd_vma cris_elf_plt_sym_val (bfd_vma i ATTRIBUTE_UNUSED, const asection *plt, - const arelent *rel) + const arelent *rel, void **ctx ATTRIBUTE_UNUSED) { bfd_size_type plt_entry_size; bfd_size_type pltoffs; diff --git a/bfd/elf32-i386.c b/bfd/elf32-i386.c index 4d391e1..fe2b372 100644 --- a/bfd/elf32-i386.c +++ b/bfd/elf32-i386.c @@ -4982,7 +4982,8 @@ elf_i386_finish_dynamic_sections (bfd *output_bfd, static bfd_vma elf_i386_plt_sym_val (bfd_vma i, const asection *plt, - const arelent *rel ATTRIBUTE_UNUSED) + const arelent *rel ATTRIBUTE_UNUSED, + void **ctx ATTRIBUTE_UNUSED) { return plt->vma + (i + 1) * GET_PLT_ENTRY_SIZE (plt->owner); } diff --git a/bfd/elf32-m68k.c b/bfd/elf32-m68k.c index 60e4d93..f853634 100644 --- a/bfd/elf32-m68k.c +++ b/bfd/elf32-m68k.c @@ -4763,7 +4763,8 @@ elf32_m68k_reloc_type_class (const struct bfd_link_info *info ATTRIBUTE_UNUSED, static bfd_vma elf_m68k_plt_sym_val (bfd_vma i, const asection *plt, - const arelent *rel ATTRIBUTE_UNUSED) + const arelent *rel ATTRIBUTE_UNUSED, + void **ctx ATTRIBUTE_UNUSED) { return plt->vma + (i + 1) * elf_m68k_get_plt_info (plt->owner)->size; } diff --git a/bfd/elf32-metag.c b/bfd/elf32-metag.c index 4b85f22..37ff4c6 100644 --- a/bfd/elf32-metag.c +++ b/bfd/elf32-metag.c @@ -4272,7 +4272,8 @@ elf_metag_is_local_label_name (bfd *abfd ATTRIBUTE_UNUSED, const char *name) static bfd_vma elf_metag_plt_sym_val (bfd_vma i, const asection *plt, - const arelent *rel ATTRIBUTE_UNUSED) + const arelent *rel ATTRIBUTE_UNUSED, + void **ctx ATTRIBUTE_UNUSED) { return plt->vma + (i + 1) * PLT_ENTRY_SIZE; } diff --git a/bfd/elf32-ppc.c b/bfd/elf32-ppc.c index 5bfa33b..d848427 100644 --- a/bfd/elf32-ppc.c +++ b/bfd/elf32-ppc.c @@ -2350,7 +2350,8 @@ ppc_elf_section_processing (bfd *abfd, Elf_Internal_Shdr *shdr) static bfd_vma ppc_elf_plt_sym_val (bfd_vma i ATTRIBUTE_UNUSED, const asection *plt ATTRIBUTE_UNUSED, - const arelent *rel) + const arelent *rel, + void **ctx ATTRIBUTE_UNUSED) { return rel->address; } diff --git a/bfd/elf32-s390.c b/bfd/elf32-s390.c index 9827d46..341d620 100644 --- a/bfd/elf32-s390.c +++ b/bfd/elf32-s390.c @@ -3970,7 +3970,8 @@ elf_s390_grok_prstatus (bfd * abfd, Elf_Internal_Note * note) static bfd_vma elf_s390_plt_sym_val (bfd_vma i, const asection *plt, - const arelent *rel ATTRIBUTE_UNUSED) + const arelent *rel ATTRIBUTE_UNUSED, + void **ctx ATTRIBUTE_UNUSED) { return plt->vma + PLT_FIRST_ENTRY_SIZE + i * PLT_ENTRY_SIZE; } diff --git a/bfd/elf32-sh.c b/bfd/elf32-sh.c index ac23a72..04cd912 100644 --- a/bfd/elf32-sh.c +++ b/bfd/elf32-sh.c @@ -7343,7 +7343,8 @@ elf32_shlin_grok_psinfo (bfd *abfd, Elf_Internal_Note *note) static bfd_vma sh_elf_plt_sym_val (bfd_vma i, const asection *plt, - const arelent *rel ATTRIBUTE_UNUSED) + const arelent *rel ATTRIBUTE_UNUSED, + void **ctx ATTRIBUTE_UNUSED) { const struct elf_sh_plt_info *plt_info; diff --git a/bfd/elf32-tic6x.c b/bfd/elf32-tic6x.c index fe82c8f..6eade61 100644 --- a/bfd/elf32-tic6x.c +++ b/bfd/elf32-tic6x.c @@ -3613,7 +3613,8 @@ elf32_tic6x_finish_dynamic_sections (bfd *output_bfd ATTRIBUTE_UNUSED, static bfd_vma elf32_tic6x_plt_sym_val (bfd_vma i, const asection *plt, - const arelent *rel ATTRIBUTE_UNUSED) + const arelent *rel ATTRIBUTE_UNUSED, + void **ctx ATTRIBUTE_UNUSED) { return plt->vma + (i + 1) * PLT_ENTRY_SIZE; } diff --git a/bfd/elf32-tilepro.c b/bfd/elf32-tilepro.c index 0e808c4..939d21a 100644 --- a/bfd/elf32-tilepro.c +++ b/bfd/elf32-tilepro.c @@ -3964,7 +3964,8 @@ tilepro_elf_finish_dynamic_sections (bfd *output_bfd, static bfd_vma tilepro_elf_plt_sym_val (bfd_vma i, const asection *plt, - const arelent *rel ATTRIBUTE_UNUSED) + const arelent *rel ATTRIBUTE_UNUSED, + void **ctx ATTRIBUTE_UNUSED) { return plt->vma + (i + 1) * PLT_ENTRY_SIZE; } diff --git a/bfd/elf32-vax.c b/bfd/elf32-vax.c index d6ae14e..8320122 100644 --- a/bfd/elf32-vax.c +++ b/bfd/elf32-vax.c @@ -49,7 +49,7 @@ static bfd_boolean elf_vax_finish_dynamic_symbol (bfd *, struct bfd_link_info *, static bfd_boolean elf_vax_finish_dynamic_sections (bfd *, struct bfd_link_info *); static bfd_vma elf_vax_plt_sym_val (bfd_vma, const asection *, - const arelent *); + const arelent *, void **); static bfd_boolean elf32_vax_set_private_flags (bfd *, flagword); static bfd_boolean elf32_vax_merge_private_bfd_data (bfd *, bfd *); @@ -2015,7 +2015,8 @@ elf_vax_reloc_type_class (const struct bfd_link_info *info ATTRIBUTE_UNUSED, static bfd_vma elf_vax_plt_sym_val (bfd_vma i, const asection *plt, - const arelent *rel ATTRIBUTE_UNUSED) + const arelent *rel ATTRIBUTE_UNUSED, + void **ctx ATTRIBUTE_UNUSED) { return plt->vma + (i + 1) * PLT_ENTRY_SIZE; } diff --git a/bfd/elf64-s390.c b/bfd/elf64-s390.c index 601aa43..2151201 100644 --- a/bfd/elf64-s390.c +++ b/bfd/elf64-s390.c @@ -3756,7 +3756,8 @@ elf_s390_finish_dynamic_sections (bfd *output_bfd, static bfd_vma elf_s390_plt_sym_val (bfd_vma i, const asection *plt, - const arelent *rel ATTRIBUTE_UNUSED) + const arelent *rel ATTRIBUTE_UNUSED, + void **ctx ATTRIBUTE_UNUSED) { return plt->vma + PLT_FIRST_ENTRY_SIZE + i * PLT_ENTRY_SIZE; } diff --git a/bfd/elf64-x86-64.c b/bfd/elf64-x86-64.c index aa6fd80..7da6a9e 100644 --- a/bfd/elf64-x86-64.c +++ b/bfd/elf64-x86-64.c @@ -5298,7 +5298,8 @@ elf_x86_64_finish_dynamic_sections (bfd *output_bfd, static bfd_vma elf_x86_64_plt_sym_val (bfd_vma i, const asection *plt, - const arelent *rel ATTRIBUTE_UNUSED) + const arelent *rel ATTRIBUTE_UNUSED, + void **ctx ATTRIBUTE_UNUSED) { return plt->vma + (i + 1) * GET_PLT_ENTRY_SIZE (plt->owner); } diff --git a/bfd/elfnn-aarch64.c b/bfd/elfnn-aarch64.c index 2bba824..dbebbcd 100644 --- a/bfd/elfnn-aarch64.c +++ b/bfd/elfnn-aarch64.c @@ -7151,7 +7151,8 @@ elfNN_aarch64_finish_dynamic_sections (bfd *output_bfd, static bfd_vma elfNN_aarch64_plt_sym_val (bfd_vma i, const asection *plt, - const arelent *rel ATTRIBUTE_UNUSED) + const arelent *rel ATTRIBUTE_UNUSED, + void **ctx ATTRIBUTE_UNUSED) { return plt->vma + PLT_ENTRY_SIZE + i * PLT_SMALL_ENTRY_SIZE; } diff --git a/bfd/elfxx-mips.c b/bfd/elfxx-mips.c index a395eef..9068c97 100644 --- a/bfd/elfxx-mips.c +++ b/bfd/elfxx-mips.c @@ -15075,7 +15075,8 @@ _bfd_mips_elf_common_definition (Elf_Internal_Sym *sym) bfd_vma _bfd_mips_elf_plt_sym_val (bfd_vma i, const asection *plt, - const arelent *rel ATTRIBUTE_UNUSED) + const arelent *rel ATTRIBUTE_UNUSED, + void **ctx ATTRIBUTE_UNUSED) { return (plt->vma + 4 * ARRAY_SIZE (mips_o32_exec_plt0_entry) diff --git a/bfd/elfxx-mips.h b/bfd/elfxx-mips.h index f27dc15..efa4705 100644 --- a/bfd/elfxx-mips.h +++ b/bfd/elfxx-mips.h @@ -153,7 +153,7 @@ extern bfd_boolean _bfd_mips_elf_init_stubs (struct bfd_link_info *, asection *(*) (const char *, asection *, asection *)); extern bfd_vma _bfd_mips_elf_plt_sym_val - (bfd_vma, const asection *, const arelent *rel); + (bfd_vma, const asection *, const arelent *rel, void **); extern long _bfd_mips_elf_get_synthetic_symtab (bfd *, long, asymbol **, long, asymbol **, asymbol **); extern void _bfd_mips_post_process_headers diff --git a/bfd/elfxx-sparc.c b/bfd/elfxx-sparc.c index 8250f84..44f5ea3 100644 --- a/bfd/elfxx-sparc.c +++ b/bfd/elfxx-sparc.c @@ -4864,7 +4864,8 @@ _bfd_sparc_elf_object_p (bfd *abfd) or (bfd_vma) -1 if it should not be included. */ bfd_vma -_bfd_sparc_elf_plt_sym_val (bfd_vma i, const asection *plt, const arelent *rel) +_bfd_sparc_elf_plt_sym_val (bfd_vma i, const asection *plt, const arelent *rel, + void **ctx ATTRIBUTE_UNUSED) { if (ABI_64_P (plt->owner)) { diff --git a/bfd/elfxx-sparc.h b/bfd/elfxx-sparc.h index d95e825..8febc01 100644 --- a/bfd/elfxx-sparc.h +++ b/bfd/elfxx-sparc.h @@ -146,6 +146,6 @@ extern bfd_boolean _bfd_sparc_elf_finish_dynamic_sections extern bfd_boolean _bfd_sparc_elf_object_p (bfd *); extern bfd_vma _bfd_sparc_elf_plt_sym_val - (bfd_vma, const asection *, const arelent *); + (bfd_vma, const asection *, const arelent *, void **); extern bfd_boolean _bfd_sparc_elf_merge_private_bfd_data (bfd *, bfd *); diff --git a/bfd/elfxx-tilegx.c b/bfd/elfxx-tilegx.c index 594ee79..44bac28 100644 --- a/bfd/elfxx-tilegx.c +++ b/bfd/elfxx-tilegx.c @@ -4369,7 +4369,8 @@ tilegx_elf_finish_dynamic_sections (bfd *output_bfd, bfd_vma tilegx_elf_plt_sym_val (bfd_vma i, const asection *plt, - const arelent *rel ATTRIBUTE_UNUSED) + const arelent *rel ATTRIBUTE_UNUSED, + void **ctx ATTRIBUTE_UNUSED) { return plt->vma + PLT_HEADER_SIZE + i * PLT_ENTRY_SIZE; } diff --git a/bfd/elfxx-tilegx.h b/bfd/elfxx-tilegx.h index 78900ad..7a95068 100644 --- a/bfd/elfxx-tilegx.h +++ b/bfd/elfxx-tilegx.h @@ -78,7 +78,7 @@ tilegx_elf_gc_sweep_hook (bfd *, struct bfd_link_info *, asection *, const Elf_Internal_Rela *); extern bfd_vma -tilegx_elf_plt_sym_val (bfd_vma, const asection *, const arelent *); +tilegx_elf_plt_sym_val (bfd_vma, const asection *, const arelent *, void **); extern void tilegx_info_to_howto_rela (bfd *, arelent *, Elf_Internal_Rela *);