Introduce buildsym-legacy.h
This introduces a new header, buildsym-legacy.h, and changes all the symbol readers to use it. The idea is to put the function-based interface, that relies on the buildsym_compunit global, into a separate header. Then when a symbol reader is updated to use the new interface, it can simply not include buildsym-legacy.h, so it's easy to be sure that the new API is used everywhere. gdb/ChangeLog 2018-07-20 Tom Tromey <tom@tromey.com> * xcoffread.c: Include buildsym-legacy.h. * windows-nat.c: Include buildsym-legacy.h. * stabsread.c: Include buildsym-legacy.h. * mdebugread.c: Include buildsym-legacy.h. * buildsym-legacy.h: New file. * buildsym-legacy.c: New file, from buildsym.c. * go32-nat.c: Include buildsym-legacy.h. * dwarf2read.c: Include buildsym-legacy.h. * dbxread.c: Include buildsym-legacy.h. * cp-namespace.c: Include buildsym-legacy.h. * coffread.c: Include buildsym-legacy.h. * buildsym.h: Move some contents to buildsym-legacy.h. * buildsym.c: Include buildsym-legacy.h. Move many functions to buildsym-legacy.c. * Makefile.in (HFILES_NO_SRCDIR): Add buildsym-legacy.h.
This commit is contained in:
parent
ab209f6fa9
commit
0baae8dbd3
|
@ -1,3 +1,21 @@
|
|||
2018-07-20 Tom Tromey <tom@tromey.com>
|
||||
|
||||
* xcoffread.c: Include buildsym-legacy.h.
|
||||
* windows-nat.c: Include buildsym-legacy.h.
|
||||
* stabsread.c: Include buildsym-legacy.h.
|
||||
* mdebugread.c: Include buildsym-legacy.h.
|
||||
* buildsym-legacy.h: New file.
|
||||
* buildsym-legacy.c: New file, from buildsym.c.
|
||||
* go32-nat.c: Include buildsym-legacy.h.
|
||||
* dwarf2read.c: Include buildsym-legacy.h.
|
||||
* dbxread.c: Include buildsym-legacy.h.
|
||||
* cp-namespace.c: Include buildsym-legacy.h.
|
||||
* coffread.c: Include buildsym-legacy.h.
|
||||
* buildsym.h: Move some contents to buildsym-legacy.h.
|
||||
* buildsym.c: Include buildsym-legacy.h. Move many functions to
|
||||
buildsym-legacy.c.
|
||||
* Makefile.in (HFILES_NO_SRCDIR): Add buildsym-legacy.h.
|
||||
|
||||
2018-07-20 Tom Tromey <tom@tromey.com>
|
||||
|
||||
* buildsym.h (struct buildsym_compunit): Move from buildsym.c.
|
||||
|
|
|
@ -932,6 +932,7 @@ COMMON_SFILES = \
|
|||
breakpoint.c \
|
||||
btrace.c \
|
||||
build-id.c \
|
||||
buildsym-legacy.c \
|
||||
buildsym.c \
|
||||
c-lang.c \
|
||||
c-typeprint.c \
|
||||
|
@ -1194,6 +1195,7 @@ HFILES_NO_SRCDIR = \
|
|||
bsd-kvm.h \
|
||||
bsd-uthread.h \
|
||||
build-id.h \
|
||||
buildsym-legacy.h \
|
||||
buildsym.h \
|
||||
c-lang.h \
|
||||
charset.h \
|
||||
|
|
|
@ -0,0 +1,377 @@
|
|||
/* Legacy support routines for building symbol tables in GDB's internal format.
|
||||
Copyright (C) 1986-2018 Free Software Foundation, Inc.
|
||||
|
||||
This file is part of GDB.
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>. */
|
||||
|
||||
#include "defs.h"
|
||||
#include "buildsym-legacy.h"
|
||||
|
||||
/* The work-in-progress of the compunit we are building.
|
||||
This is created first, before any subfiles by start_symtab. */
|
||||
|
||||
static struct buildsym_compunit *buildsym_compunit;
|
||||
|
||||
void
|
||||
record_debugformat (const char *format)
|
||||
{
|
||||
buildsym_compunit->record_debugformat (format);
|
||||
}
|
||||
|
||||
void
|
||||
record_producer (const char *producer)
|
||||
{
|
||||
buildsym_compunit->record_producer (producer);
|
||||
}
|
||||
|
||||
|
||||
|
||||
/* See buildsym.h. */
|
||||
|
||||
void
|
||||
set_last_source_file (const char *name)
|
||||
{
|
||||
gdb_assert (buildsym_compunit != nullptr || name == nullptr);
|
||||
if (buildsym_compunit != nullptr)
|
||||
buildsym_compunit->set_last_source_file (name);
|
||||
}
|
||||
|
||||
/* See buildsym.h. */
|
||||
|
||||
const char *
|
||||
get_last_source_file ()
|
||||
{
|
||||
if (buildsym_compunit == nullptr)
|
||||
return nullptr;
|
||||
return buildsym_compunit->get_last_source_file ();
|
||||
}
|
||||
|
||||
/* See buildsym.h. */
|
||||
|
||||
void
|
||||
set_last_source_start_addr (CORE_ADDR addr)
|
||||
{
|
||||
gdb_assert (buildsym_compunit != nullptr);
|
||||
buildsym_compunit->set_last_source_start_addr (addr);
|
||||
}
|
||||
|
||||
/* See buildsym.h. */
|
||||
|
||||
CORE_ADDR
|
||||
get_last_source_start_addr ()
|
||||
{
|
||||
gdb_assert (buildsym_compunit != nullptr);
|
||||
return buildsym_compunit->get_last_source_start_addr ();
|
||||
}
|
||||
|
||||
/* See buildsym.h. */
|
||||
|
||||
struct using_direct **
|
||||
get_local_using_directives ()
|
||||
{
|
||||
gdb_assert (buildsym_compunit != nullptr);
|
||||
return buildsym_compunit->get_local_using_directives ();
|
||||
}
|
||||
|
||||
/* See buildsym.h. */
|
||||
|
||||
void
|
||||
set_local_using_directives (struct using_direct *new_local)
|
||||
{
|
||||
gdb_assert (buildsym_compunit != nullptr);
|
||||
buildsym_compunit->set_local_using_directives (new_local);
|
||||
}
|
||||
|
||||
/* See buildsym.h. */
|
||||
|
||||
struct using_direct **
|
||||
get_global_using_directives ()
|
||||
{
|
||||
gdb_assert (buildsym_compunit != nullptr);
|
||||
return buildsym_compunit->get_global_using_directives ();
|
||||
}
|
||||
|
||||
/* See buildsym.h. */
|
||||
|
||||
bool
|
||||
outermost_context_p ()
|
||||
{
|
||||
gdb_assert (buildsym_compunit != nullptr);
|
||||
return buildsym_compunit->outermost_context_p ();
|
||||
}
|
||||
|
||||
/* See buildsym.h. */
|
||||
|
||||
struct context_stack *
|
||||
get_current_context_stack ()
|
||||
{
|
||||
gdb_assert (buildsym_compunit != nullptr);
|
||||
return buildsym_compunit->get_current_context_stack ();
|
||||
}
|
||||
|
||||
/* See buildsym.h. */
|
||||
|
||||
int
|
||||
get_context_stack_depth ()
|
||||
{
|
||||
gdb_assert (buildsym_compunit != nullptr);
|
||||
return buildsym_compunit->get_context_stack_depth ();
|
||||
}
|
||||
|
||||
/* See buildsym.h. */
|
||||
|
||||
struct subfile *
|
||||
get_current_subfile ()
|
||||
{
|
||||
gdb_assert (buildsym_compunit != nullptr);
|
||||
return buildsym_compunit->get_current_subfile ();
|
||||
}
|
||||
|
||||
/* See buildsym.h. */
|
||||
|
||||
struct pending **
|
||||
get_local_symbols ()
|
||||
{
|
||||
gdb_assert (buildsym_compunit != nullptr);
|
||||
return buildsym_compunit->get_local_symbols ();
|
||||
}
|
||||
|
||||
/* See buildsym.h. */
|
||||
|
||||
struct pending **
|
||||
get_file_symbols ()
|
||||
{
|
||||
gdb_assert (buildsym_compunit != nullptr);
|
||||
return buildsym_compunit->get_file_symbols ();
|
||||
}
|
||||
|
||||
/* See buildsym.h. */
|
||||
|
||||
struct pending **
|
||||
get_global_symbols ()
|
||||
{
|
||||
gdb_assert (buildsym_compunit != nullptr);
|
||||
return buildsym_compunit->get_global_symbols ();
|
||||
}
|
||||
|
||||
void
|
||||
start_subfile (const char *name)
|
||||
{
|
||||
gdb_assert (buildsym_compunit != nullptr);
|
||||
buildsym_compunit->start_subfile (name);
|
||||
}
|
||||
|
||||
void
|
||||
patch_subfile_names (struct subfile *subfile, const char *name)
|
||||
{
|
||||
gdb_assert (buildsym_compunit != nullptr);
|
||||
buildsym_compunit->patch_subfile_names (subfile, name);
|
||||
}
|
||||
|
||||
void
|
||||
push_subfile ()
|
||||
{
|
||||
gdb_assert (buildsym_compunit != nullptr);
|
||||
buildsym_compunit->push_subfile ();
|
||||
}
|
||||
|
||||
const char *
|
||||
pop_subfile ()
|
||||
{
|
||||
gdb_assert (buildsym_compunit != nullptr);
|
||||
return buildsym_compunit->pop_subfile ();
|
||||
}
|
||||
|
||||
struct block *
|
||||
end_symtab_get_static_block (CORE_ADDR end_addr, int expandable, int required)
|
||||
{
|
||||
gdb_assert (buildsym_compunit != nullptr);
|
||||
return buildsym_compunit->end_symtab_get_static_block (end_addr, expandable,
|
||||
required);
|
||||
}
|
||||
|
||||
/* Delete the buildsym compunit. */
|
||||
|
||||
static void
|
||||
free_buildsym_compunit (void)
|
||||
{
|
||||
if (buildsym_compunit == NULL)
|
||||
return;
|
||||
delete buildsym_compunit;
|
||||
buildsym_compunit = NULL;
|
||||
}
|
||||
|
||||
struct compunit_symtab *
|
||||
end_symtab_from_static_block (struct block *static_block,
|
||||
int section, int expandable)
|
||||
{
|
||||
gdb_assert (buildsym_compunit != nullptr);
|
||||
struct compunit_symtab *result
|
||||
= buildsym_compunit->end_symtab_from_static_block (static_block,
|
||||
section, expandable);
|
||||
free_buildsym_compunit ();
|
||||
return result;
|
||||
}
|
||||
|
||||
struct compunit_symtab *
|
||||
end_symtab (CORE_ADDR end_addr, int section)
|
||||
{
|
||||
gdb_assert (buildsym_compunit != nullptr);
|
||||
struct compunit_symtab *result
|
||||
= buildsym_compunit->end_symtab (end_addr, section);
|
||||
free_buildsym_compunit ();
|
||||
return result;
|
||||
}
|
||||
|
||||
struct compunit_symtab *
|
||||
end_expandable_symtab (CORE_ADDR end_addr, int section)
|
||||
{
|
||||
gdb_assert (buildsym_compunit != nullptr);
|
||||
struct compunit_symtab *result
|
||||
= buildsym_compunit->end_expandable_symtab (end_addr, section);
|
||||
free_buildsym_compunit ();
|
||||
return result;
|
||||
}
|
||||
|
||||
void
|
||||
augment_type_symtab ()
|
||||
{
|
||||
gdb_assert (buildsym_compunit != nullptr);
|
||||
buildsym_compunit->augment_type_symtab ();
|
||||
free_buildsym_compunit ();
|
||||
}
|
||||
|
||||
struct context_stack *
|
||||
push_context (int desc, CORE_ADDR valu)
|
||||
{
|
||||
gdb_assert (buildsym_compunit != nullptr);
|
||||
return buildsym_compunit->push_context (desc, valu);
|
||||
}
|
||||
|
||||
struct context_stack
|
||||
pop_context ()
|
||||
{
|
||||
gdb_assert (buildsym_compunit != nullptr);
|
||||
return buildsym_compunit->pop_context ();
|
||||
}
|
||||
|
||||
struct block *
|
||||
finish_block (struct symbol *symbol, struct pending_block *old_blocks,
|
||||
const struct dynamic_prop *static_link,
|
||||
CORE_ADDR start, CORE_ADDR end)
|
||||
{
|
||||
gdb_assert (buildsym_compunit != nullptr);
|
||||
return buildsym_compunit->finish_block (symbol, old_blocks, static_link,
|
||||
start, end);
|
||||
}
|
||||
|
||||
void
|
||||
record_block_range (struct block *block, CORE_ADDR start,
|
||||
CORE_ADDR end_inclusive)
|
||||
{
|
||||
gdb_assert (buildsym_compunit != nullptr);
|
||||
buildsym_compunit->record_block_range (block, start, end_inclusive);
|
||||
}
|
||||
|
||||
void
|
||||
record_line (struct subfile *subfile, int line, CORE_ADDR pc)
|
||||
{
|
||||
gdb_assert (buildsym_compunit != nullptr);
|
||||
buildsym_compunit->record_line (subfile, line, pc);
|
||||
}
|
||||
|
||||
/* Start a new symtab for a new source file in OBJFILE. Called, for example,
|
||||
when a stabs symbol of type N_SO is seen, or when a DWARF
|
||||
TAG_compile_unit DIE is seen. It indicates the start of data for
|
||||
one original source file.
|
||||
|
||||
NAME is the name of the file (cannot be NULL). COMP_DIR is the
|
||||
directory in which the file was compiled (or NULL if not known).
|
||||
START_ADDR is the lowest address of objects in the file (or 0 if
|
||||
not known). LANGUAGE is the language of the source file, or
|
||||
language_unknown if not known, in which case it'll be deduced from
|
||||
the filename. */
|
||||
|
||||
struct compunit_symtab *
|
||||
start_symtab (struct objfile *objfile, const char *name, const char *comp_dir,
|
||||
CORE_ADDR start_addr, enum language language)
|
||||
{
|
||||
/* These should have been reset either by successful completion of building
|
||||
a symtab, or by the scoped_free_pendings destructor. */
|
||||
gdb_assert (buildsym_compunit == nullptr);
|
||||
|
||||
buildsym_compunit = new struct buildsym_compunit (objfile, name, comp_dir,
|
||||
language, start_addr);
|
||||
|
||||
return buildsym_compunit->get_compunit_symtab ();
|
||||
}
|
||||
|
||||
/* Restart compilation for a symtab.
|
||||
CUST is the result of end_expandable_symtab.
|
||||
NAME, START_ADDR are the source file we are resuming with.
|
||||
|
||||
This is used when a symtab is built from multiple sources.
|
||||
The symtab is first built with start_symtab/end_expandable_symtab
|
||||
and then for each additional piece call restart_symtab/augment_*_symtab.
|
||||
Note: At the moment there is only augment_type_symtab. */
|
||||
|
||||
void
|
||||
restart_symtab (struct compunit_symtab *cust,
|
||||
const char *name, CORE_ADDR start_addr)
|
||||
{
|
||||
/* These should have been reset either by successful completion of building
|
||||
a symtab, or by the scoped_free_pendings destructor. */
|
||||
gdb_assert (buildsym_compunit == nullptr);
|
||||
|
||||
buildsym_compunit
|
||||
= new struct buildsym_compunit (COMPUNIT_OBJFILE (cust),
|
||||
name,
|
||||
COMPUNIT_DIRNAME (cust),
|
||||
compunit_language (cust),
|
||||
start_addr,
|
||||
cust);
|
||||
}
|
||||
|
||||
/* See buildsym.h. */
|
||||
|
||||
struct compunit_symtab *
|
||||
buildsym_compunit_symtab (void)
|
||||
{
|
||||
gdb_assert (buildsym_compunit != NULL);
|
||||
|
||||
return buildsym_compunit->get_compunit_symtab ();
|
||||
}
|
||||
|
||||
/* See buildsym.h. */
|
||||
|
||||
struct macro_table *
|
||||
get_macro_table (void)
|
||||
{
|
||||
struct objfile *objfile;
|
||||
|
||||
gdb_assert (buildsym_compunit != NULL);
|
||||
return buildsym_compunit->get_macro_table ();
|
||||
}
|
||||
|
||||
/* At end of reading syms, or in case of quit, ensure everything
|
||||
associated with building symtabs is freed.
|
||||
|
||||
N.B. This is *not* intended to be used when building psymtabs. Some debug
|
||||
info readers call this anyway, which is harmless if confusing. */
|
||||
|
||||
scoped_free_pendings::~scoped_free_pendings ()
|
||||
{
|
||||
free_buildsym_compunit ();
|
||||
}
|
|
@ -0,0 +1,210 @@
|
|||
/* Build symbol tables in GDB's internal format - legacy APIs
|
||||
Copyright (C) 1986-2018 Free Software Foundation, Inc.
|
||||
|
||||
This file is part of GDB.
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>. */
|
||||
|
||||
#if !defined (LEGACY_BUILDSYM_H)
|
||||
#define LEGACY_BUILDSYM_H 1
|
||||
|
||||
#include "buildsym.h"
|
||||
|
||||
/* This module provides definitions used for creating and adding to
|
||||
the symbol table. These routines are called from various symbol-
|
||||
file-reading routines. This file holds the legacy API, which
|
||||
relies on a global variable to work properly. New or maintained
|
||||
symbol readers should use the builder API in buildsym.h.
|
||||
|
||||
The basic way this module is used is as follows:
|
||||
|
||||
scoped_free_pendings free_pending;
|
||||
cust = start_symtab (...);
|
||||
... read debug info ...
|
||||
cust = end_symtab (...);
|
||||
|
||||
The compunit symtab pointer ("cust") is returned from both start_symtab
|
||||
and end_symtab to simplify the debug info readers.
|
||||
|
||||
There are minor variations on this, e.g., dwarf2read.c splits end_symtab
|
||||
into two calls: end_symtab_get_static_block, end_symtab_from_static_block,
|
||||
but all debug info readers follow this basic flow.
|
||||
|
||||
Reading DWARF Type Units is another variation:
|
||||
|
||||
scoped_free_pendings free_pending;
|
||||
cust = start_symtab (...);
|
||||
... read debug info ...
|
||||
cust = end_expandable_symtab (...);
|
||||
|
||||
And then reading subsequent Type Units within the containing "Comp Unit"
|
||||
will use a second flow:
|
||||
|
||||
scoped_free_pendings free_pending;
|
||||
cust = restart_symtab (...);
|
||||
... read debug info ...
|
||||
cust = augment_type_symtab (...);
|
||||
|
||||
dbxread.c and xcoffread.c use another variation:
|
||||
|
||||
scoped_free_pendings free_pending;
|
||||
cust = start_symtab (...);
|
||||
... read debug info ...
|
||||
cust = end_symtab (...);
|
||||
... start_symtab + read + end_symtab repeated ...
|
||||
*/
|
||||
|
||||
class scoped_free_pendings
|
||||
{
|
||||
public:
|
||||
|
||||
scoped_free_pendings () = default;
|
||||
~scoped_free_pendings ();
|
||||
|
||||
DISABLE_COPY_AND_ASSIGN (scoped_free_pendings);
|
||||
};
|
||||
|
||||
extern struct block *finish_block (struct symbol *symbol,
|
||||
struct pending_block *old_blocks,
|
||||
const struct dynamic_prop *static_link,
|
||||
CORE_ADDR start,
|
||||
CORE_ADDR end);
|
||||
|
||||
extern void record_block_range (struct block *,
|
||||
CORE_ADDR start, CORE_ADDR end_inclusive);
|
||||
|
||||
extern void start_subfile (const char *name);
|
||||
|
||||
extern void patch_subfile_names (struct subfile *subfile, const char *name);
|
||||
|
||||
extern void push_subfile ();
|
||||
|
||||
extern const char *pop_subfile ();
|
||||
|
||||
extern struct block *end_symtab_get_static_block (CORE_ADDR end_addr,
|
||||
int expandable,
|
||||
int required);
|
||||
|
||||
extern struct compunit_symtab *
|
||||
end_symtab_from_static_block (struct block *static_block,
|
||||
int section, int expandable);
|
||||
|
||||
extern struct compunit_symtab *end_symtab (CORE_ADDR end_addr, int section);
|
||||
|
||||
extern struct compunit_symtab *end_expandable_symtab (CORE_ADDR end_addr,
|
||||
int section);
|
||||
|
||||
extern void augment_type_symtab (void);
|
||||
|
||||
extern struct context_stack *push_context (int desc, CORE_ADDR valu);
|
||||
|
||||
extern struct context_stack pop_context ();
|
||||
|
||||
extern record_line_ftype record_line;
|
||||
|
||||
extern struct compunit_symtab *start_symtab (struct objfile *objfile,
|
||||
const char *name,
|
||||
const char *comp_dir,
|
||||
CORE_ADDR start_addr,
|
||||
enum language language);
|
||||
|
||||
extern void restart_symtab (struct compunit_symtab *cust,
|
||||
const char *name, CORE_ADDR start_addr);
|
||||
|
||||
/* Record the name of the debug format in the current pending symbol
|
||||
table. FORMAT must be a string with a lifetime at least as long as
|
||||
the symtab's objfile. */
|
||||
|
||||
extern void record_debugformat (const char *format);
|
||||
|
||||
/* Record the name of the debuginfo producer (usually the compiler) in
|
||||
the current pending symbol table. PRODUCER must be a string with a
|
||||
lifetime at least as long as the symtab's objfile. */
|
||||
|
||||
extern void record_producer (const char *producer);
|
||||
|
||||
/* Set the name of the last source file. NAME is copied by this
|
||||
function. */
|
||||
|
||||
extern void set_last_source_file (const char *name);
|
||||
|
||||
/* Fetch the name of the last source file. */
|
||||
|
||||
extern const char *get_last_source_file (void);
|
||||
|
||||
/* Return the compunit symtab object.
|
||||
It is only valid to call this between calls to start_symtab and the
|
||||
end_symtab* functions. */
|
||||
|
||||
extern struct compunit_symtab *buildsym_compunit_symtab (void);
|
||||
|
||||
/* Return the macro table.
|
||||
Initialize it if this is the first use.
|
||||
It is only valid to call this between calls to start_symtab and the
|
||||
end_symtab* functions. */
|
||||
|
||||
extern struct macro_table *get_macro_table (void);
|
||||
|
||||
/* Set the last source start address. Can only be used between
|
||||
start_symtab and end_symtab* calls. */
|
||||
|
||||
extern void set_last_source_start_addr (CORE_ADDR addr);
|
||||
|
||||
/* Get the last source start address. Can only be used between
|
||||
start_symtab and end_symtab* calls. */
|
||||
|
||||
extern CORE_ADDR get_last_source_start_addr ();
|
||||
|
||||
/* Return the local using directives. */
|
||||
|
||||
extern struct using_direct **get_local_using_directives ();
|
||||
|
||||
/* Set the list of local using directives. */
|
||||
|
||||
extern void set_local_using_directives (struct using_direct *new_local);
|
||||
|
||||
/* Return the global using directives. */
|
||||
|
||||
extern struct using_direct **get_global_using_directives ();
|
||||
|
||||
/* True if the context stack is empty. */
|
||||
|
||||
extern bool outermost_context_p ();
|
||||
|
||||
/* Return the top of the context stack, or nullptr if there is an
|
||||
entry. */
|
||||
|
||||
extern struct context_stack *get_current_context_stack ();
|
||||
|
||||
/* Return the context stack depth. */
|
||||
|
||||
extern int get_context_stack_depth ();
|
||||
|
||||
/* Return the current subfile. */
|
||||
|
||||
extern struct subfile *get_current_subfile ();
|
||||
|
||||
/* Return the local symbol list. */
|
||||
|
||||
extern struct pending **get_local_symbols ();
|
||||
|
||||
/* Return the file symbol list. */
|
||||
|
||||
extern struct pending **get_file_symbols ();
|
||||
|
||||
/* Return the global symbol list. */
|
||||
|
||||
extern struct pending **get_global_symbols ();
|
||||
|
||||
#endif /* defined (LEGACY_BUILDSYM_H) */
|
408
gdb/buildsym.c
408
gdb/buildsym.c
|
@ -16,53 +16,8 @@
|
|||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>. */
|
||||
|
||||
/* This module provides subroutines used for creating and adding to
|
||||
the symbol table. These routines are called from various symbol-
|
||||
file-reading routines.
|
||||
|
||||
Routines to support specific debugging information formats (stabs,
|
||||
DWARF, etc) belong somewhere else.
|
||||
|
||||
The basic way this module is used is as follows:
|
||||
|
||||
scoped_free_pendings free_pending;
|
||||
cust = start_symtab (...);
|
||||
... read debug info ...
|
||||
cust = end_symtab (...);
|
||||
|
||||
The compunit symtab pointer ("cust") is returned from both start_symtab
|
||||
and end_symtab to simplify the debug info readers.
|
||||
|
||||
There are minor variations on this, e.g., dwarf2read.c splits end_symtab
|
||||
into two calls: end_symtab_get_static_block, end_symtab_from_static_block,
|
||||
but all debug info readers follow this basic flow.
|
||||
|
||||
Reading DWARF Type Units is another variation:
|
||||
|
||||
scoped_free_pendings free_pending;
|
||||
cust = start_symtab (...);
|
||||
... read debug info ...
|
||||
cust = end_expandable_symtab (...);
|
||||
|
||||
And then reading subsequent Type Units within the containing "Comp Unit"
|
||||
will use a second flow:
|
||||
|
||||
scoped_free_pendings free_pending;
|
||||
cust = restart_symtab (...);
|
||||
... read debug info ...
|
||||
cust = augment_type_symtab (...);
|
||||
|
||||
dbxread.c and xcoffread.c use another variation:
|
||||
|
||||
scoped_free_pendings free_pending;
|
||||
cust = start_symtab (...);
|
||||
... read debug info ...
|
||||
cust = end_symtab (...);
|
||||
... start_symtab + read + end_symtab repeated ...
|
||||
*/
|
||||
|
||||
#include "defs.h"
|
||||
#include "buildsym.h"
|
||||
#include "buildsym-legacy.h"
|
||||
#include "bfd.h"
|
||||
#include "gdb_obstack.h"
|
||||
#include "symtab.h"
|
||||
|
@ -85,11 +40,6 @@
|
|||
|
||||
#include "stabsread.h"
|
||||
|
||||
/* The work-in-progress of the compunit we are building.
|
||||
This is created first, before any subfiles by start_symtab. */
|
||||
|
||||
static struct buildsym_compunit *buildsym_compunit;
|
||||
|
||||
/* List of blocks already made (lexical contexts already closed).
|
||||
This is used at the end to make the blockvector. */
|
||||
|
||||
|
@ -99,8 +49,6 @@ struct pending_block
|
|||
struct block *block;
|
||||
};
|
||||
|
||||
static void free_buildsym_compunit (void);
|
||||
|
||||
static int compare_line_numbers (const void *ln1p, const void *ln2p);
|
||||
|
||||
/* Initial sizes of data structures. These are realloc'd larger if
|
||||
|
@ -230,17 +178,6 @@ find_symbol_in_list (struct pending *list, char *name, int length)
|
|||
return (NULL);
|
||||
}
|
||||
|
||||
/* At end of reading syms, or in case of quit, ensure everything
|
||||
associated with building symtabs is freed.
|
||||
|
||||
N.B. This is *not* intended to be used when building psymtabs. Some debug
|
||||
info readers call this anyway, which is harmless if confusing. */
|
||||
|
||||
scoped_free_pendings::~scoped_free_pendings ()
|
||||
{
|
||||
free_buildsym_compunit ();
|
||||
}
|
||||
|
||||
/* Record BLOCK on the list of all blocks in the file. Put it after
|
||||
OPBLOCK, or at the beginning if opblock is NULL. This puts the
|
||||
block in the list after all its subblocks. */
|
||||
|
@ -661,17 +598,6 @@ buildsym_compunit::start_subfile (const char *name)
|
|||
}
|
||||
}
|
||||
|
||||
/* Delete the buildsym compunit. */
|
||||
|
||||
static void
|
||||
free_buildsym_compunit (void)
|
||||
{
|
||||
if (buildsym_compunit == NULL)
|
||||
return;
|
||||
delete buildsym_compunit;
|
||||
buildsym_compunit = NULL;
|
||||
}
|
||||
|
||||
/* For stabs readers, the first N_SO symbol is assumed to be the
|
||||
source file name, and the subfile struct is initialized using that
|
||||
assumption. If another N_SO symbol is later seen, immediately
|
||||
|
@ -824,79 +750,6 @@ compare_line_numbers (const void *ln1p, const void *ln2p)
|
|||
return ln1->line - ln2->line;
|
||||
}
|
||||
|
||||
/* See buildsym.h. */
|
||||
|
||||
struct compunit_symtab *
|
||||
buildsym_compunit_symtab (void)
|
||||
{
|
||||
gdb_assert (buildsym_compunit != NULL);
|
||||
|
||||
return buildsym_compunit->get_compunit_symtab ();
|
||||
}
|
||||
|
||||
/* See buildsym.h. */
|
||||
|
||||
struct macro_table *
|
||||
get_macro_table (void)
|
||||
{
|
||||
struct objfile *objfile;
|
||||
|
||||
gdb_assert (buildsym_compunit != NULL);
|
||||
return buildsym_compunit->get_macro_table ();
|
||||
}
|
||||
|
||||
/* Start a new symtab for a new source file in OBJFILE. Called, for example,
|
||||
when a stabs symbol of type N_SO is seen, or when a DWARF
|
||||
TAG_compile_unit DIE is seen. It indicates the start of data for
|
||||
one original source file.
|
||||
|
||||
NAME is the name of the file (cannot be NULL). COMP_DIR is the
|
||||
directory in which the file was compiled (or NULL if not known).
|
||||
START_ADDR is the lowest address of objects in the file (or 0 if
|
||||
not known). LANGUAGE is the language of the source file, or
|
||||
language_unknown if not known, in which case it'll be deduced from
|
||||
the filename. */
|
||||
|
||||
struct compunit_symtab *
|
||||
start_symtab (struct objfile *objfile, const char *name, const char *comp_dir,
|
||||
CORE_ADDR start_addr, enum language language)
|
||||
{
|
||||
/* These should have been reset either by successful completion of building
|
||||
a symtab, or by the scoped_free_pendings destructor. */
|
||||
gdb_assert (buildsym_compunit == nullptr);
|
||||
|
||||
buildsym_compunit = new struct buildsym_compunit (objfile, name, comp_dir,
|
||||
language, start_addr);
|
||||
|
||||
return buildsym_compunit->get_compunit_symtab ();
|
||||
}
|
||||
|
||||
/* Restart compilation for a symtab.
|
||||
CUST is the result of end_expandable_symtab.
|
||||
NAME, START_ADDR are the source file we are resuming with.
|
||||
|
||||
This is used when a symtab is built from multiple sources.
|
||||
The symtab is first built with start_symtab/end_expandable_symtab
|
||||
and then for each additional piece call restart_symtab/augment_*_symtab.
|
||||
Note: At the moment there is only augment_type_symtab. */
|
||||
|
||||
void
|
||||
restart_symtab (struct compunit_symtab *cust,
|
||||
const char *name, CORE_ADDR start_addr)
|
||||
{
|
||||
/* These should have been reset either by successful completion of building
|
||||
a symtab, or by the scoped_free_pendings destructor. */
|
||||
gdb_assert (buildsym_compunit == nullptr);
|
||||
|
||||
buildsym_compunit
|
||||
= new struct buildsym_compunit (COMPUNIT_OBJFILE (cust),
|
||||
name,
|
||||
COMPUNIT_DIRNAME (cust),
|
||||
compunit_language (cust),
|
||||
start_addr,
|
||||
cust);
|
||||
}
|
||||
|
||||
/* Subroutine of end_symtab to simplify it. Look for a subfile that
|
||||
matches the main source file's basename. If there is only one, and
|
||||
if the main source file doesn't have any symbol or line number
|
||||
|
@ -1409,262 +1262,3 @@ buildsym_compunit::pop_context ()
|
|||
m_context_stack.pop_back ();
|
||||
return result;
|
||||
}
|
||||
|
||||
|
||||
|
||||
void
|
||||
record_debugformat (const char *format)
|
||||
{
|
||||
buildsym_compunit->record_debugformat (format);
|
||||
}
|
||||
|
||||
void
|
||||
record_producer (const char *producer)
|
||||
{
|
||||
buildsym_compunit->record_producer (producer);
|
||||
}
|
||||
|
||||
|
||||
|
||||
/* See buildsym.h. */
|
||||
|
||||
void
|
||||
set_last_source_file (const char *name)
|
||||
{
|
||||
gdb_assert (buildsym_compunit != nullptr || name == nullptr);
|
||||
if (buildsym_compunit != nullptr)
|
||||
buildsym_compunit->set_last_source_file (name);
|
||||
}
|
||||
|
||||
/* See buildsym.h. */
|
||||
|
||||
const char *
|
||||
get_last_source_file ()
|
||||
{
|
||||
if (buildsym_compunit == nullptr)
|
||||
return nullptr;
|
||||
return buildsym_compunit->get_last_source_file ();
|
||||
}
|
||||
|
||||
/* See buildsym.h. */
|
||||
|
||||
void
|
||||
set_last_source_start_addr (CORE_ADDR addr)
|
||||
{
|
||||
gdb_assert (buildsym_compunit != nullptr);
|
||||
buildsym_compunit->set_last_source_start_addr (addr);
|
||||
}
|
||||
|
||||
/* See buildsym.h. */
|
||||
|
||||
CORE_ADDR
|
||||
get_last_source_start_addr ()
|
||||
{
|
||||
gdb_assert (buildsym_compunit != nullptr);
|
||||
return buildsym_compunit->get_last_source_start_addr ();
|
||||
}
|
||||
|
||||
/* See buildsym.h. */
|
||||
|
||||
struct using_direct **
|
||||
get_local_using_directives ()
|
||||
{
|
||||
gdb_assert (buildsym_compunit != nullptr);
|
||||
return buildsym_compunit->get_local_using_directives ();
|
||||
}
|
||||
|
||||
/* See buildsym.h. */
|
||||
|
||||
void
|
||||
set_local_using_directives (struct using_direct *new_local)
|
||||
{
|
||||
gdb_assert (buildsym_compunit != nullptr);
|
||||
buildsym_compunit->set_local_using_directives (new_local);
|
||||
}
|
||||
|
||||
/* See buildsym.h. */
|
||||
|
||||
struct using_direct **
|
||||
get_global_using_directives ()
|
||||
{
|
||||
gdb_assert (buildsym_compunit != nullptr);
|
||||
return buildsym_compunit->get_global_using_directives ();
|
||||
}
|
||||
|
||||
/* See buildsym.h. */
|
||||
|
||||
bool
|
||||
outermost_context_p ()
|
||||
{
|
||||
gdb_assert (buildsym_compunit != nullptr);
|
||||
return buildsym_compunit->outermost_context_p ();
|
||||
}
|
||||
|
||||
/* See buildsym.h. */
|
||||
|
||||
struct context_stack *
|
||||
get_current_context_stack ()
|
||||
{
|
||||
gdb_assert (buildsym_compunit != nullptr);
|
||||
return buildsym_compunit->get_current_context_stack ();
|
||||
}
|
||||
|
||||
/* See buildsym.h. */
|
||||
|
||||
int
|
||||
get_context_stack_depth ()
|
||||
{
|
||||
gdb_assert (buildsym_compunit != nullptr);
|
||||
return buildsym_compunit->get_context_stack_depth ();
|
||||
}
|
||||
|
||||
/* See buildsym.h. */
|
||||
|
||||
struct subfile *
|
||||
get_current_subfile ()
|
||||
{
|
||||
gdb_assert (buildsym_compunit != nullptr);
|
||||
return buildsym_compunit->get_current_subfile ();
|
||||
}
|
||||
|
||||
/* See buildsym.h. */
|
||||
|
||||
struct pending **
|
||||
get_local_symbols ()
|
||||
{
|
||||
gdb_assert (buildsym_compunit != nullptr);
|
||||
return buildsym_compunit->get_local_symbols ();
|
||||
}
|
||||
|
||||
/* See buildsym.h. */
|
||||
|
||||
struct pending **
|
||||
get_file_symbols ()
|
||||
{
|
||||
gdb_assert (buildsym_compunit != nullptr);
|
||||
return buildsym_compunit->get_file_symbols ();
|
||||
}
|
||||
|
||||
/* See buildsym.h. */
|
||||
|
||||
struct pending **
|
||||
get_global_symbols ()
|
||||
{
|
||||
gdb_assert (buildsym_compunit != nullptr);
|
||||
return buildsym_compunit->get_global_symbols ();
|
||||
}
|
||||
|
||||
void
|
||||
start_subfile (const char *name)
|
||||
{
|
||||
gdb_assert (buildsym_compunit != nullptr);
|
||||
buildsym_compunit->start_subfile (name);
|
||||
}
|
||||
|
||||
void
|
||||
patch_subfile_names (struct subfile *subfile, const char *name)
|
||||
{
|
||||
gdb_assert (buildsym_compunit != nullptr);
|
||||
buildsym_compunit->patch_subfile_names (subfile, name);
|
||||
}
|
||||
|
||||
void
|
||||
push_subfile ()
|
||||
{
|
||||
gdb_assert (buildsym_compunit != nullptr);
|
||||
buildsym_compunit->push_subfile ();
|
||||
}
|
||||
|
||||
const char *
|
||||
pop_subfile ()
|
||||
{
|
||||
gdb_assert (buildsym_compunit != nullptr);
|
||||
return buildsym_compunit->pop_subfile ();
|
||||
}
|
||||
|
||||
struct block *
|
||||
end_symtab_get_static_block (CORE_ADDR end_addr, int expandable, int required)
|
||||
{
|
||||
gdb_assert (buildsym_compunit != nullptr);
|
||||
return buildsym_compunit->end_symtab_get_static_block (end_addr, expandable,
|
||||
required);
|
||||
}
|
||||
|
||||
struct compunit_symtab *
|
||||
end_symtab_from_static_block (struct block *static_block,
|
||||
int section, int expandable)
|
||||
{
|
||||
gdb_assert (buildsym_compunit != nullptr);
|
||||
struct compunit_symtab *result
|
||||
= buildsym_compunit->end_symtab_from_static_block (static_block,
|
||||
section, expandable);
|
||||
free_buildsym_compunit ();
|
||||
return result;
|
||||
}
|
||||
|
||||
struct compunit_symtab *
|
||||
end_symtab (CORE_ADDR end_addr, int section)
|
||||
{
|
||||
gdb_assert (buildsym_compunit != nullptr);
|
||||
struct compunit_symtab *result
|
||||
= buildsym_compunit->end_symtab (end_addr, section);
|
||||
free_buildsym_compunit ();
|
||||
return result;
|
||||
}
|
||||
|
||||
struct compunit_symtab *
|
||||
end_expandable_symtab (CORE_ADDR end_addr, int section)
|
||||
{
|
||||
gdb_assert (buildsym_compunit != nullptr);
|
||||
struct compunit_symtab *result
|
||||
= buildsym_compunit->end_expandable_symtab (end_addr, section);
|
||||
free_buildsym_compunit ();
|
||||
return result;
|
||||
}
|
||||
|
||||
void
|
||||
augment_type_symtab ()
|
||||
{
|
||||
gdb_assert (buildsym_compunit != nullptr);
|
||||
buildsym_compunit->augment_type_symtab ();
|
||||
free_buildsym_compunit ();
|
||||
}
|
||||
|
||||
struct context_stack *
|
||||
push_context (int desc, CORE_ADDR valu)
|
||||
{
|
||||
gdb_assert (buildsym_compunit != nullptr);
|
||||
return buildsym_compunit->push_context (desc, valu);
|
||||
}
|
||||
|
||||
struct context_stack
|
||||
pop_context ()
|
||||
{
|
||||
gdb_assert (buildsym_compunit != nullptr);
|
||||
return buildsym_compunit->pop_context ();
|
||||
}
|
||||
|
||||
struct block *
|
||||
finish_block (struct symbol *symbol, struct pending_block *old_blocks,
|
||||
const struct dynamic_prop *static_link,
|
||||
CORE_ADDR start, CORE_ADDR end)
|
||||
{
|
||||
gdb_assert (buildsym_compunit != nullptr);
|
||||
return buildsym_compunit->finish_block (symbol, old_blocks, static_link,
|
||||
start, end);
|
||||
}
|
||||
|
||||
void
|
||||
record_block_range (struct block *block, CORE_ADDR start,
|
||||
CORE_ADDR end_inclusive)
|
||||
{
|
||||
gdb_assert (buildsym_compunit != nullptr);
|
||||
buildsym_compunit->record_block_range (block, start, end_inclusive);
|
||||
}
|
||||
|
||||
void
|
||||
record_line (struct subfile *subfile, int line, CORE_ADDR pc)
|
||||
{
|
||||
gdb_assert (buildsym_compunit != nullptr);
|
||||
buildsym_compunit->record_line (subfile, line, pc);
|
||||
}
|
||||
|
|
142
gdb/buildsym.h
142
gdb/buildsym.h
|
@ -408,146 +408,4 @@ extern void add_symbol_to_list (struct symbol *symbol,
|
|||
extern struct symbol *find_symbol_in_list (struct pending *list,
|
||||
char *name, int length);
|
||||
|
||||
extern struct block *finish_block (struct symbol *symbol,
|
||||
struct pending_block *old_blocks,
|
||||
const struct dynamic_prop *static_link,
|
||||
CORE_ADDR start,
|
||||
CORE_ADDR end);
|
||||
|
||||
extern void record_block_range (struct block *,
|
||||
CORE_ADDR start, CORE_ADDR end_inclusive);
|
||||
|
||||
class scoped_free_pendings
|
||||
{
|
||||
public:
|
||||
|
||||
scoped_free_pendings () = default;
|
||||
~scoped_free_pendings ();
|
||||
|
||||
DISABLE_COPY_AND_ASSIGN (scoped_free_pendings);
|
||||
};
|
||||
|
||||
extern void start_subfile (const char *name);
|
||||
|
||||
extern void patch_subfile_names (struct subfile *subfile, const char *name);
|
||||
|
||||
extern void push_subfile ();
|
||||
|
||||
extern const char *pop_subfile ();
|
||||
|
||||
extern struct block *end_symtab_get_static_block (CORE_ADDR end_addr,
|
||||
int expandable,
|
||||
int required);
|
||||
|
||||
extern struct compunit_symtab *
|
||||
end_symtab_from_static_block (struct block *static_block,
|
||||
int section, int expandable);
|
||||
|
||||
extern struct compunit_symtab *end_symtab (CORE_ADDR end_addr, int section);
|
||||
|
||||
extern struct compunit_symtab *end_expandable_symtab (CORE_ADDR end_addr,
|
||||
int section);
|
||||
|
||||
extern void augment_type_symtab (void);
|
||||
|
||||
extern struct context_stack *push_context (int desc, CORE_ADDR valu);
|
||||
|
||||
extern struct context_stack pop_context ();
|
||||
|
||||
extern record_line_ftype record_line;
|
||||
|
||||
extern struct compunit_symtab *start_symtab (struct objfile *objfile,
|
||||
const char *name,
|
||||
const char *comp_dir,
|
||||
CORE_ADDR start_addr,
|
||||
enum language language);
|
||||
|
||||
extern void restart_symtab (struct compunit_symtab *cust,
|
||||
const char *name, CORE_ADDR start_addr);
|
||||
|
||||
/* Record the name of the debug format in the current pending symbol
|
||||
table. FORMAT must be a string with a lifetime at least as long as
|
||||
the symtab's objfile. */
|
||||
|
||||
extern void record_debugformat (const char *format);
|
||||
|
||||
/* Record the name of the debuginfo producer (usually the compiler) in
|
||||
the current pending symbol table. PRODUCER must be a string with a
|
||||
lifetime at least as long as the symtab's objfile. */
|
||||
|
||||
extern void record_producer (const char *producer);
|
||||
|
||||
/* Set the name of the last source file. NAME is copied by this
|
||||
function. */
|
||||
|
||||
extern void set_last_source_file (const char *name);
|
||||
|
||||
/* Fetch the name of the last source file. */
|
||||
|
||||
extern const char *get_last_source_file (void);
|
||||
|
||||
/* Return the compunit symtab object.
|
||||
It is only valid to call this between calls to start_symtab and the
|
||||
end_symtab* functions. */
|
||||
|
||||
extern struct compunit_symtab *buildsym_compunit_symtab (void);
|
||||
|
||||
/* Return the macro table.
|
||||
Initialize it if this is the first use.
|
||||
It is only valid to call this between calls to start_symtab and the
|
||||
end_symtab* functions. */
|
||||
|
||||
extern struct macro_table *get_macro_table (void);
|
||||
|
||||
/* Set the last source start address. Can only be used between
|
||||
start_symtab and end_symtab* calls. */
|
||||
|
||||
extern void set_last_source_start_addr (CORE_ADDR addr);
|
||||
|
||||
/* Get the last source start address. Can only be used between
|
||||
start_symtab and end_symtab* calls. */
|
||||
|
||||
extern CORE_ADDR get_last_source_start_addr ();
|
||||
|
||||
/* Return the local using directives. */
|
||||
|
||||
extern struct using_direct **get_local_using_directives ();
|
||||
|
||||
/* Set the list of local using directives. */
|
||||
|
||||
extern void set_local_using_directives (struct using_direct *new_local);
|
||||
|
||||
/* Return the global using directives. */
|
||||
|
||||
extern struct using_direct **get_global_using_directives ();
|
||||
|
||||
/* True if the context stack is empty. */
|
||||
|
||||
extern bool outermost_context_p ();
|
||||
|
||||
/* Return the top of the context stack, or nullptr if there is an
|
||||
entry. */
|
||||
|
||||
extern struct context_stack *get_current_context_stack ();
|
||||
|
||||
/* Return the context stack depth. */
|
||||
|
||||
extern int get_context_stack_depth ();
|
||||
|
||||
/* Return the current subfile. */
|
||||
|
||||
extern struct subfile *get_current_subfile ();
|
||||
|
||||
/* Return the local symbol list. */
|
||||
|
||||
extern struct pending **get_local_symbols ();
|
||||
|
||||
/* Return the file symbol list. */
|
||||
|
||||
extern struct pending **get_file_symbols ();
|
||||
|
||||
/* Return the global symbol list. */
|
||||
|
||||
extern struct pending **get_global_symbols ();
|
||||
|
||||
#endif /* defined (BUILDSYM_H) */
|
||||
|
|
|
@ -30,7 +30,7 @@
|
|||
#include "coff/internal.h" /* Internal format of COFF symbols in BFD */
|
||||
#include "libcoff.h" /* FIXME secret internal data from BFD */
|
||||
#include "objfiles.h"
|
||||
#include "buildsym.h"
|
||||
#include "buildsym-legacy.h"
|
||||
#include "gdb-stabs.h"
|
||||
#include "stabsread.h"
|
||||
#include "complaints.h"
|
||||
|
|
|
@ -29,7 +29,7 @@
|
|||
#include "dictionary.h"
|
||||
#include "command.h"
|
||||
#include "frame.h"
|
||||
#include "buildsym.h"
|
||||
#include "buildsym-legacy.h"
|
||||
#include "language.h"
|
||||
#include "namespace.h"
|
||||
#include <string>
|
||||
|
|
|
@ -45,7 +45,7 @@
|
|||
#include "libaout.h" /* FIXME Secret internal BFD stuff for a.out */
|
||||
#include "filenames.h"
|
||||
#include "objfiles.h"
|
||||
#include "buildsym.h"
|
||||
#include "buildsym-legacy.h"
|
||||
#include "stabsread.h"
|
||||
#include "gdb-stabs.h"
|
||||
#include "demangle.h"
|
||||
|
|
|
@ -37,7 +37,7 @@
|
|||
#include "gdbtypes.h"
|
||||
#include "objfiles.h"
|
||||
#include "dwarf2.h"
|
||||
#include "buildsym.h"
|
||||
#include "buildsym-legacy.h"
|
||||
#include "demangle.h"
|
||||
#include "gdb-demangle.h"
|
||||
#include "expression.h"
|
||||
|
|
|
@ -94,7 +94,7 @@
|
|||
#include "command.h"
|
||||
#include "gdbcmd.h"
|
||||
#include "floatformat.h"
|
||||
#include "buildsym.h"
|
||||
#include "buildsym-legacy.h"
|
||||
#include "i387-tdep.h"
|
||||
#include "i386-tdep.h"
|
||||
#include "nat/x86-cpuid.h"
|
||||
|
|
|
@ -46,7 +46,7 @@
|
|||
#include "filenames.h"
|
||||
#include "objfiles.h"
|
||||
#include "gdb_obstack.h"
|
||||
#include "buildsym.h"
|
||||
#include "buildsym-legacy.h"
|
||||
#include "stabsread.h"
|
||||
#include "complaints.h"
|
||||
#include "demangle.h"
|
||||
|
|
|
@ -36,7 +36,7 @@
|
|||
#include "libaout.h"
|
||||
#include "aout/aout64.h"
|
||||
#include "gdb-stabs.h"
|
||||
#include "buildsym.h"
|
||||
#include "buildsym-legacy.h"
|
||||
#include "complaints.h"
|
||||
#include "demangle.h"
|
||||
#include "gdb-demangle.h"
|
||||
|
|
|
@ -44,7 +44,7 @@
|
|||
#endif
|
||||
#include <algorithm>
|
||||
|
||||
#include "buildsym.h"
|
||||
#include "buildsym-legacy.h"
|
||||
#include "filenames.h"
|
||||
#include "symfile.h"
|
||||
#include "objfiles.h"
|
||||
|
|
|
@ -41,7 +41,7 @@
|
|||
/* FIXME: ezannoni/2004-02-13 Verify if the include below is really needed. */
|
||||
#include "symfile.h"
|
||||
#include "objfiles.h"
|
||||
#include "buildsym.h"
|
||||
#include "buildsym-legacy.h"
|
||||
#include "stabsread.h"
|
||||
#include "expression.h"
|
||||
#include "complaints.h"
|
||||
|
|
Loading…
Reference in New Issue