gdb: remove symtab::dirname
I think the symtab::dirname method is bogus, or at least very misleading. It makes you think that it returns the directory that was used to find that symtab's file during compilation (i.e. the directory the file refers to in the DWARF line header file table), or the directory part of the symtab's filename maybe. In fact, it returns the compilation unit's directory, which is the CWD of the compiler, at compilation time. At least for DWARF, if the symtab's filename is relative, it will be relative to that directory. But if the symtab's filename is absolute, then the directory returned by symtab::dirname has nothing to do with the symtab's filename. Remove symtab::dirname to avoid this confusion, change all users to fetch the same information through the compunit. At least, it will be clear that this is a compunit property, not a symtab property. Change-Id: I2894c3bf3789d7359a676db3c58be2c10763f5f0
This commit is contained in:
parent
d3fc98f911
commit
e473032828
@ -2050,8 +2050,8 @@ ambiguous_line_spec (gdb::array_view<const symtab_and_line> sals,
|
||||
static int
|
||||
cmp_symtabs (const symtab_and_line &sala, const symtab_and_line &salb)
|
||||
{
|
||||
const char *dira = sala.symtab->dirname ();
|
||||
const char *dirb = salb.symtab->dirname ();
|
||||
const char *dira = sala.symtab->compunit ()->dirname ();
|
||||
const char *dirb = salb.symtab->compunit ()->dirname ();
|
||||
int r;
|
||||
|
||||
if (dira == NULL)
|
||||
|
15
gdb/source.c
15
gdb/source.c
@ -713,8 +713,8 @@ info_source_command (const char *ignore, int from_tty)
|
||||
|
||||
cust = s->compunit ();
|
||||
gdb_printf (_("Current source file is %s\n"), s->filename);
|
||||
if (s->dirname () != NULL)
|
||||
gdb_printf (_("Compilation directory is %s\n"), s->dirname ());
|
||||
if (s->compunit ()->dirname () != NULL)
|
||||
gdb_printf (_("Compilation directory is %s\n"), s->compunit ()->dirname ());
|
||||
if (s->fullname)
|
||||
gdb_printf (_("Located in %s\n"), s->fullname);
|
||||
const std::vector<off_t> *offsets;
|
||||
@ -1180,7 +1180,7 @@ open_source_file (struct symtab *s)
|
||||
|
||||
gdb::unique_xmalloc_ptr<char> fullname (s->fullname);
|
||||
s->fullname = NULL;
|
||||
scoped_fd fd = find_and_open_source (s->filename, s->dirname (),
|
||||
scoped_fd fd = find_and_open_source (s->filename, s->compunit ()->dirname (),
|
||||
&fullname);
|
||||
|
||||
if (fd.get () < 0)
|
||||
@ -1192,9 +1192,9 @@ open_source_file (struct symtab *s)
|
||||
std::string srcpath;
|
||||
if (IS_ABSOLUTE_PATH (s->filename))
|
||||
srcpath = s->filename;
|
||||
else if (s->dirname () != nullptr)
|
||||
else if (s->compunit ()->dirname () != nullptr)
|
||||
{
|
||||
srcpath = s->dirname ();
|
||||
srcpath = s->compunit ()->dirname ();
|
||||
srcpath += SLASH_STRING;
|
||||
srcpath += s->filename;
|
||||
}
|
||||
@ -1268,10 +1268,11 @@ symtab_to_fullname (struct symtab *s)
|
||||
/* rewrite_source_path would be applied by find_and_open_source, we
|
||||
should report the pathname where GDB tried to find the file. */
|
||||
|
||||
if (s->dirname () == NULL || IS_ABSOLUTE_PATH (s->filename))
|
||||
if (s->compunit ()->dirname () == nullptr
|
||||
|| IS_ABSOLUTE_PATH (s->filename))
|
||||
fullname.reset (xstrdup (s->filename));
|
||||
else
|
||||
fullname.reset (concat (s->dirname (), SLASH_STRING,
|
||||
fullname.reset (concat (s->compunit ()->dirname (), SLASH_STRING,
|
||||
s->filename, (char *) NULL));
|
||||
|
||||
s->fullname = rewrite_source_path (fullname.get ()).release ();
|
||||
|
@ -249,9 +249,9 @@ dump_symtab_1 (struct symtab *symtab, struct ui_file *outfile)
|
||||
symtab_to_filename_for_display (symtab),
|
||||
host_address_to_string (symtab));
|
||||
|
||||
if (symtab->dirname () != NULL)
|
||||
if (symtab->compunit ()->dirname () != NULL)
|
||||
gdb_printf (outfile, "Compilation directory is %s\n",
|
||||
symtab->dirname ());
|
||||
symtab->compunit ()->dirname ());
|
||||
gdb_printf (outfile, "Read from object file %s (%s)\n",
|
||||
objfile_name (objfile),
|
||||
host_address_to_string (objfile));
|
||||
|
@ -1482,8 +1482,6 @@ struct symtab
|
||||
|
||||
program_space *pspace () const;
|
||||
|
||||
const char *dirname () const;
|
||||
|
||||
/* Unordered chain of all filetabs in the compunit, with the exception
|
||||
that the "main" source file is the first entry in the list. */
|
||||
|
||||
@ -1769,12 +1767,6 @@ symtab::objfile () const
|
||||
return this->compunit ()->objfile ();
|
||||
}
|
||||
|
||||
inline const char *
|
||||
symtab::dirname () const
|
||||
{
|
||||
return this->compunit ()->dirname ();
|
||||
}
|
||||
|
||||
/* Return the language of CUST. */
|
||||
|
||||
extern enum language compunit_language (const struct compunit_symtab *cust);
|
||||
|
Loading…
x
Reference in New Issue
Block a user