if (!b.symbol->is_objfile_owned ())
return true;
- const char *fna = a.symbol->symtab ()->filename;
- const char *fnb = b.symbol->symtab ()->filename;
+ const char *fna = a.symbol->symtab ()->filename ();
+ const char *fnb = b.symbol->symtab ()->filename ();
/* First sort by basename. This is done because,
depending on how GNAT was invoked, different sources
for (i = 0; known_runtime_file_name_patterns[i] != NULL; i += 1)
{
re_comp (known_runtime_file_name_patterns[i]);
- if (re_exec (lbasename (sal.symtab->filename)))
+ if (re_exec (lbasename (sal.symtab->filename ())))
return 1;
if (sal.symtab->compunit ()->objfile () != NULL
&& re_exec (objfile_name (sal.symtab->compunit ()->objfile ())))
return r;
}
- r = filename_cmp (sala.symtab->filename, salb.symtab->filename);
+ r = filename_cmp (sala.symtab->filename (), salb.symtab->filename ());
if (r)
return r;
int is_local)
{
gcc_type sym_type;
- const char *filename = sym.symbol->symtab ()->filename;
+ const char *filename = sym.symbol->symtab ()->filename ();
unsigned int line = sym.symbol->line ();
context->error_symbol_once (sym.symbol);
{
/* Squash compiler warning. */
gcc_type sym_type = 0;
- const char *filename = sym.symbol->symtab ()->filename;
+ const char *filename = sym.symbol->symtab ()->filename ();
unsigned int line = sym.symbol->line ();
instance->error_symbol_once (sym.symbol);
we can do but ignore this member. */
continue;
}
- const char *filename = sym.symbol->symtab ()->filename;
+ const char *filename = sym.symbol->symtab ()->filename ();
unsigned int line = sym.symbol->line ();
physaddr = sym.symbol->value_address ();
continue;
}
- const char *filename = sym.symbol->symtab ()->filename;
+ const char *filename = sym.symbol->symtab ()->filename ();
unsigned int line = sym.symbol->line ();
CORE_ADDR address = sym.symbol->value_block()->start ();
const char *kind;
infrun_debug_printf
("symtab = %s, line = %d, step_frame_id = %s, step_stack_frame_id = %s",
- tp->current_symtab != nullptr ? tp->current_symtab->filename : "<null>",
+ tp->current_symtab != nullptr ? tp->current_symtab->filename () : "<null>",
tp->current_line,
tp->control.step_frame_id.to_string ().c_str (),
tp->control.step_stack_frame_id.to_string ().c_str ());
set_default_source_symtab_and_line ();
initialize_defaults (&self->default_symtab, &self->default_line);
ls->file_symtabs
- = collect_symtabs_from_filename (self->default_symtab->filename,
+ = collect_symtabs_from_filename (self->default_symtab->filename (),
self->search_pspace);
use_default = true;
}
/* Make sure we have a filename for canonicalization. */
if (ls->explicit_loc.source_filename == NULL)
{
- const char *filename = state->default_symtab->filename;
+ const char *filename = state->default_symtab->filename ();
/* It may be more appropriate to keep DEFAULT_SYMTAB in its symtab
form so that displaying SOURCE_FILENAME can follow the current
macro_scope ms;
main_file = macro_main (cust->macro_table ());
- inclusion = macro_lookup_inclusion (main_file, sal.symtab->filename_for_id);
+ inclusion = macro_lookup_inclusion (main_file,
+ sal.symtab->filename_for_id ());
if (inclusion)
{
{
}
- return host_string_to_python_string (bploc_symtab->filename);
+ return host_string_to_python_string (bploc_symtab->filename ());
}
/* Python function to get the source file name path and line number
paddress (self->bp_loc->owner->gdbarch,
self->bp_loc->requested_address));
if (self->bp_loc->symtab != nullptr)
- str += string_printf (" source=%s:%d", self->bp_loc->symtab->filename,
+ str += string_printf (" source=%s:%d", self->bp_loc->symtab->filename (),
self->bp_loc->line_number);
const auto fn_name = self->bp_loc->function_name.get ();
if (debug_skip)
gdb_printf (gdb_stdlog,
"skip: checking if file %s matches non-glob %s...",
- function_sal.symtab->filename, m_file.c_str ());
+ function_sal.symtab->filename (), m_file.c_str ());
bool result;
/* Check first sole SYMTAB->FILENAME. It may not be a substring of
symtab_to_fullname as it may contain "./" etc. */
- if (compare_filenames_for_search (function_sal.symtab->filename,
+ if (compare_filenames_for_search (function_sal.symtab->filename (),
m_file.c_str ()))
result = true;
/* Before we invoke realpath, which can get expensive when many
files are involved, do a quick comparison of the basenames. */
else if (!basenames_may_differ
- && filename_cmp (lbasename (function_sal.symtab->filename),
+ && filename_cmp (lbasename (function_sal.symtab->filename ()),
lbasename (m_file.c_str ())) != 0)
result = false;
else
if (debug_skip)
gdb_printf (gdb_stdlog,
"skip: checking if file %s matches glob %s...",
- function_sal.symtab->filename, m_file.c_str ());
+ function_sal.symtab->filename (), m_file.c_str ());
bool result;
/* Check first sole SYMTAB->FILENAME. It may not be a substring of
symtab_to_fullname as it may contain "./" etc. */
- if (gdb_filename_fnmatch (m_file.c_str (), function_sal.symtab->filename,
+ if (gdb_filename_fnmatch (m_file.c_str (), function_sal.symtab->filename (),
FNM_NOESCAPE) == 0)
result = true;
isn't much of a win. Oh well. */
else if (!basenames_may_differ
&& gdb_filename_fnmatch (lbasename (m_file.c_str ()),
- lbasename (function_sal.symtab->filename),
+ lbasename (function_sal.symtab->filename ()),
FNM_NOESCAPE) != 0)
result = false;
else
{
for (symtab *symtab : cu.filetabs ())
{
- const char *name = symtab->filename;
+ const char *name = symtab->filename ();
int len = strlen (name);
if (!(len > 2 && (strcmp (&name[len - 2], ".h") == 0
}
cust = s->compunit ();
- gdb_printf (_("Current source file is %s\n"), s->filename);
+ gdb_printf (_("Current source file is %s\n"), s->filename ());
if (s->compunit ()->dirname () != NULL)
gdb_printf (_("Compilation directory is %s\n"), s->compunit ()->dirname ());
if (s->fullname () != nullptr)
return scoped_fd (-EINVAL);
gdb::unique_xmalloc_ptr<char> fullname = s->release_fullname ();
- scoped_fd fd = find_and_open_source (s->filename, s->compunit ()->dirname (),
+ scoped_fd fd = find_and_open_source (s->filename (),
+ s->compunit ()->dirname (),
&fullname);
if (fd.get () < 0)
const objfile *ofp = s->compunit ()->objfile ();
std::string srcpath;
- if (IS_ABSOLUTE_PATH (s->filename))
- srcpath = s->filename;
+ if (IS_ABSOLUTE_PATH (s->filename ()))
+ srcpath = s->filename ();
else if (s->compunit ()->dirname () != nullptr)
{
srcpath = s->compunit ()->dirname ();
srcpath += SLASH_STRING;
- srcpath += s->filename;
+ srcpath += s->filename ();
}
const struct bfd_build_id *build_id
should report the pathname where GDB tried to find the file. */
if (s->compunit ()->dirname () == nullptr
- || IS_ABSOLUTE_PATH (s->filename))
- fullname.reset (xstrdup (s->filename));
+ || IS_ABSOLUTE_PATH (s->filename ()))
+ fullname.reset (xstrdup (s->filename ()));
else
fullname.reset (concat (s->compunit ()->dirname (), SLASH_STRING,
- s->filename, (char *) NULL));
+ s->filename (), (char *) NULL));
s->set_fullname (rewrite_source_path (fullname.get ()));
if (s->fullname () == nullptr)
symtab_to_filename_for_display (struct symtab *symtab)
{
if (filename_display_string == filename_display_basename)
- return lbasename (symtab->filename);
+ return lbasename (symtab->filename ());
else if (filename_display_string == filename_display_absolute)
return symtab_to_fullname (symtab);
else if (filename_display_string == filename_display_relative)
- return symtab->filename;
+ return symtab->filename ();
else
internal_error (_("invalid filename_display_string"));
}
for (symtab *s : cust->filetabs ())
{
- if (compare_filenames_for_search (s->filename, name))
+ if (compare_filenames_for_search (s->filename (), name))
{
if (callback (s))
return true;
/* Before we invoke realpath, which can get expensive when many
files are involved, do a quick comparison of the basenames. */
if (! basenames_may_differ
- && FILENAME_CMP (base_name, lbasename (s->filename)) != 0)
+ && FILENAME_CMP (base_name, lbasename (s->filename ())) != 0)
continue;
if (compare_filenames_for_search (symtab_to_fullname (s), name))
{
struct objfile *objfile = cust->objfile ();
struct symtab *symtab
- = OBSTACK_ZALLOC (&objfile->objfile_obstack, struct symtab);
-
- symtab->filename = objfile->intern (filename);
- symtab->filename_for_id = objfile->intern (filename_for_id);
- symtab->set_language (deduce_language_from_filename (filename));
+ = obstack_new<struct symtab> (&objfile->objfile_obstack,
+ cust,
+ objfile->intern (filename),
+ objfile->intern (filename_for_id),
+ deduce_language_from_filename (filename));
/* This can be very verbose with lots of headers.
Only print at higher debug levels. */
/* Add it to CUST's list of symtabs. */
cust->add_filetab (symtab);
- /* Backlink to the containing compunit symtab. */
- symtab->set_compunit (cust);
-
return symtab;
}
const struct linetable *l;
int ind;
- if (FILENAME_CMP (sym_tab->filename, s->filename) != 0)
+ if (FILENAME_CMP (sym_tab->filename (), s->filename ()) != 0)
continue;
if (FILENAME_CMP (symtab_to_fullname (sym_tab),
symtab_to_fullname (s)) != 0)
{
int c;
- c = FILENAME_CMP (sym_a.symbol->symtab ()->filename,
- sym_b.symbol->symtab ()->filename);
+ c = FILENAME_CMP (sym_a.symbol->symtab ()->filename (),
+ sym_b.symbol->symtab ()->filename ());
if (c != 0)
return c;
/* Check first sole REAL_SYMTAB->FILENAME. It does
not need to be a substring of symtab_to_fullname as
it may contain "./" etc. */
- if (!(file_matches (real_symtab->filename, m_filenames, false)
+ if (!(file_matches (real_symtab->filename (), m_filenames, false)
|| ((basenames_may_differ
- || file_matches (lbasename (real_symtab->filename),
+ || file_matches (lbasename (real_symtab->filename ()),
m_filenames, true))
&& file_matches (symtab_to_fullname (real_symtab),
m_filenames, false))))
{
for (symtab *s : cu.filetabs ())
{
- if (not_interesting_fname (s->filename))
+ if (not_interesting_fname (s->filename ()))
continue;
- if (!filenames_seen.seen (s->filename)
- && filename_ncmp (s->filename, text, text_len) == 0)
+ if (!filenames_seen.seen (s->filename ())
+ && filename_ncmp (s->filename (), text, text_len) == 0)
{
/* This file matches for a completion; add it to the current
list of matches. */
- add_filename_to_list (s->filename, text, text, &list);
+ add_filename_to_list (s->filename (), text, text, &list);
}
else
{
debug info records leading directories, but not the other
way around. This is what subroutines of breakpoint
command do when they parse file names. */
- base_name = lbasename (s->filename);
- if (base_name != s->filename
+ base_name = lbasename (s->filename ());
+ if (base_name != s->filename ()
&& !filenames_seen.seen (base_name)
&& filename_ncmp (base_name, text, text_len) == 0)
add_filename_to_list (base_name, text, text, &list);
struct symtab
{
- struct compunit_symtab *compunit () const
+ symtab (struct compunit_symtab *cust, const char *filename,
+ const char *filename_for_id, enum language language)
+ : m_filename (filename),
+ m_filename_for_id (filename_for_id),
+ m_compunit (cust),
+ m_language (language)
{
- return m_compunit;
+ gdb_assert (m_filename != nullptr);
+ gdb_assert (m_filename_for_id != nullptr);
+ gdb_assert (m_compunit != nullptr);
}
- void set_compunit (struct compunit_symtab *compunit)
+ struct compunit_symtab *compunit () const
{
- m_compunit = compunit;
+ return m_compunit;
}
const struct linetable *linetable () const
m_fullname = name.release ();
}
+ const char *filename () const
+ { return m_filename; }
+
+ const char *filename_for_id () const
+ { return m_filename_for_id; }
+
/* Unordered chain of all filetabs in the compunit, with the exception
that the "main" source file is the first entry in the list. */
- struct symtab *next;
+ struct symtab *next = nullptr;
+
+private:
/* Name of this source file, in a form appropriate to print to the user.
- This pointer is never nullptr. */
+ This pointer is never nullptr and is set from the constructor. */
- const char *filename;
+ const char *m_filename;
/* Filename for this source file, used as an identifier to link with
related objects such as associated macro_source_file objects. It must
follow that rule, or another form of the same file name, this is up to
the specific debug info reader.
- This pointer is never nullptr.*/
- const char *filename_for_id;
+ This pointer is never nullptr, and is set from the constructor. */
+ const char *m_filename_for_id;
-private:
+ /* Backlink to containing compunit symtab.
- /* Backlink to containing compunit symtab. */
+ This pointer is never nullptr, and is set from the constructor. */
struct compunit_symtab *m_compunit;
/* Table mapping core addresses to line numbers for this file.
Can be NULL if none. Never shared between different symtabs. */
- const struct linetable *m_linetable;
+ const struct linetable *m_linetable = nullptr;
- /* Language of this source file. */
+ /* Language of this source file. This is set in the object
+ constructor. */
enum language m_language;
/* Full name of file as found by searching the source path.
NULL if not yet known. */
- char *m_fullname;
+ char *m_fullname = nullptr;
};
/* A range adapter to allowing iterating over all the file tables in a list. */