/* stabs.c -- Parse COFF debugging information
- Copyright (C) 1996, 1998, 1999 Free Software Foundation, Inc.
+ Copyright (C) 1996, 98, 99, 2000 Free Software Foundation, Inc.
Written by Ian Lance Taylor <ian@cygnus.com>.
This file is part of GNU Binutils.
static boolean parse_coff_symbol
PARAMS ((bfd *, struct coff_types *, asymbol *, long,
struct internal_syment *, PTR, debug_type, boolean));
+static boolean external_coff_symbol_p PARAMS ((int sym_class));
\f
/* Return the slot for a type. */
}
else
{
- fprintf (stderr, _("%s: parse_coff_type: Bad type code 0x%x\n"),
- program_name, ntype);
+ non_fatal (_("parse_coff_type: Bad type code 0x%x"), ntype);
return DEBUG_TYPE_NULL;
}
if (! bfd_coff_get_syment (abfd, sym, &syment))
{
- fprintf (stderr, _("%s: bfd_coff_get_syment failed: %s\n"),
- program_name, bfd_errmsg (bfd_get_error ()));
+ non_fatal (_("bfd_coff_get_syment failed: %s"),
+ bfd_errmsg (bfd_get_error ()));
return DEBUG_TYPE_NULL;
}
{
if (! bfd_coff_get_auxent (abfd, sym, 0, &auxent))
{
- fprintf (stderr, _("%s: bfd_coff_get_auxent failed: %s\n"),
- program_name, bfd_errmsg (bfd_get_error ()));
+ non_fatal (_("bfd_coff_get_auxent failed: %s"),
+ bfd_errmsg (bfd_get_error ()));
return DEBUG_TYPE_NULL;
}
psubaux = &auxent;
if (! bfd_coff_get_syment (abfd, sym, &syment))
{
- fprintf (stderr, _("%s: bfd_coff_get_syment failed: %s\n"),
- program_name, bfd_errmsg (bfd_get_error ()));
+ non_fatal (_("bfd_coff_get_syment failed: %s"),
+ bfd_errmsg (bfd_get_error ()));
return DEBUG_TYPE_NULL;
}
return false;
break;
+ case C_WEAKEXT:
case C_EXT:
if (! debug_record_variable (dhandle, bfd_asymbol_name (sym), type,
DEBUG_GLOBAL, bfd_asymbol_value (sym)))
return true;
}
+/* Determine if a symbol has external visibility. */
+
+static boolean
+external_coff_symbol_p (sym_class)
+ int sym_class;
+{
+ switch (sym_class)
+ {
+ case C_EXT:
+ case C_WEAKEXT:
+ return true;
+ default:
+ break;
+ }
+ return false;
+}
+
/* This is the main routine. It looks through all the symbols and
handles them. */
if (! bfd_coff_get_syment (abfd, sym, &syment))
{
- fprintf (stderr, _("%s: bfd_coff_get_syment failed: %s\n"),
- program_name, bfd_errmsg (bfd_get_error ()));
+ non_fatal (_("bfd_coff_get_syment failed: %s"),
+ bfd_errmsg (bfd_get_error ()));
return false;
}
{
if (! bfd_coff_get_auxent (abfd, sym, 0, &auxent))
{
- fprintf (stderr, _("%s: bfd_coff_get_auxent failed: %s\n"),
- program_name, bfd_errmsg (bfd_get_error ()));
+ non_fatal (_("bfd_coff_get_auxent failed: %s"),
+ bfd_errmsg (bfd_get_error ()));
return false;
}
paux = &auxent;
if (syment.n_type == T_NULL)
break;
/* Fall through. */
+ case C_WEAKEXT:
case C_EXT:
if (ISFCN (syment.n_type))
{
{
if (fnname == NULL)
{
- fprintf (stderr, _("%s: %ld: .bf without preceding function\n"),
- program_name, this_coff_symno);
+ non_fatal (_("%ld: .bf without preceding function"),
+ this_coff_symno);
return false;
}
return false;
if (! debug_record_function (dhandle, fnname, type,
- fnclass == C_EXT,
+ external_coff_symbol_p (fnclass),
bfd_asymbol_value (sym)))
return false;
{
if (! within_function)
{
- fprintf (stderr, _("%s: %ld: unexpected .ef\n"),
- program_name, this_coff_symno);
+ non_fatal (_("%ld: unexpected .ef\n"), this_coff_symno);
return false;
}