public inbox for gdb-patches@sourceware.org
 help / color / mirror / Atom feed
From: Simon Marchi <simon.marchi@polymtl.ca>
To: gdb-patches@sourceware.org
Cc: Simon Marchi <simon.marchi@efficios.com>
Subject: [PATCH 1/4] gdb: remove symtab::dirname
Date: Wed,  6 Apr 2022 10:42:02 -0400	[thread overview]
Message-ID: <20220406144205.1415376-2-simon.marchi@polymtl.ca> (raw)
In-Reply-To: <20220406144205.1415376-1-simon.marchi@polymtl.ca>

From: Simon Marchi <simon.marchi@efficios.com>

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
---
 gdb/cli/cli-cmds.c |  4 ++--
 gdb/source.c       | 15 ++++++++-------
 gdb/symmisc.c      |  4 ++--
 gdb/symtab.h       |  8 --------
 4 files changed, 12 insertions(+), 19 deletions(-)

diff --git a/gdb/cli/cli-cmds.c b/gdb/cli/cli-cmds.c
index 945fd354d52e..31b493e1c500 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 020e94d4ae95..2025c93e93e3 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 e8092e8af08a..5d8d641fa275 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 25b4f7d2704b..567c0fcce7c0 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);
-- 
2.35.1


  reply	other threads:[~2022-04-06 14:42 UTC|newest]

Thread overview: 7+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-04-06 14:42 [PATCH 0/4] Remove some symtab accessors Simon Marchi
2022-04-06 14:42 ` Simon Marchi [this message]
2022-04-06 14:42 ` [PATCH 2/4] gdb: remove symtab::blockvector Simon Marchi
2022-04-06 14:42 ` [PATCH 3/4] gdb: remove symtab::objfile Simon Marchi
2022-04-06 14:42 ` [PATCH 4/4] gdb: remove symtab::pspace Simon Marchi
2022-04-07 14:08 ` [PATCH 0/4] Remove some symtab accessors Tom Tromey
2022-04-07 17:08   ` Simon Marchi

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20220406144205.1415376-2-simon.marchi@polymtl.ca \
    --to=simon.marchi@polymtl.ca \
    --cc=gdb-patches@sourceware.org \
    --cc=simon.marchi@efficios.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).