all uses of get_symtab_upper_bound to bfd_get_symtab_upper_bound.
Also:
* coffgrok.c (symcount): Change to long.
(do_sections_p1): Check for error return from
bfd_get_reloc_upper_bound. Change relcount to long, and check for
error from bfd_canonicalize_reloc.
(coff_grok): Change storage to long. Check for error from
bfd_get_symtab_upper_bound and bfd_canonicalize_symtab.
* nlmconv.c (main): Change symcount, newsymalloc, newsymcount, and
i to long. Check for error from bfd_get_symtab_upper_bound and
bfd_canonicalize_symtab.
(copy_sections): Change reloc_size and reloc_count to long. Check
for error from bfd_get_reloc_upper_bound and
bfd_canonicalize_reloc.
(mangle_relocs, i386_mangle_relocs, alpha_mangle_relocs): Change
reloc_count_ptr argument to long *. Make corresponding changes to
variables loaded from *reloc_count_ptr.
* nm.c (display_rel_file): Change storage and symcount to long.
Check for errors from bfd_get_symtab_upper_bound and
bfd_canonicalize_symtab.
* objcopy.c (filter_symbols): Change symcount, src_count and
dst_count to long.
(copy_object): Change symcount to long. Pass another argument to
fprintf. Check for errors from bfd_get_symtab_upper_bound and
bfd_canonicalize_symtab.
(copy_section): Change relcount to long. Check for errors from
bfd_get_reloc_upper_bound and bfd_canonicalize_reloc.
(mark_symbols_used_in_relocations): Change relcount and i to long.
Check for errors form bfd_get_reloc_upper_bound and
bfd_canonicalize_reloc.
* objdump.c (storage): Remove global variable.
(symcount): Changed to long.
(slurp_symtab): New local variable storage. Check for errors from
bfd_get_symtab_upper_bound and bfd_canonicalize_symtab.
(remove_useless_symbols): Change return value and count to long.
(objdump_print_address): Change min, max, thisplace and i to long.
(disassemble_data): Change i to long.
(dump_symbols): Change count to long.
(dump_relocs): Change relcount to long. Check for errors from
bfd_ret_reloc_upper_bound and bfd_canonicalize_reloc.
(display_info_table): Add casts when passing LONGEST_ARCH for
printf %* argument.
+Wed Mar 30 15:52:40 1994 Ian Lance Taylor (ian@tweedledumb.cygnus.com)
+
+ Update for recent BFD changes to symbol and reloc reading. Rename
+ all uses of get_symtab_upper_bound to bfd_get_symtab_upper_bound.
+ Also:
+ * coffgrok.c (symcount): Change to long.
+ (do_sections_p1): Check for error return from
+ bfd_get_reloc_upper_bound. Change relcount to long, and check for
+ error from bfd_canonicalize_reloc.
+ (coff_grok): Change storage to long. Check for error from
+ bfd_get_symtab_upper_bound and bfd_canonicalize_symtab.
+ * nlmconv.c (main): Change symcount, newsymalloc, newsymcount, and
+ i to long. Check for error from bfd_get_symtab_upper_bound and
+ bfd_canonicalize_symtab.
+ (copy_sections): Change reloc_size and reloc_count to long. Check
+ for error from bfd_get_reloc_upper_bound and
+ bfd_canonicalize_reloc.
+ (mangle_relocs, i386_mangle_relocs, alpha_mangle_relocs): Change
+ reloc_count_ptr argument to long *. Make corresponding changes to
+ variables loaded from *reloc_count_ptr.
+ * nm.c (display_rel_file): Change storage and symcount to long.
+ Check for errors from bfd_get_symtab_upper_bound and
+ bfd_canonicalize_symtab.
+ * objcopy.c (filter_symbols): Change symcount, src_count and
+ dst_count to long.
+ (copy_object): Change symcount to long. Pass another argument to
+ fprintf. Check for errors from bfd_get_symtab_upper_bound and
+ bfd_canonicalize_symtab.
+ (copy_section): Change relcount to long. Check for errors from
+ bfd_get_reloc_upper_bound and bfd_canonicalize_reloc.
+ (mark_symbols_used_in_relocations): Change relcount and i to long.
+ Check for errors form bfd_get_reloc_upper_bound and
+ bfd_canonicalize_reloc.
+ * objdump.c (storage): Remove global variable.
+ (symcount): Changed to long.
+ (slurp_symtab): New local variable storage. Check for errors from
+ bfd_get_symtab_upper_bound and bfd_canonicalize_symtab.
+ (remove_useless_symbols): Change return value and count to long.
+ (objdump_print_address): Change min, max, thisplace and i to long.
+ (disassemble_data): Change i to long.
+ (dump_symbols): Change count to long.
+ (dump_relocs): Change relcount to long. Check for errors from
+ bfd_ret_reloc_upper_bound and bfd_canonicalize_reloc.
+ (display_info_table): Add casts when passing LONGEST_ARCH for
+ printf %* argument.
+
Tue Mar 29 14:59:04 1994 Ian Lance Taylor (ian@tweedledumb.cygnus.com)
* nm.c (display_archive): Close each archive element after it has
static void setup_sections PARAMS ((bfd *, asection *, PTR));
static void copy_sections PARAMS ((bfd *, asection *, PTR));
static void mangle_relocs PARAMS ((bfd *, asection *, arelent ***,
- bfd_size_type *, char *,
+ long *, char *,
bfd_size_type));
static void i386_mangle_relocs PARAMS ((bfd *, asection *, arelent ***,
- bfd_size_type *, char *,
+ long *, char *,
bfd_size_type));
static void alpha_mangle_relocs PARAMS ((bfd *, asection *, arelent ***,
- bfd_size_type *, char *,
+ long *, char *,
bfd_size_type));
/* start-sanitize-powerpc-netware */
-static void powerpc_build_stubs PARAMS ((bfd *, asymbol ***, unsigned int *));
+static void powerpc_build_stubs PARAMS ((bfd *, asymbol ***, long *));
static void powerpc_resolve_stubs PARAMS ((bfd *, bfd *));
static void powerpc_mangle_relocs PARAMS ((bfd *, asection *, arelent ***,
- bfd_size_type *, char *,
+ long *, char *,
bfd_size_type));
/* end-sanitize-powerpc-netware */
static void default_mangle_relocs PARAMS ((bfd *, asection *, arelent ***,
- bfd_size_type *, char *,
+ long *, char *,
bfd_size_type));
static char *link_inputs PARAMS ((struct string_list *, char *));
static const char *choose_temp_base_try PARAMS ((const char *,
bfd *inbfd;
bfd *outbfd;
asymbol **newsyms, **outsyms;
- unsigned int symcount, newsymalloc, newsymcount;
+ long symcount, newsymalloc, newsymcount;
+ long symsize;
asection *text_sec, *bss_sec, *data_sec;
bfd_vma vma;
bfd_size_type align;
asymbol *endsym;
- unsigned int i;
+ long i;
char inlead, outlead;
boolean gotstart, gotexit, gotcheck;
struct stat st;
if (! bfd_set_file_flags (outbfd, bfd_get_file_flags (inbfd)))
bfd_fatal (bfd_get_filename (outbfd));
- symbols = (asymbol **) xmalloc (get_symtab_upper_bound (inbfd));
+ symsize = bfd_get_symtab_upper_bound (inbfd);
+ if (symsize < 0)
+ bfd_fatal (input_file);
+ symbols = (asymbol **) xmalloc (symsize);
symcount = bfd_canonicalize_symtab (inbfd, symbols);
+ if (symcount < 0)
+ bfd_fatal (input_file);
/* Make sure we have a .bss section. */
bss_sec = bfd_get_section_by_name (outbfd, NLM_UNINITIALIZED_DATA_NAME);
asection *outsec;
bfd_size_type size;
PTR contents;
- bfd_size_type reloc_size;
+ long reloc_size;
/* FIXME: We don't want to copy the .reginfo section of an ECOFF
file. However, I don't have a good way to describe this section.
}
reloc_size = bfd_get_reloc_upper_bound (inbfd, insec);
+ if (reloc_size < 0)
+ bfd_fatal (bfd_get_filename (inbfd));
if (reloc_size != 0)
{
arelent **relocs;
- bfd_size_type reloc_count;
+ long reloc_count;
relocs = (arelent **) xmalloc (reloc_size);
reloc_count = bfd_canonicalize_reloc (inbfd, insec, relocs, symbols);
+ if (reloc_count < 0)
+ bfd_fatal (bfd_get_filename (inbfd));
mangle_relocs (outbfd, insec, &relocs, &reloc_count, (char *) contents,
size);
bfd *outbfd;
asection *insec;
arelent ***relocs_ptr;
- bfd_size_type *reloc_count_ptr;
+ long *reloc_count_ptr;
char *contents;
bfd_size_type contents_size;
{
bfd *outbfd;
asection *insec;
arelent ***relocs_ptr;
- bfd_size_type *reloc_count_ptr;
+ long *reloc_count_ptr;
char *contents;
bfd_size_type contents_size;
{
if (insec->output_offset != 0)
{
- bfd_size_type reloc_count;
+ long reloc_count;
register arelent **relocs;
- register bfd_size_type i;
+ register long i;
reloc_count = *reloc_count_ptr;
relocs = *relocs_ptr;
bfd *outbfd;
asection *insec;
arelent ***relocs_ptr;
- bfd_size_type *reloc_count_ptr;
+ long *reloc_count_ptr;
char *contents;
bfd_size_type contents_size;
{
- bfd_size_type reloc_count, i;
+ long reloc_count, i;
arelent **relocs;
reloc_count = *reloc_count_ptr;
bfd *outbfd;
asection *insec;
register arelent ***relocs_ptr;
- bfd_size_type *reloc_count_ptr;
+ long *reloc_count_ptr;
char *contents;
bfd_size_type contents_size;
{
- bfd_size_type old_reloc_count;
+ long old_reloc_count;
arelent **old_relocs;
register arelent **relocs;
powerpc_build_stubs (inbfd, symbols_ptr, symcount_ptr)
bfd *inbfd;
asymbol ***symbols_ptr;
- unsigned int *symcount_ptr;
+ long *symcount_ptr;
{
asection *stub_sec;
asection *got_sec;
unsigned int got_base;
- unsigned int i;
- unsigned int symcount;
- unsigned int stubcount;
+ long i;
+ long symcount;
+ long stubcount;
/* Make a section to hold stubs. We don't set SEC_HAS_CONTENTS for
the section to prevent copy_sections from reading from it. */
/* Define the `.' symbol to be in the stub section. */
sym->section = stub_sec;
sym->value = stubcount * POWERPC_STUB_SIZE;
- sym->flags = BSF_LOCAL;
+ /* We set the BSF_DYNAMIC flag here so that we can check it when
+ we are mangling relocs. FIXME: This is a hack. */
+ sym->flags = BSF_LOCAL | BSF_DYNAMIC;
/* Add this stub to the linked list. */
item = (struct powerpc_stub *) xmalloc (sizeof (struct powerpc_stub));
bfd *outbfd;
asection *insec;
register arelent ***relocs_ptr;
- bfd_size_type *reloc_count_ptr;
+ long *reloc_count_ptr;
char *contents;
bfd_size_type contents_size;
{
const reloc_howto_type *toc_howto;
- bfd_size_type reloc_count;
+ long reloc_count;
register arelent **relocs;
- register bfd_size_type i;
+ register long i;
toc_howto = bfd_reloc_type_lookup (insec->owner, BFD_RELOC_PPC_TOC16);
if (toc_howto == (reloc_howto_type *) NULL)
& rel->howto->dst_mask));
bfd_put_32 (outbfd, val, (bfd_byte *) contents + rel->address);
- /* If this reloc is against a symbol whose name begins
- with a `.', and the next instruction is
+ /* If this reloc is against an stubbed symbol and the
+ next instruction is
cror 31,31,31
then we replace the next instruction with
lwz r2,20(r1)
- This reloads the TOC pointer after a call. */
+ This reloads the TOC pointer after a stub call. */
if (bfd_asymbol_name (sym)[0] == '.'
+ && (sym->flags & BSF_DYNAMIC) != 0
&& (bfd_get_32 (outbfd,
(bfd_byte *) contents + rel->address + 4)
== 0x4ffffb82)) /* cror 31,31,31 */
bfd *abfd;
bfd *archive_bfd;
{
- unsigned int storage;
+ long storage;
asymbol **syms;
- unsigned int symcount = 0;
+ long symcount = 0;
if (!(bfd_get_file_flags (abfd) & HAS_SYMS))
{
return;
}
- storage = get_symtab_upper_bound (abfd);
+ storage = bfd_get_symtab_upper_bound (abfd);
+ if (storage < 0)
+ bfd_fatal (bfd_get_filename (abfd));
if (storage == 0)
{
nosymz:
syms = (asymbol **) xmalloc (storage);
symcount = bfd_canonicalize_symtab (abfd, syms);
+ if (symcount < 0)
+ bfd_fatal (bfd_get_filename (abfd));
if (symcount == 0)
{
free (syms);
filter_symbols (abfd, osyms, isyms, symcount)
bfd *abfd;
asymbol **osyms, **isyms;
- unsigned long symcount;
+ long symcount;
{
register asymbol **from = isyms, **to = osyms;
- unsigned int src_count = 0, dst_count = 0;
+ long src_count = 0, dst_count = 0;
for (; src_count < symcount; src_count++)
{
bfd *ibfd;
bfd *obfd;
{
- unsigned int symcount;
+ long symcount;
if (!bfd_set_format (obfd, bfd_get_format (ibfd)))
{
if (!bfd_copy_private_bfd_data (ibfd, obfd))
{
fprintf (stderr, "%s: %s: error copying private BFD data: %s\n",
- program_name, bfd_errmsg (bfd_get_error ()));
+ program_name, bfd_get_filename (obfd),
+ bfd_errmsg (bfd_get_error ()));
status = 1;
return;
}
}
else
{
- osympp = isympp = (asymbol **) xmalloc (get_symtab_upper_bound (ibfd));
+ long symsize;
+
+ symsize = bfd_get_symtab_upper_bound (ibfd);
+ if (symsize < 0)
+ {
+ nonfatal (bfd_get_filename (ibfd));
+ }
+
+ osympp = isympp = (asymbol **) xmalloc (symsize);
symcount = bfd_canonicalize_symtab (ibfd, isympp);
+ if (symcount < 0)
+ {
+ nonfatal (bfd_get_filename (ibfd));
+ }
if (strip_symbols == strip_debug || discard_locals != locals_undef)
{
bfd *obfd;
{
arelent **relpp;
- int relcount;
+ long relcount;
sec_ptr osection;
bfd_size_type size;
if (size == 0 || osection == 0)
return;
- if (strip_symbols == strip_all
- || bfd_get_reloc_upper_bound (ibfd, isection) == 0)
- {
- bfd_set_reloc (obfd, osection, (arelent **) NULL, 0);
- }
+ if (strip_symbols == strip_all)
+ bfd_set_reloc (obfd, osection, (arelent **) NULL, 0);
else
{
- relpp = (arelent **) xmalloc (bfd_get_reloc_upper_bound (ibfd, isection));
- relcount = bfd_canonicalize_reloc (ibfd, isection, relpp, isympp);
- bfd_set_reloc (obfd, osection, relpp, relcount);
+ long relsize;
+
+ relsize = bfd_get_reloc_upper_bound (ibfd, isection);
+ if (relsize < 0)
+ {
+ nonfatal (bfd_get_filename (ibfd));
+ }
+ if (relsize == 0)
+ bfd_set_reloc (obfd, osection, (arelent **) NULL, 0);
+ else
+ {
+ relpp = (arelent **) xmalloc (relsize);
+ relcount = bfd_canonicalize_reloc (ibfd, isection, relpp, isympp);
+ if (relcount < 0)
+ {
+ nonfatal (bfd_get_filename (ibfd));
+ }
+ bfd_set_reloc (obfd, osection, relpp, relcount);
+ }
}
isection->_cooked_size = isection->_raw_size;
sec_ptr isection;
asymbol **symbols;
{
+ long relsize;
arelent **relpp;
- unsigned int relcount, i;
+ long relcount, i;
/* Ignore an input section with no corresponding output section. */
if (isection->output_section == NULL)
return;
- relpp = (arelent **) xmalloc (bfd_get_reloc_upper_bound (ibfd, isection));
+ relsize = bfd_get_reloc_upper_bound (ibfd, isection);
+ if (relsize < 0)
+ bfd_fatal (bfd_get_filename (ibfd));
+
+ relpp = (arelent **) xmalloc (relsize);
relcount = bfd_canonicalize_reloc (ibfd, isection, relpp, symbols);
+ if (relcount < 0)
+ bfd_fatal (bfd_get_filename (ibfd));
/* Examine each symbol used in a relocation. If it's not one of the
special bfd section symbols, then mark it with BSF_KEEP. */
/* The symbol table. */
asymbol **syms;
-/* Number of bytes allocated for `syms'. */
-unsigned int storage;
-
/* Number of symbols in `syms'. */
-unsigned int symcount = 0;
+long symcount = 0;
/* Forward declarations. */
bfd *abfd;
{
asymbol **sy = (asymbol **) NULL;
+ long storage;
if (!(bfd_get_file_flags (abfd) & HAS_SYMS))
{
return NULL;
}
- storage = get_symtab_upper_bound (abfd);
+ storage = bfd_get_symtab_upper_bound (abfd);
+ if (storage < 0)
+ bfd_fatal (bfd_get_filename (abfd));
+
if (storage)
{
sy = (asymbol **) xmalloc (storage);
}
symcount = bfd_canonicalize_symtab (abfd, sy);
- if (symcount <= 0)
+ if (symcount < 0)
+ bfd_fatal (bfd_get_filename (abfd));
+ if (symcount == 0)
{
fprintf (stderr, "%s: %s: Invalid symbol table\n",
program_name, bfd_get_filename (abfd));
COUNT is the number of elements in SYMBOLS.
Return the number of useful symbols. */
-int
+long
remove_useless_symbols (symbols, count)
asymbol **symbols;
- int count;
+ long count;
{
register asymbol **in_ptr = symbols, **out_ptr = symbols;
constantly churned by code doing heavy memory accesses. */
/* Indices in `syms'. */
- unsigned int min = 0;
- unsigned int max = symcount;
- unsigned int thisplace;
+ long min = 0;
+ long max = symcount;
+ long thisplace;
bfd_signed_vma vardiff;
/* If this symbol isn't global, search for one with the same value
that is. */
bfd_vma val = syms[thisplace]->value;
- int i;
+ long i;
if (syms[thisplace]->flags & (BSF_LOCAL|BSF_DEBUGGING))
for (i = thisplace - 1; i >= 0; i--)
{
no way to tell what's desired without looking at the relocation
table. */
struct objdump_disasm_info *aux;
- int i;
+ long i;
aux = (struct objdump_disasm_info *) info->application_data;
if ((aux->abfd->flags & HAS_RELOC)
disassemble_data (abfd)
bfd *abfd;
{
- bfd_size_type i;
+ long i;
unsigned int (*print) () = 0; /* Old style */
disassembler_ftype disassemble = 0; /* New style */
struct disassemble_info disasm_info;
dump_symbols (abfd)
bfd *abfd;
{
-
- unsigned int count;
+ long count;
asymbol **current = syms;
printf ("SYMBOL TABLE:\n");
bfd *abfd;
{
arelent **relpp;
- unsigned int relcount;
+ long relcount;
asection *a;
for (a = abfd->sections; a != (asection *) NULL; a = a->next)
{
+ long relsize;
+
if (a == &bfd_abs_section)
continue;
if (a == &bfd_und_section)
printf ("RELOCATION RECORDS FOR [%s]:", a->name);
- if (bfd_get_reloc_upper_bound (abfd, a) == 0)
+ relsize = bfd_get_reloc_upper_bound (abfd, a);
+ if (relsize < 0)
+ bfd_fatal (bfd_get_filename (abfd));
+
+ if (relsize == 0)
{
printf (" (none)\n\n");
}
{
arelent **p;
- relpp = (arelent **) xmalloc (bfd_get_reloc_upper_bound (abfd, a));
+ relpp = (arelent **) xmalloc (relsize);
/* Note that this must be done *before* we sort the syms table. */
relcount = bfd_canonicalize_reloc (abfd, a, relpp, syms);
- if (relcount == 0)
+ if (relcount < 0)
+ bfd_fatal (bfd_get_filename (abfd));
+ else if (relcount == 0)
{
printf (" (none)\n\n");
}
extern bfd_target *bfd_target_vector[];
/* Print heading of target names. */
- printf ("\n%*s", LONGEST_ARCH, " ");
+ printf ("\n%*s", (int) LONGEST_ARCH, " ");
for (t = first; t++ < last && bfd_target_vector[t];)
printf ("%s ", bfd_target_vector[t]->name);
putchar ('\n');
for (a = (int) bfd_arch_obscure + 1; a < (int) bfd_arch_last; a++)
if (strcmp (bfd_printable_arch_mach (a, 0), "UNKNOWN!") != 0)
{
- printf ("%*s ", LONGEST_ARCH - 1, bfd_printable_arch_mach (a, 0));
+ printf ("%*s ", (int) LONGEST_ARCH - 1,
+ bfd_printable_arch_mach (a, 0));
for (t = first; t++ < last && bfd_target_vector[t];)
{
bfd_target *p = bfd_target_vector[t];