* readelf.c (dump_relocations): Special case R_ALPHA_LITUSE.
authorRichard Henderson <rth@redhat.com>
Tue, 31 May 2005 22:52:50 +0000 (22:52 +0000)
committerRichard Henderson <rth@redhat.com>
Tue, 31 May 2005 22:52:50 +0000 (22:52 +0000)
binutils/ChangeLog
binutils/readelf.c

index 97139f99288ffe4fea4ccd8b65acc7c81335c03c..1c91d203a2dec68a7425377a99773ab9950d5a33 100644 (file)
@@ -1,3 +1,7 @@
+2005-05-31  Richard Henderson  <rth@redhat.com>
+
+       * readelf.c (dump_relocations): Special case R_ALPHA_LITUSE.
+
 2005-05-29  Richard Henderson  <rth@redhat.com>
 
        * readelf.c (get_alpha_dynamic_type): New.
index 0523d5531e21cf76d3054ce98e8ed4e425611111..31deb55f1754d070e3774930db8efa87d2049bb8 100644 (file)
@@ -1243,7 +1243,31 @@ dump_relocations (FILE *file,
       else
        printf (do_wide ? "%-22.22s" : "%-17.17s", rtype);
 
-      if (symtab_index)
+      if (elf_header.e_machine == EM_ALPHA
+         && streq (rtype, "R_ALPHA_LITUSE")
+         && is_rela)
+       {
+         switch (rels[i].r_addend)
+           {
+           case LITUSE_ALPHA_ADDR:   rtype = "ADDR";   break;
+           case LITUSE_ALPHA_BASE:   rtype = "BASE";   break;
+           case LITUSE_ALPHA_BYTOFF: rtype = "BYTOFF"; break;
+           case LITUSE_ALPHA_JSR:    rtype = "JSR";    break;
+           case LITUSE_ALPHA_TLSGD:  rtype = "TLSGD";  break;
+           case LITUSE_ALPHA_TLSLDM: rtype = "TLSLDM"; break;
+           case LITUSE_ALPHA_JSRDIRECT: rtype = "JSRDIRECT"; break;
+           default: rtype = NULL;
+           }
+         if (rtype)
+           printf (" (%s)", rtype);
+         else
+           {
+             putchar (' ');
+             printf (_("<unknown addend: %lx>"),
+                     (unsigned long) rels[i].r_addend);
+           }
+       }
+      else if (symtab_index)
        {
          if (symtab == NULL || symtab_index >= nsyms)
            printf (" bad symbol index: %08lx", (unsigned long) symtab_index);
@@ -1309,8 +1333,7 @@ dump_relocations (FILE *file,
          print_vma (rels[i].r_addend, LONG_HEX);
        }
 
-      if (elf_header.e_machine == EM_SPARCV9
-         && streq (rtype, "R_SPARC_OLO10"))
+      if (elf_header.e_machine == EM_SPARCV9 && streq (rtype, "R_SPARC_OLO10"))
        printf (" + %lx", (unsigned long) ELF64_R_TYPE_DATA (info));
 
       putchar ('\n');