]> git.ipfire.org Git - thirdparty/binutils-gdb.git/commitdiff
use language of the main symbol
authorTom Tromey <tromey@redhat.com>
Wed, 7 Aug 2013 20:03:52 +0000 (20:03 +0000)
committerTom Tromey <tromey@redhat.com>
Wed, 7 Aug 2013 20:03:52 +0000 (20:03 +0000)
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/ChangeLog
gdb/symfile.c
gdb/symtab.c
gdb/symtab.h
gdb/testsuite/ChangeLog
gdb/testsuite/gdb.base/maint.exp

index 10976089917efaa9a0c0f7a036b04ccfe4b499ac..42e60aaed064fc4585209ec6b0bce2f6536cfb20 100644 (file)
@@ -1,3 +1,10 @@
+2013-08-07  Tom Tromey  <tromey@redhat.com>
+
+       * 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.
+
 2013-08-07  Tom Tromey  <tromey@redhat.com>
 
        * dwarf2read.c (recursively_compute_inclusions): Add
index 332864875550f455104dbd0c25e3fbc69a34b61b..3dd550927f72e002e7980a619117f4b1486891c4 100644 (file)
@@ -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)
index 8076fe5bb30e87e107989f630cae576067acf5af..3bcec238eb8a90d9484dd64b89fea9d9cee72b81 100644 (file)
@@ -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
index 6d81507f57f929c909d096fda3c3d5e96520c4de..ccf4a4f30045d3dffc11593a309ff008d2b937c9 100644 (file)
@@ -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,
index 160a27a87c39d66571d3117b6bf71e2d8528467f..fb21761fe7f3238b63e2c77e5b4cefe40d5d487d 100644 (file)
@@ -1,3 +1,7 @@
+2013-08-07  Tom Tromey  <tromey@redhat.com>
+
+       * gdb.base/maint.exp: Allow zero symtabs to be expanded.
+
 2013-08-07  Tom Tromey  <tromey@redhat.com>
 
        * gdb.dwarf2/dwz.exp: New file.
index 7057ac7f567dabc24dd3477b911ba0d997f5355f..3093aae32c752ed66028b2112607e59008c1edde 100644 (file)
@@ -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"