This is the mail archive of the binutils@sources.redhat.com mailing list for the binutils project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [patch] print additional mips elf 64 reloc type info in readelf



Hi all. :)

--- Nick Clifton <nickc@cambridge.redhat.com> wrote:
> Hi Timothy,
> 
[snip]
> I would recommend multiple lines.  Readelf is supposed to be an
[snip]

Revised patch and changelog below.  The output for 64-bit mips is now
on three lines, like so:

Relocation section '.rel.dyn' at offset 0x31c38 contains 3616
entries:
  Offset          Info           Type           Sym. Value    Sym.
Name
000000000000  000000000000 R_MIPS_NONE      
                    Type2: R_MIPS_NONE      
                    Type3: R_MIPS_NONE      
00000db321c0  001000001203 R_MIPS_REL32      000000000d9c82d0  .text 
      
                    Type2: R_MIPS_64        
                    Type3: R_MIPS_NONE      
00000db321c8  001000001203 R_MIPS_REL32      000000000d9c82d0  .text 
      
                    Type2: R_MIPS_64        
                    Type3: R_MIPS_NONE      
(...)


I compactified 32-bit output a little bit too.

-Tim


[src/binutils/ChangeLog]
2002-02-18  Timothy Daly  <remote_bob@yahoo.com>

	* readelf.c (dump_relocations): Display 2nd and 3rd reloc 
	types for 64-bit MIPS.  Narrow some fields for 80-char 
	output.
	(dump_relocations): Change spelling from 'unrecognised' 
	to 'unrecognized'.
	(decode_ARM_machine_flags): Likewise.
	(parse_args): Likewise.
	(read_and_display_attr_value): Likewise.
	(display_debug_section): Likewise.

