[pushed] Re: [PATCH 38/40] Use TOLOWER in SYMBOL_HASH_NEXT

Pedro Alves
2017-11-25T00:35:57Z

On 08/09/2017 08:24 PM, Keith Seitz wrote:
> On 06/02/2017 05:22 AM, Pedro Alves wrote:
>> gdb/ChangeLog:
>> yyyy-mm-dd Pedro Alves <palves@redhat.com>
>>
>> * dictionary.c: Include "safe-ctype.h".
>> * minsyms.c: Include "safe-ctype.h".
>> * minsyms.c (SYMBOL_HASH_NEXT): Use TOLOWER instead of tolower.
>
> Looks good!

Since this improves performance a little bit, I guess I could say
it stands on is own, so I went ahead and pushed it in already,
as below.

From deeeba559bd0c18e06dba19f44571ee8a218fcdb Mon Sep 17 00:00:00 2001
From: Pedro Alves <palves@redhat.com>
Date: Sat, 25 Nov 2017 00:33:05 +0000
Subject: [PATCH] Use TOLOWER in SYMBOL_HASH_NEXT
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

The support for setting breakpoint in functions with ABI tags patch
will add a use of SYMBOL_HASH_NEXT in cp-support.c, which fails to
compile with:

src/gdb/cp-support.c:38:0:
src/gdb/cp-support.c: In function ‘unsigned int cp_search_name_hash(const char*)’:
src/gdb/../include/safe-ctype.h:148:20: error: ‘do_not_use_tolower_with_safe_ctype’ was not declared in this scope
#define tolower(c) do_not_use_tolower_with_safe_ctype
^
src/gdb/minsyms.h:174:18: note: in expansion of macro ‘tolower’
((hash) * 67 + tolower ((unsigned char) (c)) - 113)
^
src/gdb/cp-support.c:1677:14: note: in expansion of macro ‘SYMBOL_HASH_NEXT’
hash = SYMBOL_HASH_NEXT (hash, *string);
^

This fixes the problem before it happens.

I was somewhat worried about whether this might have an impact with
languages that are case insensitive, but I convinced myself that it
doesn't. As bonus, this improves GDB's minsym interning performance a
bit (3%-10%). See
<https://sourceware.org/ml/gdb/2017-11/msg00021.html>.

gdb/ChangeLog:
2017-11-25 Pedro Alves <palves@redhat.com>

* dictionary.c: Include "safe-ctype.h".
* minsyms.c: Include "safe-ctype.h".
* minsyms.c (SYMBOL_HASH_NEXT): Use TOLOWER instead of tolower.
---
gdb/ChangeLog | 6 ++++++
gdb/dictionary.c | 1 +
gdb/minsyms.c | 1 +
gdb/minsyms.h | 2 +-
4 files changed, 9 insertions(+), 1 deletion(-)

diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index 4e0b45e..61db1b1 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -1,3 +1,9 @@
+2017-11-25 Pedro Alves <palves@redhat.com>
+
+ * dictionary.c: Include "safe-ctype.h".
+ * minsyms.c: Include "safe-ctype.h".
+ * minsyms.c (SYMBOL_HASH_NEXT): Use TOLOWER instead of tolower.
+
2017-11-25 Pedro Alves <palves@redhat.com>

* completer.c (complete_line_internal_1): Skip spaces until the
diff --git a/gdb/dictionary.c b/gdb/dictionary.c
index fb307538..7d26efb 100644
--- a/gdb/dictionary.c
+++ b/gdb/dictionary.c
@@ -26,6 +26,7 @@
#include "symtab.h"
#include "buildsym.h"
#include "dictionary.h"
+#include "safe-ctype.h"

/* This file implements dictionaries, which are tables that associate
symbols to names. They are represented by an opaque type 'struct
diff --git a/gdb/minsyms.c b/gdb/minsyms.c
index a0d3bd5..4898da1 100644
--- a/gdb/minsyms.c
+++ b/gdb/minsyms.c
@@ -52,6 +52,7 @@
#include "cli/cli-utils.h"
#include "symbol.h"
#include <algorithm>
+#include "safe-ctype.h"

/* See minsyms.h. */

diff --git a/gdb/minsyms.h b/gdb/minsyms.h
index f326be9..5c0dde4 100644
--- a/gdb/minsyms.h
+++ b/gdb/minsyms.h
@@ -177,7 +177,7 @@ unsigned int msymbol_hash_iw (const char *);
requirements. */

#define SYMBOL_HASH_NEXT(hash, c) \
- ((hash) * 67 + tolower ((unsigned char) (c)) - 113)
+ ((hash) * 67 + TOLOWER ((unsigned char) (c)) - 113)

\f

--
2.5.5