* objdump.c (dump_relocs): Don't crash if section name is NULL.

This commit is contained in:
Ian Lance Taylor 1994-01-13 22:34:51 +00:00
parent d211303dc0
commit 02a68547b9
2 changed files with 59 additions and 33 deletions

View File

@ -1,3 +1,20 @@
Thu Jan 13 17:32:44 1994 Ian Lance Taylor (ian@tweedledumb.cygnus.com)
* objdump.c (dump_relocs): Don't crash if section name is NULL.
Tue Jan 11 19:46:33 1994 Ian Lance Taylor (ian@tweedledumb.cygnus.com)
* filemode.c (filemodestring): Commented out; not used.
(mode_string): Use POSIX definitions.
(ftypelet): Likewise.
(rwx): Removed; no longer used.
* bucomm.c: Include bucomm.h.
(bfd_nonfatal, bfd_fatal): Argument is const.
(fatal): Make __STDC__ version.
* bucomm.h (mode_string): Declare.
* Makefile.in (bucomm.o): Depend upon bucomm.h
Sun Jan 9 12:03:20 1994 Ken Raeburn (raeburn@rtl.cygnus.com)
* bucomm.c (xmalloc, xrealloc): Deleted.
* bucomm.h (xmalloc, xrealloc): Fix prototypes, to correspond to

View File