Index: readelf.c
===================================================================
RCS file: /cvs/src/src/binutils/readelf.c,v
retrieving revision 1.151
diff -u -p -r1.151 readelf.c
--- readelf.c	2002/02/13 18:14:42	1.151
+++ readelf.c	2002/02/18 21:53:04
@@ -846,28 +846,32 @@ dump_relocations (file, rel_offset, rel_
     {
       if (is_rela)
 	printf
-	  (_(" Offset     Info    Type            Symbol's Value  Symbol's
Name          Addend\n"));
+	  (_(" Offset     Info    Type            Sym. Value  Sym. Name    
     Addend\n"));
       else
 	printf
-	  (_(" Offset     Info    Type            Symbol's Value  Symbol's
Name\n"));
+	  (_(" Offset     Info    Type            Sym. Value  Sym.
Name\n"));
     }
   else
     {
       if (is_rela)
 	printf
-	  (_("    Offset             Info            Type              
Symbol's Value   Symbol's Name           Addend\n"));
+	  (_("  Offset          Info           Type           Sym. Value   
Sym. Name   Addend\n"));
       else
 	printf
-	  (_("    Offset             Info            Type              
Symbol's Value   Symbol's Name\n"));
+	  (_("  Offset          Info           Type           Sym. Value   
Sym. Name\n"));
     }
 
   for (i = 0; i < rel_size; i++)
     {
       const char * rtype;
+      const char * rtype2 = NULL;
+      const char * rtype3 = NULL;
       bfd_vma      offset;
       bfd_vma      info;
       bfd_vma      symtab_index;
       bfd_vma      type;
+      bfd_vma      type2 = NULL;
+      bfd_vma      type3 = NULL;
 
       if (is_rela)
 	{
@@ -889,6 +893,12 @@ dump_relocations (file, rel_offset, rel_
 	{
 	  if (elf_header.e_machine == EM_SPARCV9)
 	    type       = ELF64_R_TYPE_ID (info);
+	  else if (elf_header.e_machine == EM_MIPS) 
+	    {
+	      type = ELF64_MIPS_R_TYPE (info);
+	      type2 = ELF64_MIPS_R_TYPE2 (info);
+	      type3 = ELF64_MIPS_R_TYPE3 (info);
+	    }
 	  else
 	    type       = ELF64_R_TYPE (info);
 	  /* The #ifdef BFD64 below is to prevent a compile time warning.
@@ -910,13 +920,13 @@ dump_relocations (file, rel_offset, rel_
       else
 	{
 #ifdef _bfd_int64_low
-	  printf ("%8.8lx%8.8lx  %8.8lx%8.8lx ",
+	  printf ("%4.4lx%8.8lx  %4.4lx%8.8lx ",
 		  _bfd_int64_high (offset),
 		  _bfd_int64_low (offset),
 		  _bfd_int64_high (info),
 		  _bfd_int64_low (info));
 #else
-	  printf ("%16.16lx  %16.16lx ", offset, info);
+	  printf ("%12.12lx  %12.12lx ", offset, info);
 #endif
 	}
 
@@ -1006,6 +1016,11 @@ dump_relocations (file, rel_offset, rel_
 	case EM_MIPS:
 	case EM_MIPS_RS3_LE:
 	  rtype = elf_mips_reloc_type (type);
+	  if (!is_32bit_elf) 
+	    {
+	      rtype2 = elf_mips_reloc_type (type2);
+	      rtype3 = elf_mips_reloc_type (type3);
+	    }
 	  break;
 
 	case EM_ALPHA:
@@ -1067,12 +1082,12 @@ dump_relocations (file, rel_offset, rel_
 
       if (rtype == NULL)
 #ifdef _bfd_int64_low
-	printf (_("unrecognised: %-7lx"), _bfd_int64_low (type));
+	printf (_("unrecognized: %-7lx"), _bfd_int64_low (type));
 #else
-	printf (_("unrecognised: %-7lx"), type);
+	printf (_("unrecognized: %-7lx"), type);
 #endif
       else
-	printf ("%-21.21s", rtype);
+	printf ("%-17.17s", rtype);
 
       if (symtab_index)
 	{
@@ -1089,11 +1104,11 @@ dump_relocations (file, rel_offset, rel_
 	      printf ("  ");
 
 	      if (psym->st_name == 0)
-		print_symbol (-25, SECTION_NAME (section_headers +
psym->st_shndx));
+		print_symbol (-13, SECTION_NAME (section_headers +
psym->st_shndx));
 	      else if (strtab == NULL)
 		printf (_("<string table index %3ld>"), psym->st_name);
 	      else
-		print_symbol (-25, strtab + psym->st_name);
+		print_symbol (-13, strtab + psym->st_name);
 
 	      if (is_rela)
 		printf (" + %lx", (unsigned long) relas [i].r_addend);
@@ -1101,7 +1116,7 @@ dump_relocations (file, rel_offset, rel_
 	}
       else if (is_rela)
 	{
-	  printf ("%*c", is_32bit_elf ? 34 : 26, ' ');
+	  printf ("%*c", is_32bit_elf ? 28 : 20, ' ');
 	  print_vma (relas[i].r_addend, LONG_HEX);
 	}
 
@@ -1110,6 +1125,30 @@ dump_relocations (file, rel_offset, rel_
 	printf (" + %lx", (unsigned long) ELF64_R_TYPE_DATA (info));
 
       putchar ('\n');
+      if (!is_32bit_elf && elf_header.e_machine == EM_MIPS) 
+	{
+	  printf("                    Type2: ");
+	  if (rtype2 == NULL)
+#ifdef _bfd_int64_low
+	    printf (_("unrecognized: %-7lx"), _bfd_int64_low (type2));
+#else
+	    printf (_("unrecognized: %-7lx"), type2);
+#endif
+	  else
+	    printf ("%-17.17s", rtype2);
+          putchar ('\n');
+
+	  printf("                    Type3: ");
+	  if (rtype3 == NULL)
+#ifdef _bfd_int64_low
+	    printf (_("unrecognized: %-7lx"), _bfd_int64_low (type3));
+#else
+	    printf (_("unrecognized: %-7lx"), type3);
+#endif
+	  else
+	    printf ("%-17.17s", rtype3);
+          putchar ('\n');
+	}
     }
 
   if (is_rela)
@@ -1504,7 +1543,7 @@ decode_ARM_machine_flags (e_flags, buf)
   switch (eabi)
     {
     default:
-      strcat (buf, ", <unrecognised EABI>");
+      strcat (buf, ", <unrecognized EABI>");
       if (e_flags)
 	unknown = 1;
       break;
@@ -2373,7 +2412,7 @@ parse_args (argc, argv)
 		    break;
 
 		  default:
-		    warn (_("Unrecognised debug option '%s'\n"), optarg);
+		    warn (_("Unrecognized debug option '%s'\n"), optarg);
 		    break;
 		  }
 	    }
@@ -7379,7 +7418,7 @@ read_and_display_attr_value (attribute, 
       break;
 
     default:
-      warn (_("Unrecognised form: %d\n"), form);
+      warn (_("Unrecognized form: %d\n"), form);
       break;
     }
 
@@ -8602,7 +8641,7 @@ display_debug_section (section, file)
       }
 
   if (i == -1)
-    printf (_("Unrecognised debug section: %s\n"), name);
+    printf (_("Unrecognized debug section: %s\n"), name);
 
   free (start);
 


__________________________________________________
Do You Yahoo!?
Yahoo! Sports - Coverage of the 2002 Olympic Games
http://sports.yahoo.com
Index: readelf.c
===================================================================
RCS file: /cvs/src/src/binutils/readelf.c,v
retrieving revision 1.151
diff -u -p -r1.151 readelf.c
--- readelf.c	2002/02/13 18:14:42	1.151
+++ readelf.c	2002/02/18 21:53:04
@@ -846,28 +846,32 @@ dump_relocations (file, rel_offset, rel_
     {
       if (is_rela)
 	printf
-	  (_(" Offset     Info    Type            Symbol's Value  Symbol's Name          Addend\n"));
+	  (_(" Offset     Info    Type            Sym. Value  Sym. Name          Addend\n"));
       else
 	printf
-	  (_(" Offset     Info    Type            Symbol's Value  Symbol's Name\n"));
+	  (_(" Offset     Info    Type            Sym. Value  Sym. Name\n"));
     }
   else
     {
       if (is_rela)
 	printf
-	  (_("    Offset             Info            Type               Symbol's Value   Symbol's Name           Addend\n"));
+	  (_("  Offset          Info           Type           Sym. Value    Sym. Name   Addend\n"));
       else
 	printf
-	  (_("    Offset             Info            Type               Symbol's Value   Symbol's Name\n"));
+	  (_("  Offset          Info           Type           Sym. Value    Sym. Name\n"));
     }
 
   for (i = 0; i < rel_size; i++)
     {
       const char * rtype;
+      const char * rtype2 = NULL;
+      const char * rtype3 = NULL;
       bfd_vma      offset;
       bfd_vma      info;
       bfd_vma      symtab_index;
       bfd_vma      type;
+      bfd_vma      type2 = NULL;
+      bfd_vma      type3 = NULL;
 
       if (is_rela)
 	{
@@ -889,6 +893,12 @@ dump_relocations (file, rel_offset, rel_
 	{
 	  if (elf_header.e_machine == EM_SPARCV9)
 	    type       = ELF64_R_TYPE_ID (info);
+	  else if (elf_header.e_machine == EM_MIPS) 
+	    {
+	      type = ELF64_MIPS_R_TYPE (info);
+	      type2 = ELF64_MIPS_R_TYPE2 (info);
+	      type3 = ELF64_MIPS_R_TYPE3 (info);
+	    }
 	  else
 	    type       = ELF64_R_TYPE (info);
 	  /* The #ifdef BFD64 below is to prevent a compile time warning.
@@ -910,13 +920,13 @@ dump_relocations (file, rel_offset, rel_
       else
 	{
 #ifdef _bfd_int64_low
-	  printf ("%8.8lx%8.8lx  %8.8lx%8.8lx ",
+	  printf ("%4.4lx%8.8lx  %4.4lx%8.8lx ",
 		  _bfd_int64_high (offset),
 		  _bfd_int64_low (offset),
 		  _bfd_int64_high (info),
 		  _bfd_int64_low (info));
 #else
-	  printf ("%16.16lx  %16.16lx ", offset, info);
+	  printf ("%12.12lx  %12.12lx ", offset, info);
 #endif
 	}
 
@@ -1006,6 +1016,11 @@ dump_relocations (file, rel_offset, rel_
 	case EM_MIPS:
 	case EM_MIPS_RS3_LE:
 	  rtype = elf_mips_reloc_type (type);
+	  if (!is_32bit_elf) 
+	    {
+	      rtype2 = elf_mips_reloc_type (type2);
+	      rtype3 = elf_mips_reloc_type (type3);
+	    }
 	  break;
 
 	case EM_ALPHA:
@@ -1067,12 +1082,12 @@ dump_relocations (file, rel_offset, rel_
 
       if (rtype == NULL)
 #ifdef _bfd_int64_low
-	printf (_("unrecognised: %-7lx"), _bfd_int64_low (type));
+	printf (_("unrecognized: %-7lx"), _bfd_int64_low (type));
 #else
-	printf (_("unrecognised: %-7lx"), type);
+	printf (_("unrecognized: %-7lx"), type);
 #endif
       else
-	printf ("%-21.21s", rtype);
+	printf ("%-17.17s", rtype);
 
       if (symtab_index)
 	{
@@ -1089,11 +1104,11 @@ dump_relocations (file, rel_offset, rel_
 	      printf ("  ");
 
 	      if (psym->st_name == 0)
-		print_symbol (-25, SECTION_NAME (section_headers + psym->st_shndx));
+		print_symbol (-13, SECTION_NAME (section_headers + psym->st_shndx));
 	      else if (strtab == NULL)
 		printf (_("<string table index %3ld>"), psym->st_name);
 	      else
-		print_symbol (-25, strtab + psym->st_name);
+		print_symbol (-13, strtab + psym->st_name);
 
 	      if (is_rela)
 		printf (" + %lx", (unsigned long) relas [i].r_addend);
@@ -1101,7 +1116,7 @@ dump_relocations (file, rel_offset, rel_
 	}
       else if (is_rela)
 	{
-	  printf ("%*c", is_32bit_elf ? 34 : 26, ' ');
+	  printf ("%*c", is_32bit_elf ? 28 : 20, ' ');
 	  print_vma (relas[i].r_addend, LONG_HEX);
 	}
 
@@ -1110,6 +1125,30 @@ dump_relocations (file, rel_offset, rel_
 	printf (" + %lx", (unsigned long) ELF64_R_TYPE_DATA (info));
 
       putchar ('\n');
+      if (!is_32bit_elf && elf_header.e_machine == EM_MIPS) 
+	{
+	  printf("                    Type2: ");
+	  if (rtype2 == NULL)
+#ifdef _bfd_int64_low
+	    printf (_("unrecognized: %-7lx"), _bfd_int64_low (type2));
+#else
+	    printf (_("unrecognized: %-7lx"), type2);
+#endif
+	  else
+	    printf ("%-17.17s", rtype2);
+          putchar ('\n');
+
+	  printf("                    Type3: ");
+	  if (rtype3 == NULL)
+#ifdef _bfd_int64_low
+	    printf (_("unrecognized: %-7lx"), _bfd_int64_low (type3));
+#else
+	    printf (_("unrecognized: %-7lx"), type3);
+#endif
+	  else
+	    printf ("%-17.17s", rtype3);
+          putchar ('\n');
+	}
     }
 
   if (is_rela)
@@ -1504,7 +1543,7 @@ decode_ARM_machine_flags (e_flags, buf)
   switch (eabi)
     {
     default:
-      strcat (buf, ", <unrecognised EABI>");
+      strcat (buf, ", <unrecognized EABI>");
       if (e_flags)
 	unknown = 1;
       break;
@@ -2373,7 +2412,7 @@ parse_args (argc, argv)
 		    break;
 
 		  default:
-		    warn (_("Unrecognised debug option '%s'\n"), optarg);
+		    warn (_("Unrecognized debug option '%s'\n"), optarg);
 		    break;
 		  }
 	    }
@@ -7379,7 +7418,7 @@ read_and_display_attr_value (attribute, 
       break;
 
     default:
-      warn (_("Unrecognised form: %d\n"), form);
+      warn (_("Unrecognized form: %d\n"), form);
       break;
     }
 
@@ -8602,7 +8641,7 @@ display_debug_section (section, file)
       }
 
   if (i == -1)
-    printf (_("Unrecognised debug section: %s\n"), name);
+    printf (_("Unrecognized debug section: %s\n"), name);
 
   free (start);
 

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]