Use TOLOWER in SYMBOL_HASH_NEXT
authorPedro Alves <palves@redhat.com>
Sat, 25 Nov 2017 00:33:05 +0000 (00:33 +0000)
committerPedro Alves <palves@redhat.com>
Sat, 25 Nov 2017 00:33:05 +0000 (00:33 +0000)
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
gdb/dictionary.c
gdb/minsyms.c
gdb/minsyms.h

index 4e0b45efbc8b59675867a4d41caed8e4500cdeca..61db1b1fa882ea5de9febe30d71886a74bda4178 100644 (file)
@@ -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
index fb307538ae1c09f432813bae696701a46595d58e..7d26efba975a052a3f530549fa8427190159a0e4 100644 (file)
@@ -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
index a0d3bd5a717d0583e047a268a25d18cf3967f42e..4898da17aa7a66de58e31641ddf2164ce178edcb 100644 (file)
@@ -52,6 +52,7 @@
 #include "cli/cli-utils.h"
 #include "symbol.h"
 #include <algorithm>
+#include "safe-ctype.h"
 
 /* See minsyms.h.  */
 
index f326be9462d0cdb10267bc68ab36974f54d3abd3..5c0dde4de159c0f07ca5e1b4af2b2d6c55ad22d1 100644 (file)
@@ -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