Defer minimal symbol name-setting
authorTom Tromey <tom@tromey.com>
Sat, 2 Mar 2019 20:19:44 +0000 (13:19 -0700)
committerTom Tromey <tom@tromey.com>
Tue, 26 Nov 2019 21:02:57 +0000 (14:02 -0700)
Currently the demangled name of a minimal symbol is set when creating
the symbol.  However, there is no intrinsic need to do this.  This
patch instead arranges for the demangling to be done just before the
minsym hash tables are filled.  This will be useful in a later patch.

gdb/ChangeLog
2019-11-26  Tom Tromey  <tom@tromey.com>

* symtab.h (struct minimal_symbol) <name_set>: New member.
* minsyms.c (minimal_symbol_reader::record_full): Copy name.
Don't call symbol_set_names.
(minimal_symbol_reader::install): Call symbol_set_names.

Change-Id: I4fe3993b99fb3a43968067806e294d48e377fd76

gdb/ChangeLog
gdb/minsyms.c
gdb/symtab.h

index b061e887f5716dda586e6cd19c10a49a56126f7c..dc684be39825be5c72efea4335e56e9c84abdf79 100644 (file)
@@ -1,3 +1,10 @@
+2019-11-26  Tom Tromey  <tom@tromey.com>
+
+       * symtab.h (struct minimal_symbol) <name_set>: New member.
+       * minsyms.c (minimal_symbol_reader::record_full): Copy name.
+       Don't call symbol_set_names.
+       (minimal_symbol_reader::install): Call symbol_set_names.
+
 2019-11-26  Philippe Waroquiers  <philippe.waroquiers@skynet.be>
 
        * python/python.c (gdbpy_enter::~gdbpy_enter): Release GIL after
index a9ba66bef0ae48e9beba5b8609e8ed3ad267ca10..6e7021a6809ed8710ce5a4417654d15313a910ab 100644 (file)
@@ -1127,7 +1127,12 @@ minimal_symbol_reader::record_full (gdb::string_view name,
   msymbol = &m_msym_bunch->contents[m_msym_bunch_index];
   symbol_set_language (msymbol, language_auto,
                       &m_objfile->per_bfd->storage_obstack);
-  symbol_set_names (msymbol, name, copy_name, m_objfile->per_bfd);
+
+  if (copy_name)
+    msymbol->name = obstack_strndup (&m_objfile->per_bfd->storage_obstack,
+                                    name.data (), name.size ());
+  else
+    msymbol->name = name.data ();
 
   SET_MSYMBOL_VALUE_ADDRESS (msymbol, address);
   MSYMBOL_SECTION (msymbol) = section;
@@ -1354,6 +1359,17 @@ minimal_symbol_reader::install ()
       m_objfile->per_bfd->minimal_symbol_count = mcount;
       m_objfile->per_bfd->msymbols = std::move (msym_holder);
 
+      msymbols = m_objfile->per_bfd->msymbols.get ();
+      for (int i = 0; i < mcount; ++i)
+       {
+         if (!msymbols[i].name_set)
+           {
+             symbol_set_names (&msymbols[i], msymbols[i].name,
+                               false, m_objfile->per_bfd);
+             msymbols[i].name_set = 1;
+           }
+       }
+
       build_minimal_symbol_hash_tables (m_objfile);
     }
 }
index 897ffda76e2ceb7066cb7afefd142485d7a331a4..bcbc9c825e6f6e10a5c41acf9705a5428b64846f 100644 (file)
@@ -668,6 +668,10 @@ struct minimal_symbol : public general_symbol_info
 
   unsigned maybe_copied : 1;
 
+  /* Non-zero if this symbol ever had its demangled name set (even if
+     it was set to NULL).  */
+  unsigned int name_set : 1;
+
   /* Minimal symbols with the same hash key are kept on a linked
      list.  This is the link.  */
 
This page took 0.032408 seconds and 4 git commands to generate.