[pushed] Turn off threaded minsym demangling by default
Commit Message
Sourceware to Gerrit sync has submitted this change.
Change URL: https://gnutoolchain-gerrit.osci.io/r/c/binutils-gdb/+/687
......................................................................
Turn off threaded minsym demangling by default
Per discussion on gdb-patches with Joel, this patch turns off multihreaded
symbol loading by default. It can be turned on using:
maint set worker-threads unlimited
To keep the behavior as close as possible to the old code, it still
calls symbol_set_names in the old place if n_worker_threads is 0.
gdb/ChangeLog:
2019-11-27 Christian Biesinger <cbiesinger@google.com>
* maint.c (n_worker_threads): Default to 0.
(worker_threads_disabled): New function.
* maint.h (worker_threads_disabled): New function.
* minsyms.c (minimal_symbol_reader::record_full): Call symbol_set_names
here if worker_threads_disabled () is true.
(minimal_symbol_reader::install): Skip all threading if
worker_threads_disabled () is true.
Change-Id: I92ba4f6bbf07363189666327cad452d6b9c8e01d
---
M gdb/ChangeLog
M gdb/maint.c
M gdb/maint.h
M gdb/minsyms.c
4 files changed, 33 insertions(+), 4 deletions(-)
@@ -1,5 +1,15 @@
2019-11-27 Christian Biesinger <cbiesinger@google.com>
+ * maint.c (n_worker_threads): Default to 0.
+ (worker_threads_disabled): New function.
+ * maint.h (worker_threads_disabled): New function.
+ * minsyms.c (minimal_symbol_reader::record_full): Call symbol_set_names
+ here if worker_threads_disabled () is true.
+ (minimal_symbol_reader::install): Skip all threading if
+ worker_threads_disabled () is true.
+
+2019-11-27 Christian Biesinger <cbiesinger@google.com>
+
* minsyms.c (add_minsym_to_hash_table): Use a previously computed
hash code if possible.
(add_minsym_to_demangled_hash_table): Likewise.
@@ -845,7 +845,12 @@
}
#endif
-static int n_worker_threads = -1;
+static int n_worker_threads = 0;
+
+bool worker_threads_disabled ()
+{
+ return n_worker_threads == 0;
+}
/* Update the thread pool for the desired number of threads. */
static void
@@ -26,6 +26,8 @@
extern void set_per_command_space (int);
+extern bool worker_threads_disabled ();
+
/* Records a run time and space usage to be used as a base for
reporting elapsed time or change in space. */
@@ -54,6 +54,7 @@
#include <algorithm>
#include "safe-ctype.h"
#include "gdbsupport/parallel-for.h"
+#include "maint.h"
#if CXX_STD_THREAD
#include <mutex>
@@ -1137,6 +1138,15 @@
else
msymbol->name = name.data ();
+ if (worker_threads_disabled ())
+ {
+ /* To keep our behavior as close as possible to the previous non-threaded
+ behavior for GDB 9.1, we call symbol_set_names here when threads
+ are disabled. */
+ symbol_set_names (msymbol, msymbol->name, false, m_objfile->per_bfd);
+ msymbol->name_set = 1;
+ }
+
SET_MSYMBOL_VALUE_ADDRESS (msymbol, address);
MSYMBOL_SECTION (msymbol) = section;
@@ -1407,10 +1417,12 @@
(msym, demangled_name,
&m_objfile->per_bfd->storage_obstack);
msym->name_set = 1;
-
- hash_values[idx].mangled_name_hash
- = fast_hash (msym->name, hash_values[idx].name_length);
}
+ /* This mangled_name_hash computation has to be outside of
+ the name_set check, or symbol_set_names below will
+ be called with an invalid hash value. */
+ hash_values[idx].mangled_name_hash
+ = fast_hash (msym->name, hash_values[idx].name_length);
hash_values[idx].minsym_hash
= msymbol_hash (msym->linkage_name ());
/* We only use this hash code if the search name differs