aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSimon Marchi <simon.marchi@efficios.com>2022-04-06 10:42:02 -0400
committerSimon Marchi <simon.marchi@polymtl.ca>2022-04-07 13:04:48 -0400
commite4730328287f755eb313c3762d83d389462cde15 (patch)
treed04a2374c079bfb72b3baf745cb15a802137fed4
parentd3fc98f9117f81fb6473bc2419fbf575e81a9505 (diff)
downloadgdb-e4730328287f755eb313c3762d83d389462cde15.zip
gdb-e4730328287f755eb313c3762d83d389462cde15.tar.gz
gdb-e4730328287f755eb313c3762d83d389462cde15.tar.bz2
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
-rw-r--r--gdb/cli/cli-cmds.c4
-rw-r--r--gdb/source.c15
-rw-r--r--gdb/symmisc.c4
-rw-r--r--gdb/symtab.h8
4 files changed, 12 insertions, 19 deletions
diff --git a/gdb/cli/cli-cmds.c b/gdb/cli/cli-cmds.c
index 945fd35..31b493e 100644
--- a/gdb/cli/cli-cmds.c
+++ b/gdb/cli/cli-cmds.c
@@ -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)
diff --git a/gdb/source.c b/gdb/source.c
index 020e94d..2025c93 100644
--- a/gdb/source.c
+++ b/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 ();
diff --git a/gdb/symmisc.c b/gdb/symmisc.c
index e8092e8..5d8d641 100644
--- a/gdb/symmisc.c
+++ b/gdb/symmisc.c
@@ -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));
diff --git a/gdb/symtab.h b/gdb/symtab.h
index 25b4f7d..567c0fc 100644
--- a/gdb/symtab.h
+++ b/gdb/symtab.h
@@ -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);