/* Read coff symbol tables and convert to internal format, for GDB.
- Copyright (C) 1987-2017 Free Software Foundation, Inc.
+ Copyright (C) 1987-2018 Free Software Foundation, Inc.
Contributed by David D. Johnson, Brown University (ddj@cs.brown.edu).
This file is part of GDB.
#include "psymtab.h"
#include "build-id.h"
-extern void _initialize_coffread (void);
-
/* Key for COFF-associated data. */
static const struct objfile_data *coff_objfile_data_key;
NULL,
/* The start address is irrelevant, since we set
last_source_start_addr in coff_end_symtab. */
- 0);
+ 0,
+ /* Let buildsym.c deduce the language for this symtab. */
+ language_unknown);
record_debugformat ("COFF");
}
}
}
- bfd_map_over_sections (abfd, coff_locate_sections, (void *) info);
+ if (!(objfile->flags & OBJF_READNEVER))
+ bfd_map_over_sections (abfd, coff_locate_sections, (void *) info);
if (info->stabsects)
{
/* Try to add separate debug file if no symbols table found. */
if (!objfile_has_partial_symbols (objfile))
{
- char *debugfile;
-
- debugfile = find_separate_debug_file_by_buildid (objfile);
+ std::string debugfile = find_separate_debug_file_by_buildid (objfile);
- if (debugfile == NULL)
+ if (debugfile.empty ())
debugfile = find_separate_debug_file_by_debuglink (objfile);
- make_cleanup (xfree, debugfile);
- if (debugfile)
+ if (!debugfile.empty ())
{
- gdb_bfd_ref_ptr abfd (symfile_bfd_open (debugfile));
+ gdb_bfd_ref_ptr abfd (symfile_bfd_open (debugfile.c_str ()));
- symbol_file_add_separate (abfd.get (), debugfile, symfile_flags,
- objfile);
+ symbol_file_add_separate (abfd.get (), debugfile.c_str (),
+ symfile_flags, objfile);
}
}
{
/* Let stabs reader clean up. */
stabsread_clear_cache ();
-
- dwarf2_free_objfile (objfile);
}
\f
case C_LINE:
case C_ALIAS:
case C_HIDDEN:
- complaint (&symfile_complaints,
- _("Bad n_sclass for symbol %s"),
+ complaint (_("Bad n_sclass for symbol %s"),
cs->c_name);
break;
backtraces, so filter them out (from phdm@macqel.be). */
if (within_function)
break;
+ /* Fall through. */
case C_STAT:
case C_THUMBLABEL:
case C_THUMBSTAT:
/* At least on a 3b1, gcc generates swbeg and string labels
that look like this. Ignore them. */
break;
- /* Fall in for static symbols that don't start with '.' */
+ /* For static symbols that don't start with '.'... */
+ /* Fall through. */
case C_THUMBEXT:
case C_THUMBEXTFUNC:
case C_EXT:
/* main_aux.x_sym.x_misc.x_lnsz.x_lnno
contains line number of '{' }. */
if (cs->c_naux != 1)
- complaint (&symfile_complaints,
- _("`.bf' symbol %d has no aux entry"),
+ complaint (_("`.bf' symbol %d has no aux entry"),
cs->c_symnum);
fcn_first_line = main_aux.x_sym.x_misc.x_lnsz.x_lnno;
fcn_first_line_addr = cs->c_value;
if (context_stack_depth <= 0)
{ /* We attempted to pop an empty context stack. */
- complaint (&symfile_complaints,
- _("`.ef' symbol without matching `.bf' "
+ complaint (_("`.ef' symbol without matching `.bf' "
"symbol ignored starting at symnum %d"),
cs->c_symnum);
within_function = 0;
/* Stack must be empty now. */
if (context_stack_depth > 0 || newobj == NULL)
{
- complaint (&symfile_complaints,
- _("Unmatched .ef symbol(s) ignored "
+ complaint (_("Unmatched .ef symbol(s) ignored "
"starting at symnum %d"),
cs->c_symnum);
within_function = 0;
}
if (cs->c_naux != 1)
{
- complaint (&symfile_complaints,
- _("`.ef' symbol %d has no aux entry"),
+ complaint (_("`.ef' symbol %d has no aux entry"),
cs->c_symnum);
fcn_last_line = 0x7FFFFFFF;
}
{
if (context_stack_depth <= 0)
{ /* We attempted to pop an empty context stack. */
- complaint (&symfile_complaints,
- _("`.eb' symbol without matching `.bb' "
+ complaint (_("`.eb' symbol without matching `.bb' "
"symbol ignored starting at symnum %d"),
cs->c_symnum);
break;
newobj = pop_context ();
if (depth-- != newobj->depth)
{
- complaint (&symfile_complaints,
- _("Mismatched .eb symbol ignored "
+ complaint (_("Mismatched .eb symbol ignored "
"starting at symnum %d"),
symnum);
break;
return;
if (file_offset < linetab_offset)
{
- complaint (&symfile_complaints,
- _("Line number pointer %ld lower than start of line numbers"),
+ complaint (_("Line number pointer %ld lower than start of line numbers"),
file_offset);
if (file_offset > linetab_size) /* Too big to be an offset? */
return;
/* Some compilers try to be helpful by inventing "fake"
names for anonymous enums, structures, and unions, like
"~0fake" or ".0fake". Thanks, but no thanks... */
- if (TYPE_TAG_NAME (SYMBOL_TYPE (sym)) == 0)
+ if (TYPE_NAME (SYMBOL_TYPE (sym)) == 0)
if (SYMBOL_LINKAGE_NAME (sym) != NULL
&& *SYMBOL_LINKAGE_NAME (sym) != '~'
&& *SYMBOL_LINKAGE_NAME (sym) != '.')
- TYPE_TAG_NAME (SYMBOL_TYPE (sym)) =
+ TYPE_NAME (SYMBOL_TYPE (sym)) =
concat (SYMBOL_LINKAGE_NAME (sym), (char *)NULL);
add_symbol_to_list (sym, &file_symbols);
}
else
{
- complaint (&symfile_complaints,
- _("Symbol table entry for %s has bad tagndx value"),
+ complaint (_("Symbol table entry for %s has bad tagndx value"),
cs->c_name);
/* And fall through to decode_base_type... */
}
type = coff_alloc_type (cs->c_symnum);
TYPE_CODE (type) = TYPE_CODE_STRUCT;
TYPE_NAME (type) = NULL;
- /* This used to set the tag to "<opaque>". But I think
- setting it to NULL is right, and the printing code can
- print it as "struct {...}". */
- TYPE_TAG_NAME (type) = NULL;
INIT_CPLUS_SPECIFIC (type);
TYPE_LENGTH (type) = 0;
TYPE_FIELDS (type) = 0;
/* Anonymous union type. */
type = coff_alloc_type (cs->c_symnum);
TYPE_NAME (type) = NULL;
- /* This used to set the tag to "<opaque>". But I think
- setting it to NULL is right, and the printing code can
- print it as "union {...}". */
- TYPE_TAG_NAME (type) = NULL;
INIT_CPLUS_SPECIFIC (type);
TYPE_LENGTH (type) = 0;
TYPE_FIELDS (type) = 0;
type = coff_alloc_type (cs->c_symnum);
TYPE_CODE (type) = TYPE_CODE_ENUM;
TYPE_NAME (type) = NULL;
- /* This used to set the tag to "<opaque>". But I think
- setting it to NULL is right, and the printing code can
- print it as "enum {...}". */
- TYPE_TAG_NAME (type) = NULL;
TYPE_LENGTH (type) = 0;
TYPE_FIELDS (type) = 0;
TYPE_NFIELDS (type) = 0;
else
return objfile_type (objfile)->builtin_unsigned_long;
}
- complaint (&symfile_complaints,
- _("Unexpected type for symbol %s"), cs->c_name);
+ complaint (_("Unexpected type for symbol %s"), cs->c_name);
return objfile_type (objfile)->builtin_void;
}
\f