When --wide is used, do not truncate symbol names.
authorNick Clifton <nickc@redhat.com>
Thu, 20 Dec 2001 11:20:17 +0000 (11:20 +0000)
committerNick Clifton <nickc@redhat.com>
Thu, 20 Dec 2001 11:20:17 +0000 (11:20 +0000)
binutils/ChangeLog
binutils/doc/binutils.texi
binutils/readelf.c

index de70a2ad3d914883ddb66903f4a0ffdd8057c378..b254d8d7dafaffa056de7165bee064f4f8504f51 100644 (file)
@@ -1,3 +1,15 @@
+2001-12-20  Julian v. Bock  <julian@wongr.net>
+
+       * readelf.c (print_symbol): New function: Print a formatted symbol
+       name.  If --wide is specified do not truncate it.
+       (dump_relocations): Use print_symbol() to print symbol names.
+       (process_symbol_table): Likewise.
+       (process_syminfo): Likewise.
+       (process_mips_specific): Likewise.
+       (usage): Document new feature of --wide switch.
+       * doc/binutils.texi (objdump): Document additional behaviour of
+       --wide.
+       
 2001-12-18  Michael Snyder  <msnyder@redhat.com>
 
        * objcopy.c (copy_file): Accept corefiles (format bfd_core).
index 22c903c66f60815694226790bef929885d500234..fdf6e2d3832374cb211b6a44e8e524b4772f2e95 100644 (file)
@@ -1685,6 +1685,7 @@ relocation entries.  Using @option{-x} is equivalent to specifying all of
 @itemx --wide
 @cindex wide output, printing
 Format some lines for output devices that have more than 80 columns.
+Also do not truncate symbol names when they are displayed.
 @end table
 
 @c man end
index 35907f9f5c0d2a8704c9fd09d42a1f5497d2714d..400b7c31497c1454aa90229a9e9b29bde45c2341 100644 (file)
@@ -153,6 +153,7 @@ print_mode;
 
 /* Forward declarations for dumb compilers.  */
 static void              print_vma                   PARAMS ((bfd_vma, print_mode));
+static void              print_symbol                PARAMS ((int, 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));
@@ -511,6 +512,25 @@ print_vma (vma, mode)
 #endif
 }
 
+/* Display a symbol on stdout.  If do_wide is not true then
+   format the symbol to be at most WIDTH characters,
+   truhncating as necessary.  If WIDTH is negative then
+   format the string to be exactly - WIDTH characters,
+   truncating or padding as necessary.  */
+
+static void
+print_symbol (width, symbol)
+     int width;
+     char * symbol;
+{
+  if (do_wide)
+    printf (symbol);
+  else if (width < 0)
+    printf ("%-*.*s", width, width, symbol);
+  else 
+    printf ("%-.*s", width, symbol);
+}
+
 static bfd_vma
 byte_get_big_endian (field, size)
      unsigned char * field;
@@ -1058,12 +1078,11 @@ dump_relocations (file, rel_offset, rel_size, symtab, nsyms, strtab, is_rela)
              printf ("  ");
 
              if (psym->st_name == 0)
-               printf ("%-25.25s",
-                       SECTION_NAME (SECTION_HEADER (psym->st_shndx)));
+               print_symbol (-25, 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 (-25, strtab + psym->st_name);
 
              if (is_rela)
                printf (" + %lx", (unsigned long) relas [i].r_addend);
@@ -2133,7 +2152,7 @@ usage ()
 #endif
   fprintf (stdout, _("  -I or --histogram         Display histogram of bucket list lengths\n"));
   fprintf (stdout, _("  -v or --version           Display the version number of readelf\n"));
-  fprintf (stdout, _("  -W or --wide              Don't split lines to fit into 80 columns\n"));
+  fprintf (stdout, _("  -W or --wide              Don't split lines or truncate symbols to fit into 80 columns\n"));
   fprintf (stdout, _("  -H or --help              Display this information\n"));
   fprintf (stdout, _("Report bugs to %s\n"), REPORT_BUGS_TO);
 
@@ -5305,8 +5324,9 @@ process_symbol_table (file)
              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 (25, dynamic_strings + psym->st_name);
+             putchar ('\n');
            }
        }
     }
@@ -5364,8 +5384,8 @@ process_symbol_table (file)
              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 (25, strtab + psym->st_name);
 
              if (section->sh_type == SHT_DYNSYM &&
                  version_info [DT_VERSIONTAGIDX (DT_VERSYM)] != 0)
@@ -5602,8 +5622,9 @@ process_syminfo (file)
     {
       unsigned short int flags = dynamic_syminfo[i].si_flags;
 
-      printf ("%4d: %-30s ", i,
-             dynamic_strings + dynamic_symbols[i].st_name);
+      printf ("%4d: ", i);
+      print_symbol (30, dynamic_strings + dynamic_symbols[i].st_name);
+      putchar (' ');
 
       switch (dynamic_syminfo[i].si_boundto)
        {
@@ -5616,9 +5637,12 @@ process_syminfo (file)
        default:
          if (dynamic_syminfo[i].si_boundto > 0
              && dynamic_syminfo[i].si_boundto < dynamic_size)
-           printf ("%-10s ",
-                   dynamic_strings
-                   + dynamic_segment[dynamic_syminfo[i].si_boundto].d_un.d_val);
+           {
+             print_symbol (10, dynamic_strings
+                           + dynamic_segment
+                           [dynamic_syminfo[i].si_boundto].d_un.d_val);
+             putchar (' ' );
+           }
          else
            printf ("%-10d ", dynamic_syminfo[i].si_boundto);
          break;
@@ -8708,9 +8732,10 @@ process_mips_specific (file)
                       tmp->tm_year + 1900, tmp->tm_mon + 1, tmp->tm_mday,
                       tmp->tm_hour, tmp->tm_min, tmp->tm_sec);
 
-             printf ("%3lu: %-20s %s %#10lx %-7ld", (unsigned long) cnt,
-                     dynamic_strings + liblist.l_name, timebuf,
-                     liblist.l_checksum, liblist.l_version);
+             printf ("%3lu: ", (unsigned long) cnt);
+             print_symbol (20, dynamic_strings + liblist.l_name);
+             printf (" %s %#10lx %-7ld", timebuf, liblist.l_checksum,
+                     liblist.l_version);
 
              if (liblist.l_flags == 0)
                puts (" NONE");
@@ -9008,11 +9033,13 @@ process_mips_specific (file)
 
       for (cnt = 0; cnt < conflictsno; ++cnt)
        {
-         Elf_Internal_Sym * psym = &dynamic_symbols[iconf[cnt]];
+         Elf_Internal_Sym * psym = & dynamic_symbols [iconf [cnt]];
 
-         printf ("%5lu: %8lu  ", (unsigned long) cnt, iconf[cnt]);
+         printf ("%5lu: %8lu  ", (unsigned long) cnt, iconf [cnt]);
          print_vma (psym->st_value, FULL_HEX);
-         printf ("  %s\n", dynamic_strings + psym->st_name);
+         putchar (' ');
+         print_symbol (25, dynamic_strings + psym->st_name);
+         putchar ('\n');
        }
 
       free (iconf);