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: readelf truncates symbol names in relocation sections


Hi

>>>>> "Julian" == Julian v Bock <julian@OpenIT.DE> writes:

    Julian> Just recognized that the CVS version already includes the
    Julian> --wide switch. I am going to truncate the symbol names
    Julian> accordingly.

I have prepared a new patch. All symbol names (not just the symbols
from relocation sections) are truncated to 25 characters unless
the --wide switch is used.

Julian


diff -ruN binutils/binutils/ChangeLog binutils.new/binutils/ChangeLog
--- binutils/binutils/ChangeLog	Mon Dec 10 13:27:17 2001
+++ binutils.new/binutils/ChangeLog	Thu Dec 20 01:28:04 2001
@@ -1,3 +1,11 @@
+2001-12-20  Julian v. Bock  <julian@wongr.net>
+
+	* readelf.c (print_symbol): New function: Print a formatted symbol
+	name.
+	(dump_relocations): Use print_symbol() to print symbol names.
+	(process_symbol_table): Likewise.
+	(process_mips_specific): Likewise.
+
 2001-12-10  Jakub Jelinek  <jakub@redhat.com>
 
 	* objcopy.c (setup_section): Copy entsize.
diff -ruN binutils/binutils/readelf.c binutils.new/binutils/readelf.c
--- binutils/binutils/readelf.c	Mon Dec 10 13:27:17 2001
+++ binutils.new/binutils/readelf.c	Thu Dec 20 01:06:29 2001
@@ -152,6 +152,7 @@
 
 /* Forward declarations for dumb compilers.  */
 static void		  print_vma		      PARAMS ((bfd_vma, print_mode));
+static void		  print_symbol		      PARAMS ((char *));
 static bfd_vma (*         byte_get)                   PARAMS ((unsigned char *, int));
 static bfd_vma            byte_get_little_endian      PARAMS ((unsigned char *, int));
 static bfd_vma            byte_get_big_endian         PARAMS ((unsigned char *, int));
@@ -494,6 +495,14 @@
 #endif
 }
 
+static void
+print_symbol (symbol)
+     char * symbol;
+{
+  char * fmt = do_wide ? "%s" : "%-.25s";
+  printf (fmt, symbol);
+}
+
 static bfd_vma
 byte_get_big_endian (field, size)
      unsigned char * field;
@@ -1041,12 +1050,11 @@
 	      printf ("  ");
 
 	      if (psym->st_name == 0)
-		printf ("%-25.25s",
-			SECTION_NAME (section_headers + psym->st_shndx));
+		print_symbol (SECTION_NAME (section_headers + psym->st_shndx));
 	      else if (strtab == NULL)
 		printf (_("<string table index %3ld>"), psym->st_name);
 	      else
-		printf ("%-25.25s", strtab + psym->st_name);
+		print_symbol (strtab + psym->st_name);
 
 	      if (is_rela)
 		printf (" + %lx", (unsigned long) relas [i].r_addend);
@@ -5192,8 +5200,9 @@
 	      printf ("  %6s", get_symbol_type (ELF_ST_TYPE (psym->st_info)));
 	      printf (" %6s",  get_symbol_binding (ELF_ST_BIND (psym->st_info)));
 	      printf (" %3s",  get_symbol_visibility (ELF_ST_VISIBILITY (psym->st_other)));
-	      printf (" %3.3s", get_symbol_index_type (psym->st_shndx));
-	      printf (" %s\n", dynamic_strings + psym->st_name);
+	      printf (" %3.3s ", get_symbol_index_type (psym->st_shndx));
+	      print_symbol (dynamic_strings + psym->st_name);
+	      printf ("\n");
 	    }
 	}
     }
@@ -5252,8 +5261,8 @@
 	      printf (" %-7s", get_symbol_type (ELF_ST_TYPE (psym->st_info)));
 	      printf (" %-6s", get_symbol_binding (ELF_ST_BIND (psym->st_info)));
 	      printf (" %-3s", get_symbol_visibility (ELF_ST_VISIBILITY (psym->st_other)));
-	      printf (" %4s", get_symbol_index_type (psym->st_shndx));
-	      printf (" %s", strtab + psym->st_name);
+	      printf (" %4s ", get_symbol_index_type (psym->st_shndx));
+	      print_symbol (strtab + psym->st_name);
 
 	      if (section->sh_type == SHT_DYNSYM &&
 		  version_info [DT_VERSIONTAGIDX (DT_VERSYM)] != 0)
@@ -8902,7 +8911,9 @@
 
 	  printf ("%5lu: %8lu  ", (unsigned long) cnt, iconf[cnt]);
 	  print_vma (psym->st_value, FULL_HEX);
-	  printf ("  %s\n", dynamic_strings + psym->st_name);
+	  printf ("  ");
+	  print_symbol (dynamic_strings + psym->st_name);
+	  printf ("\n");
 	}
 
       free (iconf);


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