* elf.c ( _bfd_elf_print_private_bfd_data): Call
elf_backend_get_target_dtag if defined. * elf32-mips.c (elf_backend_get_target_dtag): Define. * elf64-mips.c: Likewise. * elfn32-mips.c: Likewise. * elfxx-mips.c (_bfd_mips_elf_get_target_dtag): New. * elfxx-mips.h (_bfd_mips_elf_get_target_dtag): Declare. * elf-bfd.h (elf_backend_get_target_dtag): Add prototype. * elfxx-target.h (elf_backend_get_target_dtag): Add default. (elf_backend_data): Add elf_backend_get_target_dtag.
This commit is contained in:
parent
2faca73a4e
commit
ad9563d653
9 changed files with 132 additions and 4 deletions
|
@ -1,3 +1,16 @@
|
|||
2008-02-27 Catherine Moore <clm@codesourcery.com>
|
||||
|
||||
* elf.c ( _bfd_elf_print_private_bfd_data): Call
|
||||
elf_backend_get_target_dtag if defined.
|
||||
* elf32-mips.c (elf_backend_get_target_dtag): Define.
|
||||
* elf64-mips.c: Likewise.
|
||||
* elfn32-mips.c: Likewise.
|
||||
* elfxx-mips.c (_bfd_mips_elf_get_target_dtag): New.
|
||||
* elfxx-mips.h (_bfd_mips_elf_get_target_dtag): Declare.
|
||||
* elf-bfd.h (elf_backend_get_target_dtag): Add prototype.
|
||||
* elfxx-target.h (elf_backend_get_target_dtag): Add default.
|
||||
(elf_backend_data): Add elf_backend_get_target_dtag.
|
||||
|
||||
2008-02-26 Alan Modra <amodra@bigpond.net.au>
|
||||
|
||||
* elf32-ppc.c (ppc_elf_check_relocs): Set pointer_equality_needed
|
||||
|
|
|
@ -993,6 +993,11 @@ struct elf_backend_data
|
|||
(struct elf_link_hash_entry *, const Elf_Internal_Sym *, bfd_boolean,
|
||||
bfd_boolean);
|
||||
|
||||
/* This function, if defined, will return a string containing the
|
||||
name of a target-specific dynamic tag. */
|
||||
char *(*elf_backend_get_target_dtag)
|
||||
(bfd_vma);
|
||||
|
||||
/* Decide whether an undefined symbol is special and can be ignored.
|
||||
This is the case for OPTIONAL symbols on IRIX. */
|
||||
bfd_boolean (*elf_backend_ignore_undef_symbol)
|
||||
|
|
15
bfd/elf.c
15
bfd/elf.c
|
@ -1204,9 +1204,10 @@ _bfd_elf_print_private_bfd_data (bfd *abfd, void *farg)
|
|||
for (; extdyn < extdynend; extdyn += extdynsize)
|
||||
{
|
||||
Elf_Internal_Dyn dyn;
|
||||
const char *name;
|
||||
const char *name = "";
|
||||
char ab[20];
|
||||
bfd_boolean stringp;
|
||||
const struct elf_backend_data *bed = get_elf_backend_data (abfd);
|
||||
|
||||
(*swap_dyn_in) (abfd, extdyn, &dyn);
|
||||
|
||||
|
@ -1217,8 +1218,14 @@ _bfd_elf_print_private_bfd_data (bfd *abfd, void *farg)
|
|||
switch (dyn.d_tag)
|
||||
{
|
||||
default:
|
||||
sprintf (ab, "0x%lx", (unsigned long) dyn.d_tag);
|
||||
name = ab;
|
||||
if (bed->elf_backend_get_target_dtag)
|
||||
name = (*bed->elf_backend_get_target_dtag) (dyn.d_tag);
|
||||
|
||||
if (!strcmp (name, ""))
|
||||
{
|
||||
sprintf (ab, "0x%lx", (unsigned long) dyn.d_tag);
|
||||
name = ab;
|
||||
}
|
||||
break;
|
||||
|
||||
case DT_NEEDED: name = "NEEDED"; stringp = TRUE; break;
|
||||
|
@ -1281,7 +1288,7 @@ _bfd_elf_print_private_bfd_data (bfd *abfd, void *farg)
|
|||
case DT_GNU_HASH: name = "GNU_HASH"; break;
|
||||
}
|
||||
|
||||
fprintf (f, " %-11s ", name);
|
||||
fprintf (f, " %-20s ", name);
|
||||
if (! stringp)
|
||||
fprintf (f, "0x%lx", (unsigned long) dyn.d_un.d_val);
|
||||
else
|
||||
|
|
|
@ -1558,6 +1558,7 @@ static const struct ecoff_debug_swap mips_elf32_ecoff_debug_swap = {
|
|||
#define elf_backend_check_relocs _bfd_mips_elf_check_relocs
|
||||
#define elf_backend_merge_symbol_attribute \
|
||||
_bfd_mips_elf_merge_symbol_attribute
|
||||
#define elf_backend_get_target_dtag _bfd_mips_elf_get_target_dtag
|
||||
#define elf_backend_adjust_dynamic_symbol \
|
||||
_bfd_mips_elf_adjust_dynamic_symbol
|
||||
#define elf_backend_always_size_sections \
|
||||
|
|
|
@ -3107,6 +3107,7 @@ const struct elf_size_info mips_elf64_size_info =
|
|||
#define elf_backend_check_relocs _bfd_mips_elf_check_relocs
|
||||
#define elf_backend_merge_symbol_attribute \
|
||||
_bfd_mips_elf_merge_symbol_attribute
|
||||
#define elf_backend_get_target_dtag _bfd_mips_elf_get_target_dtag
|
||||
#define elf_backend_adjust_dynamic_symbol \
|
||||
_bfd_mips_elf_adjust_dynamic_symbol
|
||||
#define elf_backend_always_size_sections \
|
||||
|
|
|
@ -2361,6 +2361,7 @@ static const struct ecoff_debug_swap mips_elf32_ecoff_debug_swap = {
|
|||
#define elf_backend_check_relocs _bfd_mips_elf_check_relocs
|
||||
#define elf_backend_merge_symbol_attribute \
|
||||
_bfd_mips_elf_merge_symbol_attribute
|
||||
#define elf_backend_get_target_dtag _bfd_mips_elf_get_target_dtag
|
||||
#define elf_backend_adjust_dynamic_symbol \
|
||||
_bfd_mips_elf_adjust_dynamic_symbol
|
||||
#define elf_backend_always_size_sections \
|
||||
|
|
|
@ -11700,6 +11700,101 @@ _bfd_mips_elf_set_private_flags (bfd *abfd, flagword flags)
|
|||
return TRUE;
|
||||
}
|
||||
|
||||
char *
|
||||
_bfd_mips_elf_get_target_dtag (bfd_vma dtag)
|
||||
{
|
||||
switch (dtag)
|
||||
{
|
||||
default: return "";
|
||||
case DT_MIPS_RLD_VERSION:
|
||||
return "MIPS_RLD_VERSION";
|
||||
case DT_MIPS_TIME_STAMP:
|
||||
return "MIPS_TIME_STAMP";
|
||||
case DT_MIPS_ICHECKSUM:
|
||||
return "MIPS_ICHECKSUM";
|
||||
case DT_MIPS_IVERSION:
|
||||
return "MIPS_IVERSION";
|
||||
case DT_MIPS_FLAGS:
|
||||
return "MIPS_FLAGS";
|
||||
case DT_MIPS_BASE_ADDRESS:
|
||||
return "MIPS_BASE_ADDRESS";
|
||||
case DT_MIPS_MSYM:
|
||||
return "MIPS_MSYM";
|
||||
case DT_MIPS_CONFLICT:
|
||||
return "MIPS_CONFLICT";
|
||||
case DT_MIPS_LIBLIST:
|
||||
return "MIPS_LIBLIST";
|
||||
case DT_MIPS_LOCAL_GOTNO:
|
||||
return "MIPS_LOCAL_GOTNO";
|
||||
case DT_MIPS_CONFLICTNO:
|
||||
return "MIPS_CONFLICTNO";
|
||||
case DT_MIPS_LIBLISTNO:
|
||||
return "MIPS_LIBLISTNO";
|
||||
case DT_MIPS_SYMTABNO:
|
||||
return "MIPS_SYMTABNO";
|
||||
case DT_MIPS_UNREFEXTNO:
|
||||
return "MIPS_UNREFEXTNO";
|
||||
case DT_MIPS_GOTSYM:
|
||||
return "MIPS_GOTSYM";
|
||||
case DT_MIPS_HIPAGENO:
|
||||
return "MIPS_HIPAGENO";
|
||||
case DT_MIPS_RLD_MAP:
|
||||
return "MIPS_RLD_MAP";
|
||||
case DT_MIPS_DELTA_CLASS:
|
||||
return "MIPS_DELTA_CLASS";
|
||||
case DT_MIPS_DELTA_CLASS_NO:
|
||||
return "MIPS_DELTA_CLASS_NO";
|
||||
case DT_MIPS_DELTA_INSTANCE:
|
||||
return "MIPS_DELTA_INSTANCE";
|
||||
case DT_MIPS_DELTA_INSTANCE_NO:
|
||||
return "MIPS_DELTA_INSTANCE_NO";
|
||||
case DT_MIPS_DELTA_RELOC:
|
||||
return "MIPS_DELTA_RELOC";
|
||||
case DT_MIPS_DELTA_RELOC_NO:
|
||||
return "MIPS_DELTA_RELOC_NO";
|
||||
case DT_MIPS_DELTA_SYM:
|
||||
return "MIPS_DELTA_SYM";
|
||||
case DT_MIPS_DELTA_SYM_NO:
|
||||
return "MIPS_DELTA_SYM_NO";
|
||||
case DT_MIPS_DELTA_CLASSSYM:
|
||||
return "MIPS_DELTA_CLASSSYM";
|
||||
case DT_MIPS_DELTA_CLASSSYM_NO:
|
||||
return "MIPS_DELTA_CLASSSYM_NO";
|
||||
case DT_MIPS_CXX_FLAGS:
|
||||
return "MIPS_CXX_FLAGS";
|
||||
case DT_MIPS_PIXIE_INIT:
|
||||
return "MIPS_PIXIE_INIT";
|
||||
case DT_MIPS_SYMBOL_LIB:
|
||||
return "MIPS_SYMBOL_LIB";
|
||||
case DT_MIPS_LOCALPAGE_GOTIDX:
|
||||
return "MIPS_LOCALPAGE_GOTIDX";
|
||||
case DT_MIPS_LOCAL_GOTIDX:
|
||||
return "MIPS_LOCAL_GOTIDX";
|
||||
case DT_MIPS_HIDDEN_GOTIDX:
|
||||
return "MIPS_HIDDEN_GOTIDX";
|
||||
case DT_MIPS_PROTECTED_GOTIDX:
|
||||
return "MIPS_PROTECTED_GOT_IDX";
|
||||
case DT_MIPS_OPTIONS:
|
||||
return "MIPS_OPTIONS";
|
||||
case DT_MIPS_INTERFACE:
|
||||
return "MIPS_INTERFACE";
|
||||
case DT_MIPS_DYNSTR_ALIGN:
|
||||
return "DT_MIPS_DYNSTR_ALIGN";
|
||||
case DT_MIPS_INTERFACE_SIZE:
|
||||
return "DT_MIPS_INTERFACE_SIZE";
|
||||
case DT_MIPS_RLD_TEXT_RESOLVE_ADDR:
|
||||
return "DT_MIPS_RLD_TEXT_RESOLVE_ADDR";
|
||||
case DT_MIPS_PERF_SUFFIX:
|
||||
return "DT_MIPS_PERF_SUFFIX";
|
||||
case DT_MIPS_COMPACT_SIZE:
|
||||
return "DT_MIPS_COMPACT_SIZE";
|
||||
case DT_MIPS_GP_VALUE:
|
||||
return "DT_MIPS_GP_VALUE";
|
||||
case DT_MIPS_AUX_DYNAMIC:
|
||||
return "DT_MIPS_AUX_DYNAMIC";
|
||||
}
|
||||
}
|
||||
|
||||
bfd_boolean
|
||||
_bfd_mips_elf_print_private_bfd_data (bfd *abfd, void *ptr)
|
||||
{
|
||||
|
|
|
@ -138,6 +138,7 @@ extern bfd_vma _bfd_mips_elf_sign_extend
|
|||
(bfd_vma, int);
|
||||
extern void _bfd_mips_elf_merge_symbol_attribute
|
||||
(struct elf_link_hash_entry *, const Elf_Internal_Sym *, bfd_boolean, bfd_boolean);
|
||||
extern char *_bfd_mips_elf_get_target_dtag (bfd_vma);
|
||||
extern bfd_boolean _bfd_mips_elf_ignore_undef_symbol
|
||||
(struct elf_link_hash_entry *);
|
||||
|
||||
|
|
|
@ -482,6 +482,9 @@
|
|||
#ifndef elf_backend_merge_symbol_attribute
|
||||
#define elf_backend_merge_symbol_attribute NULL
|
||||
#endif
|
||||
#ifndef elf_backend_get_target_dtag
|
||||
#define elf_backend_get_target_dtag NULL
|
||||
#endif
|
||||
#ifndef elf_backend_ignore_undef_symbol
|
||||
#define elf_backend_ignore_undef_symbol NULL
|
||||
#endif
|
||||
|
@ -672,6 +675,7 @@ static struct elf_backend_data elfNN_bed =
|
|||
elf_backend_hide_symbol,
|
||||
elf_backend_fixup_symbol,
|
||||
elf_backend_merge_symbol_attribute,
|
||||
elf_backend_get_target_dtag,
|
||||
elf_backend_ignore_undef_symbol,
|
||||
elf_backend_emit_relocs,
|
||||
elf_backend_count_relocs,
|
||||
|
|
Loading…
Reference in a new issue