public inbox for gdb-patches@sourceware.org
 help / color / mirror / Atom feed
From: Tom Tromey <tromey@redhat.com>
To: gdb-patches@sourceware.org
Cc: Tom Tromey <tromey@redhat.com>
Subject: [PATCH v2 3/5] use language of the main symbol
Date: Wed, 07 Aug 2013 19:45:00 -0000	[thread overview]
Message-ID: <1375904695-27787-4-git-send-email-tromey@redhat.com> (raw)
In-Reply-To: <1375904695-27787-1-git-send-email-tromey@redhat.com>

With "dwz -m", "main" appears in both the PU and the importing CU when
running anon-struct.exp.  However, the PU does not have a file name.
So, find_main_filename returns the empty string, making
deduce_language_from_filename return language_unknown.

This patch fixes this problem by changing gdb to use the ordinary
symbol-lookup functions to find "main"'s symbol.  Then, it examines the
symbol's language.

I think this is cleaner than the current approach.  For one thing it
avoids trying to guess the language based on the source file name,
instead deferring to the presumably more reliable debuginfo.

Another possible fix would have been to change how the file name is
found via the "qf" methods.  However, I think the approach given is
preferable for the reason outlined above.

This required a minor test suite change, as now a symtab is expanded
during the search for "main".

Built and regtested (both ways) on x86-64 Fedora 18.

	* symfile.c (set_initial_language): Look up "main" symbol
	and use its language.
	* symtab.c (find_main_filename): Remove.
	* symtab.h (find_main_filename): Remove.

	* gdb.base/maint.exp: Allow zero symtabs to be expanded.
---
 gdb/symfile.c                    |  8 ++++----
 gdb/symtab.c                     | 23 -----------------------
 gdb/symtab.h                     |  2 --
 gdb/testsuite/gdb.base/maint.exp |  7 ++++---
 4 files changed, 8 insertions(+), 32 deletions(-)

diff --git a/gdb/symfile.c b/gdb/symfile.c
index 3328648..3dd5509 100644
--- a/gdb/symfile.c
+++ b/gdb/symfile.c
@@ -1612,11 +1612,11 @@ set_initial_language (void)
     lang = language_of_main;
   else
     {
-      const char *filename;
+      char *name = main_name ();
+      struct symbol *sym = lookup_symbol (name, NULL, VAR_DOMAIN, NULL);
 
-      filename = find_main_filename ();
-      if (filename != NULL)
-	lang = deduce_language_from_filename (filename);
+      if (sym != NULL)
+	lang = SYMBOL_LANGUAGE (sym);
     }
 
   if (lang == language_unknown)
diff --git a/gdb/symtab.c b/gdb/symtab.c
index 8076fe5..3bcec23 100644
--- a/gdb/symtab.c
+++ b/gdb/symtab.c
@@ -1949,29 +1949,6 @@ basic_lookup_transparent_type (const char *name)
   return (struct type *) 0;
 }
 
-/* Find the name of the file containing main().  */
-/* FIXME:  What about languages without main() or specially linked
-   executables that have no main() ?   */
-
-const char *
-find_main_filename (void)
-{
-  struct objfile *objfile;
-  char *name = main_name ();
-
-  ALL_OBJFILES (objfile)
-  {
-    const char *result;
-
-    if (!objfile->sf)
-      continue;
-    result = objfile->sf->qf->find_symbol_file (objfile, name);
-    if (result)
-      return result;
-  }
-  return (NULL);
-}
-
 /* Search BLOCK for symbol NAME in DOMAIN.
 
    Note that if NAME is the demangled form of a C++ symbol, we will fail
diff --git a/gdb/symtab.h b/gdb/symtab.h
index 6d81507..ccf4a4f 100644
--- a/gdb/symtab.h
+++ b/gdb/symtab.h
@@ -1252,8 +1252,6 @@ extern VEC (char_ptr) *make_source_files_completion_list (const char *,
 
 int matching_obj_sections (struct obj_section *, struct obj_section *);
 
-extern const char *find_main_filename (void);
-
 extern struct symtab *find_line_symtab (struct symtab *, int, int *, int *);
 
 extern struct symtab_and_line find_function_start_sal (struct symbol *sym,
diff --git a/gdb/testsuite/gdb.base/maint.exp b/gdb/testsuite/gdb.base/maint.exp
index 7057ac7..3093aae 100644
--- a/gdb/testsuite/gdb.base/maint.exp
+++ b/gdb/testsuite/gdb.base/maint.exp
@@ -72,9 +72,10 @@ gdb_test "maint print registers" "Name.*Nr.*Rel.*Offset.*Size.*Type.*"
 gdb_test_no_output "mt set per on" "mt set per on for expand-symtabs"
 gdb_test_multiple "mt expand-symtabs $subdir/break\[.\]c$" \
     "mt expand-symtabs" {
-	-re "#primary symtabs: (1|2) \\(\[+\](1|2)\\),.*$gdb_prompt $" {
-	    # This should expand one or at most two primary symtabs.
-	    # "Normally" it will expand just the one for break.c, but if the
+	-re "#primary symtabs: (1|2) \\(\[+\](0|1|2)\\),.*$gdb_prompt $" {
+	    # This should expand at most two primary symtabs.
+	    # "Normally" it will not expand any, because the symtab
+	    # holding "main" will already have been expanded, but if the
 	    # file is compiled with -fdebug-types-section then a second primary
 	    # symtab for break.c will be created for any types.
 	    pass "mt expand-symtabs"
-- 
1.8.1.4

  parent reply	other threads:[~2013-08-07 19:45 UTC|newest]

Thread overview: 9+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-08-07 19:45 [PATCH v2 0/5] fix some "dwz -m" regressions Tom Tromey
2013-08-07 19:45 ` [PATCH v2 1/5] also filter label symbols Tom Tromey
2013-08-07 19:45 ` [PATCH v2 2/5] fix recursively_compute_inclusions and add dwz test case Tom Tromey
2013-08-08 14:40   ` dwz.exp testsuite error on 32-bit targets [Re: [PATCH v2 2/5] fix recursively_compute_inclusions and add dwz test case] Jan Kratochvil
2013-08-21 15:34     ` Tom Tromey
2013-08-07 19:45 ` [PATCH v2 4/5] remove unused qf method Tom Tromey
2013-08-07 19:45 ` Tom Tromey [this message]
2013-08-08 15:22   ` Regression for gdb.objc/basicclass.exp [Re: [PATCH v2 3/5] use language of the main symbol] Jan Kratochvil
2013-08-07 19:45 ` [PATCH v2 5/5] fix PR symtab/15028 Tom Tromey

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=1375904695-27787-4-git-send-email-tromey@redhat.com \
    --to=tromey@redhat.com \
    --cc=gdb-patches@sourceware.org \
    /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).