diff options
author | Manoj Gupta <manojgupta@google.com> | 2023-04-17 13:33:15 -0700 |
---|---|---|
committer | Roland McGrath <mcgrathr@google.com> | 2023-04-29 00:35:11 -0700 |
commit | e0f4b3ec5f36ff90dbea21aab2190fb4565ca67b (patch) | |
tree | 4bc6cccc146f7213100c5f1fc9642a3eb63fbdb4 /gdbsupport | |
parent | bc752bfbd98b6c2b02d59ed0a6c7ca88fbf4e3e0 (diff) | |
download | gdb-e0f4b3ec5f36ff90dbea21aab2190fb4565ca67b.zip gdb-e0f4b3ec5f36ff90dbea21aab2190fb4565ca67b.tar.gz gdb-e0f4b3ec5f36ff90dbea21aab2190fb4565ca67b.tar.bz2 |
gdb: Fix building with latest libc++
Latest libc++[1] causes transitive include to <locale> when
<mutex> or <thread> header is included. This causes
gdb to not build[2] since <locale> defines isupper/islower etc.
functions that are explicitly macroed-out in safe-ctype.h to
prevent their use.
Use the suggestion from libc++ to include <locale> internally when
building in C++ mode to avoid build errors.
Use safe-gdb-ctype.h as the include instead of "safe-ctype.h"
to keep this isolated to gdb since rest of binutils
does not seem to use much C++.
[1]: https://reviews.llvm.org/D144331
[2]: https://issuetracker.google.com/issues/277967395
Diffstat (limited to 'gdbsupport')
-rw-r--r-- | gdbsupport/common-utils.cc | 2 | ||||
-rw-r--r-- | gdbsupport/gdb-safe-ctype.h | 5 |
2 files changed, 5 insertions, 2 deletions
diff --git a/gdbsupport/common-utils.cc b/gdbsupport/common-utils.cc index 4a96f2c..a2dde63 100644 --- a/gdbsupport/common-utils.cc +++ b/gdbsupport/common-utils.cc @@ -20,7 +20,7 @@ #include "common-defs.h" #include "common-utils.h" #include "host-defs.h" -#include "safe-ctype.h" +#include "gdbsupport/gdb-safe-ctype.h" #include "gdbsupport/gdb-xfree.h" void * diff --git a/gdbsupport/gdb-safe-ctype.h b/gdbsupport/gdb-safe-ctype.h index f9743ba..bec85c0 100644 --- a/gdbsupport/gdb-safe-ctype.h +++ b/gdbsupport/gdb-safe-ctype.h @@ -23,7 +23,9 @@ /* After safe-ctype.h is included, we can no longer use the host's ctype routines. Trying to do so results in compile errors. Code that uses safe-ctype.h that wants to refer to the locale-dependent - ctype functions must call these wrapper versions instead. */ + ctype functions must call these wrapper versions instead. + When compiling in C++ mode, also include <locale> before "safe-ctype.h" + which also defines is* functions. */ static inline int gdb_isprint (int ch) @@ -41,6 +43,7 @@ gdb_isprint (int ch) #undef ISUPPER #undef ISXDIGIT +#include <locale> #include "safe-ctype.h" #endif |