mirror of
https://github.com/darlinghq/darling-gdb.git
synced 2025-02-02 15:02:18 +00:00
* elf-bfd.h (_bfd_elf_rel_vtable_reloc_fn): Declare.
* elf.c (_bfd_elf_rel_vtable_reloc_fn): New. * elf32-i386.c (elf_howto_table): Add vtable relocs. (elf_i386_reloc_type_lookup): Recognize them. (elf_i386_check_relocs): Pass them off to generic code. (elf_i386_relocate_section): Ignore them. (elf_i386_gc_mark_hook, elf_i386_gc_sweep_hook): New. (elf_backend_can_gc_sections): True.
This commit is contained in:
parent
07f50e4e2c
commit
09e5322ac0
@ -1,4 +1,15 @@
|
||||
start-sanitize-armelf
|
||||
Fri Aug 28 19:38:53 1998 Richard Henderson <rth@cygnus.com>
|
||||
|
||||
* elf-bfd.h (_bfd_elf_rel_vtable_reloc_fn): Declare.
|
||||
* elf.c (_bfd_elf_rel_vtable_reloc_fn): New.
|
||||
|
||||
* elf32-i386.c (elf_howto_table): Add vtable relocs.
|
||||
(elf_i386_reloc_type_lookup): Recognize them.
|
||||
(elf_i386_check_relocs): Pass them off to generic code.
|
||||
(elf_i386_relocate_section): Ignore them.
|
||||
(elf_i386_gc_mark_hook, elf_i386_gc_sweep_hook): New.
|
||||
(elf_backend_can_gc_sections): True.
|
||||
|
||||
Thu Aug 20 15:03:45 1998 Nick Clifton <nickc@cygnus.com>
|
||||
|
||||
* elf32-arm.c (elf32_thumb_to_arm_stub): Check sym_sec is not NULL
|
||||
@ -6,7 +17,7 @@ Thu Aug 20 15:03:45 1998 Nick Clifton <nickc@cygnus.com>
|
||||
(elf32_arm_to_thumb_stub): Ditto.
|
||||
(elf32_arm_relocate_section): Compute name before calling
|
||||
elf32_arm_final_link_relocate().
|
||||
end-sanitize-armelf
|
||||
|
||||
Wed Aug 19 15:43:26 1998 Michael Snyder <msnyder@cleaver.cygnus.com>
|
||||
|
||||
* elfcode.h (elf_object_p): Reject files of header type ET_CORE
|
||||
@ -37,12 +48,11 @@ Wed Aug 19 15:43:26 1998 Michael Snyder <msnyder@cleaver.cygnus.com>
|
||||
R_PPC_EMB_SDA21, R_PPC_EMB_RELSDA. In all these cases also ignore
|
||||
output_offset for correct evaluation of addend.
|
||||
|
||||
start-sanitize-armelf
|
||||
Tue Aug 18 11:48:12 1998 Catherine Moore <clm@cygnus.com>
|
||||
|
||||
* elf32-arm.c: Add prefix bfd_ to elf32_arm_get_bfd_for_interworking,
|
||||
elf32_arm_allocate_interworking_sections and
|
||||
elf32_arm_process_before_allocation.
|
||||
elf32_arm_allocate_interworking_sections and
|
||||
elf32_arm_process_before_allocation.
|
||||
|
||||
Tue Aug 18 11:46:00 1998 Nick Clifton <nickc@cygnus.com>
|
||||
|
||||
@ -52,7 +62,6 @@ Tue Aug 18 11:46:00 1998 Nick Clifton <nickc@cygnus.com>
|
||||
|
||||
* bfd-in2.h: Regenerate.
|
||||
|
||||
end-sanitize-armelf
|
||||
Sat Aug 15 20:55:08 1998 Richard Henderson <rth@cygnus.com>
|
||||
|
||||
* elf64-alpha.c (elf64_alpha_relax_section): Handle indirect symbols.
|
||||
@ -62,7 +71,6 @@ Fri Aug 14 09:12:28 1998 Stan Cox <scox@cygnus.com>
|
||||
* aoutx.h (aout_link_input_section_ext): Use the relocation already
|
||||
calculated for RELOC_SPARC_REV32 case.
|
||||
|
||||
start-sanitize-armelf
|
||||
Thu Aug 13 14:02:02 1998 Catherine Moore <clm@cygnus.com>
|
||||
|
||||
* bfd-in.h: Add prototypes for elf32_arm_get_bfd_for_interworking,
|
||||
@ -88,7 +96,6 @@ Thu Aug 13 14:02:02 1998 Catherine Moore <clm@cygnus.com>
|
||||
(elf32_arm_relocate_section): Pass symbol section to
|
||||
elf32_arm_final_link_relocate.
|
||||
|
||||
end-sanitize-armelf
|
||||
Wed Aug 12 19:00:39 1998 Geoff Keating <geoffk@ozemail.com.au>
|
||||
|
||||
* elf32-ppc.c (ppc_elf_adjust_dynamic_symbol): Generate PLT
|
||||
@ -99,14 +106,11 @@ Wed Aug 12 14:48:33 1998 Ian Lance Taylor <ian@cygnus.com>
|
||||
|
||||
* libaout.h: Remove nested comment to avoid warning.
|
||||
|
||||
start-sanitize-armelf
|
||||
Wed Aug 12 08:10:11 1998 Catherine Moore <clm@cygnus.com>
|
||||
|
||||
* elf32-arm.c (elf32_arm_final_link_relocate): Rework
|
||||
R_ARM_PC24 relocation.
|
||||
|
||||
end-sanitize-armelf
|
||||
start-sanitize-armelf
|
||||
Tue Aug 11 14:42:26 1998 Catherine Moore <clm@cygnus.com>
|
||||
|
||||
* elf32-arm.c (elf32_arm_final_link_relocate): Remove unused
|
||||
@ -115,7 +119,6 @@ Tue Aug 11 14:42:26 1998 Catherine Moore <clm@cygnus.com>
|
||||
(elf32_arm_relocate_section): Don't pass local sym and pass
|
||||
sym_flags to elf32_arm_final_link_relocate.
|
||||
|
||||
end-sanitize-armelf
|
||||
Mon Aug 10 20:38:39 1998 Richard Henderson <rth@cygnus.com>
|
||||
|
||||
* elf64-alpha.c (elf64_alpha_calc_dynrel_sizes): Correct last change
|
||||
@ -139,13 +142,11 @@ Mon Aug 10 17:31:21 1998 Ian Lance Taylor <ian@cygnus.com>
|
||||
* ieee.c (ieee_write_processor): Correct the processor ID written
|
||||
out for bfd_arch_m68k, accommodating change of March 25.
|
||||
|
||||
start-sanitize-armelf
|
||||
Sun Aug 9 20:55:44 1998 Catherine Moore <clm@cygnus.com>
|
||||
|
||||
* elf32-arm.c (elf32_arm_final_link_relocate): Rework
|
||||
R_ARM_THM_RPC22 relocations.
|
||||
|
||||
end-sanitize-armelf
|
||||
Sat Aug 8 15:15:30 1998 Richard Henderson <rth@cygnus.com>
|
||||
|
||||
* elf64-alpha.c (alpha_elf_dynamic_symbol_p): Undef weak symbols
|
||||
@ -153,7 +154,6 @@ Sat Aug 8 15:15:30 1998 Richard Henderson <rth@cygnus.com>
|
||||
(elf64_alpha_calc_dynrel_sizes): Allow enough room for RELATIVE
|
||||
.got relocs in -Bsymbolic shared objects.
|
||||
|
||||
start-sanitize-armelf
|
||||
Wed Aug 5 15:48:08 1998 Nick Clifton <nickc@cygnus.com>
|
||||
|
||||
* elf32-arm.c: Add private flags to ELF header.
|
||||
@ -162,7 +162,6 @@ Wed Aug 5 15:48:08 1998 Nick Clifton <nickc@cygnus.com>
|
||||
(elf32_arm_copy_private_flags): New Function.
|
||||
(elf32_arm_merge_private_bfd_data): New Function.
|
||||
|
||||
end-sanitize-armelf
|
||||
Mon Aug 3 17:10:15 1998 Ian Lance Taylor <ian@cygnus.com>
|
||||
|
||||
* elf32-sparc.c (elf32_sparc_check_relocs): Permit WPLT30 against
|
||||
@ -181,7 +180,6 @@ Sun Aug 2 03:19:23 1998 Richard Henderson <rth@cygnus.com>
|
||||
* elf32-mips.c (_bfd_mips_elf_section_from_shdr): Don't pass
|
||||
".liblist" string through gettext.
|
||||
|
||||
start-sanitize-armelf
|
||||
Fri Jul 31 16:38:14 1998 Catherine Moore <clm@cygnus.com>
|
||||
|
||||
* Makefile.am: Add support for elf32-arm.lo.
|
||||
@ -195,7 +193,6 @@ Fri Jul 31 16:38:14 1998 Catherine Moore <clm@cygnus.com>
|
||||
bfd_target bfd_elf32_littlearm_vec.
|
||||
* elf32-arm.c: New file.
|
||||
|
||||
end-sanitize-armelf
|
||||
Tue Jun 28 19:05:28 1998 Stan Cox <scox@cygnus.com>
|
||||
|
||||
* libaout.h (M_SPARCLITE_LE): New machine.
|
||||
|
121
bfd/elf-bfd.h
121
bfd/elf-bfd.h
@ -1,5 +1,5 @@
|
||||
/* BFD back-end data structures for ELF files.
|
||||
Copyright (C) 1992, 93, 94, 95, 96, 1997 Free Software Foundation, Inc.
|
||||
Copyright (C) 1992, 93, 94, 95, 96, 97, 1998 Free Software Foundation, Inc.
|
||||
Written by Cygnus Support.
|
||||
|
||||
This file is part of BFD, the Binary File Descriptor library.
|
||||
@ -96,17 +96,24 @@ struct elf_link_hash_entry
|
||||
struct elf_link_hash_entry *weakdef;
|
||||
|
||||
/* If this symbol requires an entry in the global offset table, the
|
||||
processor specific backend uses this field to hold the offset
|
||||
into the .got section. If this field is -1, then the symbol does
|
||||
not require a global offset table entry. */
|
||||
bfd_vma got_offset;
|
||||
processor specific backend uses this field to track usage and
|
||||
final offset. We use a union and two names primarily to document
|
||||
the intent of any particular piece of code. The field should be
|
||||
used as a count until size_dynamic_sections, at which point the
|
||||
contents of the .got is fixed. Afterward, if this field is -1,
|
||||
then the symbol does not require a global offset table entry. */
|
||||
union
|
||||
{
|
||||
bfd_signed_vma refcount;
|
||||
bfd_vma offset;
|
||||
} got;
|
||||
|
||||
/* If this symbol requires an entry in the procedure linkage table,
|
||||
the processor specific backend uses these two fields to hold the
|
||||
offset into the procedure linkage section and the offset into the
|
||||
.got section. If plt_offset is -1, then the symbol does not
|
||||
require an entry in the procedure linkage table. */
|
||||
bfd_vma plt_offset;
|
||||
/* Same, but tracks a procedure linkage table entry. */
|
||||
union
|
||||
{
|
||||
bfd_signed_vma refcount;
|
||||
bfd_vma offset;
|
||||
} plt;
|
||||
|
||||
/* If this symbol is used in the linker created sections, the processor
|
||||
specific backend uses this field to map the field into the offset
|
||||
@ -126,6 +133,14 @@ struct elf_link_hash_entry
|
||||
struct bfd_elf_version_tree *vertree;
|
||||
} verinfo;
|
||||
|
||||
/* Virtual table entry use information. This array is of size
|
||||
size/sizeof(target_void_pointer), and indexed via
|
||||
offset/sizeof(void*) as well. */
|
||||
boolean *vtable_entries_used;
|
||||
|
||||
/* Virtual table derivation info. */
|
||||
struct elf_link_hash_entry *vtable_parent;
|
||||
|
||||
/* Symbol type (STT_NOTYPE, STT_OBJECT, etc.). */
|
||||
char type;
|
||||
|
||||
@ -152,6 +167,10 @@ struct elf_link_hash_entry
|
||||
#define ELF_LINK_NON_ELF 0200
|
||||
/* Symbol should be marked as hidden in the version information. */
|
||||
#define ELF_LINK_HIDDEN 0400
|
||||
/* Symbol was forced to local scope due to a version script file. */
|
||||
#define ELF_LINK_FORCED_LOCAL 01000
|
||||
/* Symbol was marked during garbage collection. */
|
||||
#define ELF_LINK_HASH_MARK 02000
|
||||
};
|
||||
|
||||
/* ELF linker hash table. */
|
||||
@ -471,6 +490,20 @@ struct elf_backend_data
|
||||
backend specific fashion. */
|
||||
boolean (*elf_backend_modify_segment_map) PARAMS ((bfd *));
|
||||
|
||||
/* This function is called during section gc to discover the section a
|
||||
particular relocation refers to. It need not be defined for hosts
|
||||
that have no queer relocation types. */
|
||||
asection * (*gc_mark_hook)
|
||||
PARAMS ((bfd *abfd, struct bfd_link_info *, Elf_Internal_Rela *,
|
||||
struct elf_link_hash_entry *h, Elf_Internal_Sym *));
|
||||
|
||||
/* This function, if defined, is called during the sweep phase of gc
|
||||
in order that a backend might update any data structures it might
|
||||
be maintaining. */
|
||||
boolean (*gc_sweep_hook)
|
||||
PARAMS ((bfd *abfd, struct bfd_link_info *info, asection *o,
|
||||
const Elf_Internal_Rela *relocs));
|
||||
|
||||
/* The swapping table to use when dealing with ECOFF information.
|
||||
Used for the MIPS ELF .mdebug section. */
|
||||
const struct ecoff_debug_swap *elf_backend_ecoff_debug_swap;
|
||||
@ -481,9 +514,21 @@ struct elf_backend_data
|
||||
|
||||
const struct elf_size_info *s;
|
||||
|
||||
/* offset of the _GLOBAL_OFFSET_TABLE_ symbol from the start of the
|
||||
.got section */
|
||||
bfd_vma got_symbol_offset;
|
||||
|
||||
/* The size in bytes of the headers for the GOT and PLT. This includes
|
||||
the so-called reserved entries on some systems. */
|
||||
bfd_vma got_header_size;
|
||||
bfd_vma plt_header_size;
|
||||
|
||||
unsigned want_got_plt : 1;
|
||||
unsigned plt_readonly : 1;
|
||||
unsigned want_plt_sym : 1;
|
||||
unsigned plt_not_loaded : 1;
|
||||
unsigned plt_alignment : 4;
|
||||
unsigned can_gc_sections : 1;
|
||||
};
|
||||
|
||||
/* Information stored for each BFD section in an ELF file. This
|
||||
@ -557,7 +602,7 @@ typedef struct elf_linker_section
|
||||
bfd_vma max_hole_offset; /* maximum offset for the hole */
|
||||
elf_linker_section_enum_t which; /* which section this is */
|
||||
boolean hole_written_p; /* whether the hole has been initialized */
|
||||
int alignment; /* alignment for the section */
|
||||
unsigned int alignment; /* alignment for the section */
|
||||
flagword flags; /* flags to use to create the section */
|
||||
} elf_linker_section_t;
|
||||
|
||||
@ -613,8 +658,17 @@ struct elf_obj_tdata
|
||||
struct elf_link_hash_entry **sym_hashes;
|
||||
|
||||
/* A mapping from local symbols to offsets into the global offset
|
||||
table, used when linking. This is indexed by the symbol index. */
|
||||
bfd_vma *local_got_offsets;
|
||||
table, used when linking. This is indexed by the symbol index.
|
||||
Like for the globals, we use a union and two names primarily to
|
||||
document the intent of any particular piece of code. The field
|
||||
should be used as a count until size_dynamic_sections, at which
|
||||
point the contents of the .got is fixed. Afterward, if an entry
|
||||
is -1, then the symbol does not require a global offset table entry. */
|
||||
union
|
||||
{
|
||||
bfd_signed_vma *refcounts;
|
||||
bfd_vma *offsets;
|
||||
} local_got;
|
||||
|
||||
/* A mapping from local symbols to offsets into the various linker
|
||||
sections added. This is index by the symbol index. */
|
||||
@ -649,6 +703,9 @@ struct elf_obj_tdata
|
||||
find_nearest_line. */
|
||||
struct mips_elf_find_line *find_line_info;
|
||||
|
||||
/* A place to stash dwarf2 info for this bfd. */
|
||||
struct dwarf2_debug *dwarf2_find_line_info;
|
||||
|
||||
/* An array of stub sections indexed by symbol number, used by the
|
||||
MIPS ELF linker. FIXME: We should figure out some way to only
|
||||
include this field for a MIPS ELF target. */
|
||||
@ -658,10 +715,10 @@ struct elf_obj_tdata
|
||||
boolean flags_init;
|
||||
|
||||
/* Number of symbol version definitions we are about to emit. */
|
||||
int cverdefs;
|
||||
unsigned int cverdefs;
|
||||
|
||||
/* Number of symbol version references we are about to emit. */
|
||||
int cverrefs;
|
||||
unsigned int cverrefs;
|
||||
|
||||
/* Symbol version definitions in external objects. */
|
||||
Elf_Internal_Verdef *verdef;
|
||||
@ -690,7 +747,8 @@ struct elf_obj_tdata
|
||||
#define elf_gp(bfd) (elf_tdata(bfd) -> gp)
|
||||
#define elf_gp_size(bfd) (elf_tdata(bfd) -> gp_size)
|
||||
#define elf_sym_hashes(bfd) (elf_tdata(bfd) -> sym_hashes)
|
||||
#define elf_local_got_offsets(bfd) (elf_tdata(bfd) -> local_got_offsets)
|
||||
#define elf_local_got_refcounts(bfd) (elf_tdata(bfd) -> local_got.refcounts)
|
||||
#define elf_local_got_offsets(bfd) (elf_tdata(bfd) -> local_got.offsets)
|
||||
#define elf_local_ptr_offsets(bfd) (elf_tdata(bfd) -> linker_section_pointers)
|
||||
#define elf_dt_name(bfd) (elf_tdata(bfd) -> dt_name)
|
||||
#define elf_bad_symtab(bfd) (elf_tdata(bfd) -> bad_symtab)
|
||||
@ -742,6 +800,7 @@ extern bfd_reloc_status_type bfd_elf_generic_reloc PARAMS ((bfd *,
|
||||
bfd *,
|
||||
char **));
|
||||
extern boolean bfd_elf_mkobject PARAMS ((bfd *));
|
||||
extern boolean bfd_elf_mkcorefile PARAMS ((bfd *));
|
||||
extern Elf_Internal_Shdr *bfd_elf_find_section PARAMS ((bfd *, char *));
|
||||
extern boolean _bfd_elf_make_section_from_shdr
|
||||
PARAMS ((bfd *abfd, Elf_Internal_Shdr *hdr, const char *name));
|
||||
@ -761,6 +820,7 @@ extern boolean _bfd_elf_copy_private_symbol_data
|
||||
extern boolean _bfd_elf_copy_private_section_data
|
||||
PARAMS ((bfd *, asection *, bfd *, asection *));
|
||||
extern boolean _bfd_elf_write_object_contents PARAMS ((bfd *));
|
||||
extern boolean _bfd_elf_write_corefile_contents PARAMS ((bfd *));
|
||||
extern boolean _bfd_elf_set_section_contents PARAMS ((bfd *, sec_ptr, PTR,
|
||||
file_ptr,
|
||||
bfd_size_type));
|
||||
@ -962,6 +1022,33 @@ extern Elf_Internal_Rela *_bfd_elf64_link_read_relocs
|
||||
#define bfd_elf32_link_record_dynamic_symbol _bfd_elf_link_record_dynamic_symbol
|
||||
#define bfd_elf64_link_record_dynamic_symbol _bfd_elf_link_record_dynamic_symbol
|
||||
|
||||
extern boolean _bfd_elf_close_and_cleanup PARAMS ((bfd *));
|
||||
extern bfd_reloc_status_type _bfd_elf_rel_vtable_reloc_fn
|
||||
PARAMS ((bfd *, arelent *, struct symbol_cache_entry *, PTR,
|
||||
asection *, bfd *, char **));
|
||||
|
||||
boolean _bfd_elf32_gc_sections
|
||||
PARAMS ((bfd *abfd, struct bfd_link_info *info));
|
||||
boolean _bfd_elf32_gc_common_finalize_got_offsets
|
||||
PARAMS ((bfd *abfd, struct bfd_link_info *info));
|
||||
boolean _bfd_elf32_gc_common_final_link
|
||||
PARAMS ((bfd *, struct bfd_link_info *));
|
||||
boolean _bfd_elf32_gc_record_vtinherit
|
||||
PARAMS ((bfd *, asection *, struct elf_link_hash_entry *, bfd_vma));
|
||||
boolean _bfd_elf32_gc_record_vtentry
|
||||
PARAMS ((bfd *, asection *, struct elf_link_hash_entry *, bfd_vma));
|
||||
|
||||
boolean _bfd_elf64_gc_sections
|
||||
PARAMS ((bfd *abfd, struct bfd_link_info *info));
|
||||
boolean _bfd_elf64_gc_common_finalize_got_offsets
|
||||
PARAMS ((bfd *abfd, struct bfd_link_info *info));
|
||||
boolean _bfd_elf64_gc_common_final_link
|
||||
PARAMS ((bfd *, struct bfd_link_info *));
|
||||
boolean _bfd_elf64_gc_record_vtinherit
|
||||
PARAMS ((bfd *, asection *, struct elf_link_hash_entry *, bfd_vma));
|
||||
boolean _bfd_elf64_gc_record_vtentry
|
||||
PARAMS ((bfd *, asection *, struct elf_link_hash_entry *, bfd_vma));
|
||||
|
||||
/* MIPS ELF specific routines. */
|
||||
|
||||
extern boolean _bfd_mips_elf_object_p PARAMS ((bfd *));
|
||||
|
20
bfd/elf.c
20
bfd/elf.c
@ -3075,11 +3075,9 @@ prep_headers (abfd)
|
||||
case bfd_arch_arc:
|
||||
i_ehdrp->e_machine = EM_CYGNUS_ARC;
|
||||
break;
|
||||
/* start-sanitize-armelf */
|
||||
case bfd_arch_arm:
|
||||
i_ehdrp->e_machine = EM_ARM;
|
||||
break;
|
||||
/* end-sanitize-armelf */
|
||||
case bfd_arch_m32r:
|
||||
i_ehdrp->e_machine = EM_CYGNUS_M32R;
|
||||
break;
|
||||
@ -4738,3 +4736,21 @@ _bfd_elf_close_and_cleanup (abfd)
|
||||
|
||||
return _bfd_generic_close_and_cleanup (abfd);
|
||||
}
|
||||
|
||||
/* For Rel targets, we encode meaningful data for BFD_RELOC_VTABLE_ENTRY
|
||||
in the relocation's offset. Thus we cannot allow any sort of sanity
|
||||
range-checking to interfere. There is nothing else to do in processing
|
||||
this reloc. */
|
||||
|
||||
bfd_reloc_status_type
|
||||
_bfd_elf_rel_vtable_reloc_fn (abfd, re, symbol, data, is, obfd, errmsg)
|
||||
bfd *abfd;
|
||||
arelent *re;
|
||||
struct symbol_cache_entry *symbol;
|
||||
PTR data;
|
||||
asection *is;
|
||||
bfd *obfd;
|
||||
char **errmsg;
|
||||
{
|
||||
return bfd_reloc_ok;
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user