* elf.c ( _bfd_elf_print_private_bfd_data): Call
authorCatherine Moore <clm@redhat.com>
Wed, 27 Feb 2008 17:06:06 +0000 (17:06 +0000)
committerCatherine Moore <clm@redhat.com>
Wed, 27 Feb 2008 17:06:06 +0000 (17:06 +0000)
        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.

bfd/ChangeLog
bfd/elf-bfd.h
bfd/elf.c
bfd/elf32-mips.c
bfd/elf64-mips.c
bfd/elfn32-mips.c
bfd/elfxx-mips.c
bfd/elfxx-mips.h
bfd/elfxx-target.h

index 1b54ff76e84619fb66861f36f7e2ea35e1a1160b..1646c19d641440174aa96b4a9fec12a223680706 100644 (file)
@@ -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
index 444b9a775b61356d3c693b985d9ef43934241692..164cbde83ef82a7fcdb931be359e95c5f47da05b 100644 (file)
@@ -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)
index b0030c7473c31d4dcb3729e824372ea252613a8a..54375c2757c63dbdc204d2bb5b07146cb4008769 100644 (file)
--- a/bfd/elf.c
+++ b/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
index 81fb8c2046c11f0d0b519b4621d7f66fb872f7fd..5e3eac66d2a48e40e316b26cc155698fcecbc76a 100644 (file)
@@ -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 \
index 025f9fbde8713935f122e730104085d695f3096b..e8e00fb9e8c1137e98b627e6d2494153fc947df5 100644 (file)
@@ -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 \
index 9052dfd7e342baa4b93e05347ad6103c2b5375c2..74133c5a9df3304344eaa42834c1627ae3523f48 100644 (file)
@@ -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 \
index 514b14cfe764e892801dee88d0a4a165689f70bc..4f141402b0b9e05937b9239cd4118e973b68e136 100644 (file)
@@ -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)
 {
index f8635da1997431906d2e2b48d1707f21902f6743..79d234af338d53731810364e7482080495cd8f46 100644 (file)
@@ -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 *);
 
index 2e6be6d84ba9d6f607cd95766f2f6f3604bedb18..148f5cb2bce24c80a1d679508615c365be0d8447 100644 (file)
 #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,