[3/8] hide last_source_file
Tom Tromey
tromey@redhat.com
Fri Jan 11 19:24:00 GMT 2013
This patch makes last_source_file private to buildsym.c and adds a
couple of accessors. This isn't super -- it is still effectively a
global -- but it clears up any lifetime and ownership questions.
Removing it entirely would be a worthy goal, but doing it properly
requires pretty major work on the entire buildsym API.
This in turn lets us constify the argument to start_symtab.
This will let us later do some more constification in dwarf2read.
Tom
* buildsym.c (patch_subfile_names): Use set_last_source_file.
(start_symtab): Make 'name' and 'dirname' const. Use
set_last_source_file.
(restart_symtab, reset_symtab_globals): Use set_last_source_file.
(last_source_file): Define. Now static.
(set_last_source_file, get_last_source_file): New functions.
* buildsym.h (last_source_file): Don't declare.
(start_symtab): Update.
(set_last_source_file, get_last_source_file): Declare.
* coffread.c (complete_symtab): Use set_last_source_file.
(coff_end_symtab): Likewise.
(coff_symtab_read): Use set_last_source_file, get_last_source_file.
* dbxread.c (read_dbx_symtab, read_ofile_symtab): Use
set_last_source_file.
(process_one_symbol): Use get_last_source_file.
* mdebugread.c (parse_partial_symbols): Use set_last_source_file.
(psymtab_to_symtab_1): Use get_last_source_file.
* xcoffread.c (process_linenos): Use get_last_source_file.
(complete_symtab): Use set_last_source_file.
(read_xcoff_symtab): Use set_last_source_file, get_last_source_file.
(scan_xcoff_symtab): Use set_last_source_file.
---
gdb/buildsym.c | 36 +++++++++++++++++++++++++++++++-----
gdb/buildsym.h | 18 +++++++++++-------
gdb/coffread.c | 16 +++++++---------
gdb/dbxread.c | 11 ++++++-----
gdb/mdebugread.c | 4 ++--
gdb/xcoffread.c | 12 ++++++------
6 files changed, 63 insertions(+), 34 deletions(-)
diff --git a/gdb/buildsym.c b/gdb/buildsym.c
index 2c4a946..4d861a5 100644
--- a/gdb/buildsym.c
+++ b/gdb/buildsym.c
@@ -681,7 +681,7 @@ patch_subfile_names (struct subfile *subfile, char *name)
{
subfile->dirname = subfile->name;
subfile->name = xstrdup (name);
- last_source_file = name;
+ set_last_source_file (name);
/* Default the source language to whatever can be deduced from
the filename. If nothing can be deduced (such as for a C/C++
@@ -835,10 +835,10 @@ compare_line_numbers (const void *ln1p, const void *ln2p)
lowest address of objects in the file (or 0 if not known). */
void
-start_symtab (char *name, char *dirname, CORE_ADDR start_addr)
+start_symtab (const char *name, const char *dirname, CORE_ADDR start_addr)
{
restart_symtab (start_addr);
- last_source_file = name;
+ set_last_source_file (name);
start_subfile (name, dirname);
}
@@ -850,7 +850,7 @@ start_symtab (char *name, char *dirname, CORE_ADDR start_addr)
void
restart_symtab (CORE_ADDR start_addr)
{
- last_source_file = NULL;
+ set_last_source_file (NULL);
last_source_start_addr = start_addr;
file_symbols = NULL;
global_symbols = NULL;
@@ -971,7 +971,7 @@ block_compar (const void *ap, const void *bp)
static void
reset_symtab_globals (void)
{
- last_source_file = NULL;
+ set_last_source_file (NULL);
current_subfile = NULL;
pending_macros = NULL;
if (pending_addrmap)
@@ -1500,6 +1500,32 @@ merge_symbol_lists (struct pending **srclist, struct pending **targetlist)
free_pendings = (*srclist);
}
+
+/* Name of source file whose symbol data we are now processing. This
+ comes from a symbol of type N_SO for stabs. For Dwarf it comes
+ from the DW_AT_name attribute of a DW_TAG_compile_unit DIE. */
+
+static char *last_source_file;
+
+/* See buildsym.h. */
+
+void
+set_last_source_file (const char *name)
+{
+ xfree (last_source_file);
+ last_source_file = name == NULL ? NULL : xstrdup (name);
+}
+
+/* See buildsym.h. */
+
+const char *
+get_last_source_file (void)
+{
+ return last_source_file;
+}
+
+
+
/* Initialize anything that needs initializing when starting to read a
fresh piece of a symbol file, e.g. reading in the stuff
corresponding to a psymtab. */
diff --git a/gdb/buildsym.h b/gdb/buildsym.h
index f44fd4b..4bde17a 100644
--- a/gdb/buildsym.h
+++ b/gdb/buildsym.h
@@ -45,12 +45,6 @@ struct pending_block;
#define HASHSIZE 127 /* Size of things hashed via
hashname(). */
-/* Name of source file whose symbol data we are now processing. This
- comes from a symbol of type N_SO for stabs. For Dwarf it comes
- from the DW_AT_name attribute of a DW_TAG_compile_unit DIE. */
-
-EXTERN char *last_source_file;
-
/* Core address of start of text of current source file. This too
comes from the N_SO symbol. For Dwarf it typically comes from the
DW_AT_low_pc attribute of a DW_TAG_compile_unit DIE. */
@@ -269,7 +263,8 @@ extern struct context_stack *pop_context (void);
extern void record_line (struct subfile *subfile, int line, CORE_ADDR pc);
-extern void start_symtab (char *name, char *dirname, CORE_ADDR start_addr);
+extern void start_symtab (const char *name, const char *dirname,
+ CORE_ADDR start_addr);
extern void restart_symtab (CORE_ADDR start_addr);
@@ -292,6 +287,15 @@ extern void record_producer (const char *producer);
extern void merge_symbol_lists (struct pending **srclist,
struct pending **targetlist);
+/* 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);
+
/* The macro table for the compilation unit whose symbols we're
currently reading. All the symtabs for this CU will point to
this. */
diff --git a/gdb/coffread.c b/gdb/coffread.c
index 9e62207..62565a8 100644
--- a/gdb/coffread.c
+++ b/gdb/coffread.c
@@ -396,9 +396,7 @@ coff_start_symtab (const char *name)
static void
complete_symtab (const char *name, CORE_ADDR start_addr, unsigned int size)
{
- if (last_source_file != NULL)
- xfree (last_source_file);
- last_source_file = xstrdup (name);
+ set_last_source_file (name);
current_source_start_addr = start_addr;
current_source_end_addr = start_addr + size;
}
@@ -417,7 +415,7 @@ coff_end_symtab (struct objfile *objfile)
SECT_OFF_TEXT (objfile));
/* Reinitialize for beginning of new file. */
- last_source_file = NULL;
+ set_last_source_file (NULL);
}
static struct minimal_symbol *
@@ -745,7 +743,7 @@ coff_symtab_read (long symtab_offset, unsigned int nsyms,
coffread_objfile = objfile;
nlist_bfd_global = objfile->obfd;
nlist_nsyms_global = nsyms;
- last_source_file = NULL;
+ set_last_source_file (NULL);
memset (opaque_type_chain, 0, sizeof opaque_type_chain);
if (type_vector) /* Get rid of previous one. */
@@ -766,7 +764,7 @@ coff_symtab_read (long symtab_offset, unsigned int nsyms,
if (cs->c_symnum == next_file_symnum && cs->c_sclass != C_FILE)
{
- if (last_source_file)
+ if (get_last_source_file ())
coff_end_symtab (objfile);
coff_start_symtab ("_globals_");
@@ -782,7 +780,7 @@ coff_symtab_read (long symtab_offset, unsigned int nsyms,
/* Special case for file with type declarations only, no
text. */
- if (!last_source_file && SDB_TYPE (cs->c_type)
+ if (!get_last_source_file () && SDB_TYPE (cs->c_type)
&& cs->c_secnum == N_DEBUG)
complete_symtab (filestring, 0, 0);
@@ -831,7 +829,7 @@ coff_symtab_read (long symtab_offset, unsigned int nsyms,
/* Complete symbol table for last object file
containing debugging information. */
- if (last_source_file)
+ if (get_last_source_file ())
{
coff_end_symtab (objfile);
coff_start_symtab (filestring);
@@ -1121,7 +1119,7 @@ coff_symtab_read (long symtab_offset, unsigned int nsyms,
read_pe_exported_syms (objfile);
}
- if (last_source_file)
+ if (get_last_source_file ())
coff_end_symtab (objfile);
/* Patch up any opaque types (references to types that are not defined
diff --git a/gdb/dbxread.c b/gdb/dbxread.c
index ebe4237..f488a03 100644
--- a/gdb/dbxread.c
+++ b/gdb/dbxread.c
@@ -1254,7 +1254,7 @@ read_dbx_symtab (struct objfile *objfile)
init_bincl_list (20, objfile);
back_to = make_cleanup_free_bincl_list (objfile);
- last_source_file = NULL;
+ set_last_source_file (NULL);
lowest_text_address = (CORE_ADDR) -1;
@@ -2546,7 +2546,7 @@ read_ofile_symtab (struct objfile *objfile, struct partial_symtab *pst)
subfile_stack = NULL;
stringtab_global = DBX_STRINGTAB (objfile);
- last_source_file = NULL;
+ set_last_source_file (NULL);
abfd = objfile->obfd;
symfile_bfd = objfile->obfd; /* Implicit param to next_text_symbol. */
@@ -2770,7 +2770,7 @@ process_one_symbol (int type, int desc, CORE_ADDR valu, char *name,
/* Something is wrong if we see real data before seeing a source
file name. */
- if (last_source_file == NULL && type != (unsigned char) N_SO)
+ if (get_last_source_file () == NULL && type != (unsigned char) N_SO)
{
/* Ignore any symbols which appear before an N_SO symbol.
Currently no one puts symbols there, but we should deal
@@ -2946,7 +2946,7 @@ process_one_symbol (int type, int desc, CORE_ADDR valu, char *name,
n_opt_found = 0;
- if (last_source_file)
+ if (get_last_source_file ())
{
/* Check if previous symbol was also an N_SO (with some
sanity checks). If so, that one was actually the
@@ -3179,7 +3179,8 @@ process_one_symbol (int type, int desc, CORE_ADDR valu, char *name,
&& gdbarch_sofun_address_maybe_missing (gdbarch))
{
CORE_ADDR minsym_valu =
- find_stab_function_addr (name, last_source_file, objfile);
+ find_stab_function_addr (name, get_last_source_file (),
+ objfile);
/* The function find_stab_function_addr will return
0 if the minimal symbol wasn't found.
diff --git a/gdb/mdebugread.c b/gdb/mdebugread.c
index 856ca9d..6ac1e69 100644
--- a/gdb/mdebugread.c
+++ b/gdb/mdebugread.c
@@ -2397,7 +2397,7 @@ parse_partial_symbols (struct objfile *objfile)
(struct partial_symtab **) alloca (dependencies_allocated *
sizeof (struct partial_symtab *));
- last_source_file = NULL;
+ set_last_source_file (NULL);
/*
* Big plan:
@@ -4082,7 +4082,7 @@ psymtab_to_symtab_1 (struct objfile *objfile,
would otherwise be ended twice, once in
process_one_symbol, and once after this loop. */
if (type_code == N_SO
- && last_source_file
+ && get_last_source_file ()
&& previous_stab_code != (unsigned char) N_SO
&& *name == '\000')
{
diff --git a/gdb/xcoffread.c b/gdb/xcoffread.c
index 9fe8621..45b86a8 100644
--- a/gdb/xcoffread.c
+++ b/gdb/xcoffread.c
@@ -655,7 +655,7 @@ process_linenos (CORE_ADDR start, CORE_ADDR end)
start, 0, &main_source_baseline);
}
- if (strcmp (inclTable[ii].name, last_source_file) == 0)
+ if (strcmp (inclTable[ii].name, get_last_source_file ()) == 0)
{
/* The entry in the include table refers to the main source
file. Add the lines to the main subfile. */
@@ -894,7 +894,7 @@ enter_line_range (struct subfile *subfile, unsigned beginoffset,
text address for the file, and SIZE is the number of bytes of text. */
#define complete_symtab(name, start_addr) { \
- last_source_file = xstrdup (name); \
+ set_last_source_file (name); \
last_source_start_addr = start_addr; \
}
@@ -1031,7 +1031,7 @@ read_xcoff_symtab (struct objfile *objfile, struct partial_symtab *pst)
handling. */
local_symesz = coff_data (abfd)->local_symesz;
- last_source_file = NULL;
+ set_last_source_file (NULL);
last_csect_name = 0;
start_stabs ();
@@ -1119,7 +1119,7 @@ read_xcoff_symtab (struct objfile *objfile, struct partial_symtab *pst)
if (cs->c_symnum == next_file_symnum && cs->c_sclass != C_FILE)
{
- if (last_source_file)
+ if (get_last_source_file ())
{
pst->symtab = end_symtab (cur_src_end_addr, objfile,
SECT_OFF_TEXT (objfile));
@@ -1488,7 +1488,7 @@ read_xcoff_symtab (struct objfile *objfile, struct partial_symtab *pst)
}
}
- if (last_source_file)
+ if (get_last_source_file ())
{
struct symtab *s;
@@ -2228,7 +2228,7 @@ scan_xcoff_symtab (struct objfile *objfile)
(struct partial_symtab **) alloca (dependencies_allocated *
sizeof (struct partial_symtab *));
- last_source_file = NULL;
+ set_last_source_file (NULL);
abfd = objfile->obfd;
next_symbol_text_func = xcoff_next_symbol_text;
--
1.7.7.6
More information about the Gdb-patches
mailing list