Jakub Jelinek <jj@ultra.linux.cz>
authorRichard Henderson <rth@redhat.com>
Thu, 8 Jul 1999 15:49:41 +0000 (15:49 +0000)
committerRichard Henderson <rth@redhat.com>
Thu, 8 Jul 1999 15:49:41 +0000 (15:49 +0000)
        * readelf.c (guess_is_rela): Sparcv9 and v8plus use rela.
        (dump_relocations): Use ELF64_R_TYPE_ID for Sparc, for R_SPARC_OLO10
        print the secondary addend.
        (get_machine_flags): Print Sparc machine flags.
        (get_symbol_type): Print STT_REGISTER.

binutils/ChangeLog
binutils/readelf.c

index aeded36309247c2ce91f2ee34f77cdf4b07fdaa1..17f6805331dba39e4061fb59033872b5736cbb15 100644 (file)
@@ -1,3 +1,11 @@
+1999-07-08  Jakub Jelinek  <jj@ultra.linux.cz>
+
+       * readelf.c (guess_is_rela): Sparcv9 and v8plus use rela.
+       (dump_relocations): Use ELF64_R_TYPE_ID for Sparc, for R_SPARC_OLO10
+       print the secondary addend.
+       (get_machine_flags): Print Sparc machine flags.
+       (get_symbol_type): Print STT_REGISTER.
+
 1999-07-08  Ian Lance Taylor  <ian@zembu.com>
 
        * stabs.c (parse_stab_type): Fix handling of template names with
index 709824d1ed4a3badfe0a18fc7f52484e900404f0..84f73f13b73df8b3067bb52caee64c083d021b4b 100644 (file)
@@ -414,6 +414,8 @@ guess_is_rela (e_machine)
       
       /* Targets that use RELA relocations.  */
     case EM_68K:
+    case EM_SPARC32PLUS:
+    case EM_SPARCV9:
     case EM_SPARC:
     case EM_PPC:
     case EM_CYGNUS_V850:
@@ -605,7 +607,10 @@ dump_relocations (file, rel_offset, rel_size, symtab, nsyms, strtab, is_rela)
        }
       else
        {
-         type         = ELF64_R_TYPE (info);
+         if (elf_header.e_machine == EM_SPARCV9)
+           type       = ELF64_R_TYPE_ID (info);
+         else
+           type       = ELF64_R_TYPE (info);
          symtab_index = ELF64_R_SYM  (info);
        }
 
@@ -742,6 +747,10 @@ dump_relocations (file, rel_offset, rel_size, symtab, nsyms, strtab, is_rela)
       else if (is_rela)
        printf ("%34c%lx", ' ', (unsigned long) relas[i].r_addend);
 
+      if (elf_header.e_machine == EM_SPARCV9
+         && !strcmp (rtype, "R_SPARC_OLO10"))
+       printf (" + %lx", (unsigned long) ELF64_R_TYPE_DATA (info));
+
       putchar ('\n');
     }
 
@@ -1062,6 +1071,29 @@ get_machine_flags (e_flags, e_machine)
          if ((e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_4)
            strcat (buf, ", mips4");
          break;
+
+       case EM_SPARCV9:
+         if (e_flags & EF_SPARC_32PLUS)
+           strcat (buf, ", v8+");
+
+         if (e_flags & EF_SPARC_SUN_US1)
+           strcat (buf, ", ultrasparc");
+
+         if (e_flags & EF_SPARC_HAL_R1)
+           strcat (buf, ", halr1");
+
+         if (e_flags & EF_SPARC_LEDATA)
+           strcat (buf, ", ledata");
+
+         if ((e_flags & EF_SPARCV9_MM) == EF_SPARCV9_TSO)
+           strcat (buf, ", tso");
+
+         if ((e_flags & EF_SPARCV9_MM) == EF_SPARCV9_PSO)
+           strcat (buf, ", pso");
+
+         if ((e_flags & EF_SPARCV9_MM) == EF_SPARCV9_RMO)
+           strcat (buf, ", rmo");
+         break;
        }
     }
 
@@ -3393,6 +3425,9 @@ get_symbol_type (type)
        {
          if (elf_header.e_machine == EM_ARM && type == STT_ARM_TFUNC)
            return _("THUMB_FUNC");
+           
+         if (elf_header.e_machine == EM_SPARCV9 && type == STT_REGISTER)
+           return _("REGISTER");
          
          sprintf (buff, _("<processor specific>: %d"), type);
        }