@ -77,6 +77,9 @@ dump_relocs PARAMS ((bfd *abfd));
static void
dump_symbols PARAMS ((bfd *abfd));
static void
display_bfd PARAMS ((bfd *abfd));
void
usage (stream, status)
@ -84,21 +87,35 @@ usage (stream, status)
int status;
{
fprintf (stream, "\
Usage: %s [-ahifdrtxsl] [-m machine] [-j section_name] [-b bfdname]\n\
[--syms] [--reloc] [--header] [--stabs] [--version] [--help] objfile...\n\
at least one option besides -l must be given\n",
Usage: %s [-ahifdrtxsl] [-b bfdname] [-m machine] [-j section-name]\n\
[--archive-headers] [--target=bfdname] [--disassemble] [--file-headers]\n\
[--section-headers] [--headers] [--info] [--section=section-name]\n\
[--line-numbers] [--architecture=machine] [--reloc] [--full-contents]\n\
[--stabs] [--syms] [--all-headers] [--version] [--help] objfile...\n\
at least one option besides -l (--line-numbers) must be given\n",
program_name);
exit (status);
}
static struct option long_options[]=
{
{"syms", no_argument, &dump_symtab, 1},
{"reloc", no_argument, &dump_reloc_info, 1},
{"header", no_argument, &dump_section_headers, 1},
{"version", no_argument, &show_version, 1},
{"help", no_argument, 0, 'H'},
{"all-headers", no_argument, NULL, 'x'},
{"architecture", required_argument, NULL, 'm'},
{"archive-headers", no_argument, NULL, 'a'},
{"disassemble", no_argument, NULL, 'd'},
{"file-headers", no_argument, NULL, 'f'},
{"full-contents", no_argument, NULL, 's'},
{"headers", no_argument, NULL, 'h'},
{"help", no_argument, NULL, 'H'},
{"info", no_argument, NULL, 'i'},
{"line-numbers", no_argument, NULL, 'l'},
{"reloc", no_argument, NULL, 'r'},
{"section", required_argument, NULL, 'j'},
{"section-headers", no_argument, NULL, 'h'},
{"stabs", no_argument, &dump_stab_section_info, 1},
{"syms", no_argument, NULL, 't'},
{"target", required_argument, NULL, 'b'},
{"version", no_argument, &show_version, 1},
{0, no_argument, 0, 0}
};
@ -162,12 +179,7 @@ DEFUN (slurp_symtab, (abfd),
storage = get_symtab_upper_bound (abfd);
if (storage)
{
sy = (asymbol **) malloc (storage);
if (sy == NULL)
{
fprintf (stderr, "%s: out of memory.\n", program_name);
exit (1);
}
sy = (asymbol **) xmalloc (storage);
}
symcount = bfd_canonicalize_symtab (abfd, sy);
if (symcount <= 0)
@ -544,13 +556,8 @@ disassemble_data (abfd)
if (bfd_get_section_size_before_reloc (section) == 0)
continue;
data = (bfd_byte *) malloc ((size_t) bfd_get_section_size_before_reloc (section));
data = (bfd_byte *) xmalloc ((size_t) bfd_get_section_size_before_reloc (section));
if (data == (bfd_byte *) NULL)
{
fprintf (stderr, "%s: memory exhausted.\n", program_name);
exit (1);
}
datasize = bfd_get_section_size_before_reloc (section);
bfd_get_section_contents (abfd, section, data, 0, bfd_get_section_size_before_reloc (section));
@ -645,7 +652,7 @@ struct stab_print stab_print[] = {
#define __define_stab(NAME, CODE, STRING) {CODE, STRING},
#include "aout/stab.def"
#undef __define_stab
{0, 0}
{0, ""}
};
void dump_stabs_1 ();
@ -675,6 +682,7 @@ dump_stabs (abfd)
dump_stabs_1 (abfd, ".stab", ".stabstr");
dump_stabs_1 (abfd, ".stab.excl", ".stab.exclstr");
dump_stabs_1 (abfd, ".stab.index", ".stab.indexstr");
dump_stabs_1 (abfd, "$GDB_SYMBOLS$", "$GDB_STRINGS$");
}
void
@ -786,10 +794,11 @@ dump_stabs_1 (abfd, name1, name2)
for (i = -1; stabs < stabs_end; stabs++, i++)
{
SWAP_SYMBOL (stabs, abfd);
printf ("\n%-6d %-6s %-6d %-6d %08x %-6d", i,
printf ("\n%-6d %-6s %-6d %-6d ", i,
stab_name [stabs->n_type],
stabs->n_other, stabs->n_desc, stabs->n_value,
stabs->n_strx);
stabs->n_other, stabs->n_desc);
printf_vma (stabs->n_value);
printf (" %-6lu", stabs->n_strx);
/* Symbols with type == 0 (N_UNDF) specify the length of the
string table associated with this file. We use that info
@ -814,6 +823,7 @@ dump_stabs_1 (abfd, name1, name2)
printf ("\n\n");
}
static void
display_bfd (abfd)
bfd *abfd;
{
@ -941,12 +951,7 @@ dump_data (abfd)
if (bfd_section_size (abfd, section) == 0)
continue;
data = (bfd_byte *) malloc ((size_t) bfd_section_size (abfd, section));
if (data == (bfd_byte *) NULL)
{
fprintf (stderr, "%s: memory exhausted.\n", program_name);
exit (1);
}
data = (bfd_byte *) xmalloc ((size_t) bfd_section_size (abfd, section));
datasize = bfd_section_size (abfd, section);
@ -1077,15 +1082,17 @@ dump_relocs (abfd)
{
arelent *q = *p;
CONST char *sym_name;
CONST char *section_name = (*(q->sym_ptr_ptr))->section->name;
CONST char *section_name;
if (q->sym_ptr_ptr && *q->sym_ptr_ptr)
{
sym_name = (*(q->sym_ptr_ptr))->name;
section_name = (*(q->sym_ptr_ptr))->section->name;
}
else
{
sym_name = 0;
sym_name = NULL;
section_name = NULL;
}
if (sym_name)
{
@ -1096,6 +1103,8 @@ dump_relocs (abfd)
}
else
{
if (section_name == (CONST char *) NULL)
section_name = "*unknown*";
printf_vma (q->address);
printf (" %-16s [%s]",
q->howto->name,
@ -1182,7 +1191,7 @@ DEFUN_VOID (display_info)
bfd_printable_arch_mach ((enum bfd_architecture) j, 0));
}
columns = 0;
if (colum = getenv ("COLUMNS"))
if ((colum = getenv ("COLUMNS")) != (char *) NULL)
columns = atoi (colum);
if (!columns)
columns = 80;