From: Thomas Schwinge Date: Wed, 13 Feb 2019 11:02:20 +0000 (+0100) Subject: [gdb, hurd] Work around conflict between Mach's 'thread_info' function, and GDB's... X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=cabb5f067daa9227bf0323cbf64c6065d6e4796f;p=binutils-gdb.git [gdb, hurd] Work around conflict between Mach's 'thread_info' function, and GDB's 'thread_info' class In file included from ./nm.h:25:0, from [...]/gdb/defs.h:423, from [...]/gdb/gdb.c:19: [...]/gdb/regcache.h:35:46: warning: 'get_thread_regcache' initialized and declared 'extern' extern struct regcache *get_thread_regcache (thread_info *thread); ^~~~~~~~~~~ [...]/gdb/regcache.h:35:46: error: 'regcache* get_thread_regcache' redeclared as different kind of symbol [...] [...]/gdb/gdbarch.h:1203:69: error: 'thread_info' is not a type extern LONGEST gdbarch_get_syscall_number (struct gdbarch *gdbarch, thread_info *thread); ^~~~~~~~~~~ Fixed with a different (self-contained, more maintainable?) approach compared to what has been done in commit 7aabaf9d4ad52a1df1f551908fbd8cafc5e7597a "Create private_thread_info hierarchy", and commit 75cbc781e371279f4403045be93b07fd8fe7fde5 "gdb: For macOS, s/thread_info/struct thread_info/". We don't want to change all the GDB code to everywhere use 'class thread_info' or 'struct thread_info' instead of plain 'thread_info'. gdb/ * config/i386/nm-i386gnu.h: Don't "#include" any files. * gnu-nat.h (mach_thread_info): New function. * gnu-nat.c (thread_takeover_sc_cmd): Use it. --- diff --git a/gdb/ChangeLog b/gdb/ChangeLog index e6d86e25520..c88216b94b7 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,5 +1,9 @@ 2019-02-14 Thomas Schwinge + * config/i386/nm-i386gnu.h: Don't "#include" any files. + * gnu-nat.h (mach_thread_info): New function. + * gnu-nat.c (thread_takeover_sc_cmd): Use it. + * config/i386/nm-i386gnu.h (gnu_target_pid_to_str): Remove. 2019-02-14 Frederic Konrad diff --git a/gdb/config/i386/nm-i386gnu.h b/gdb/config/i386/nm-i386gnu.h index 8f36102da49..e859b23f2b2 100644 --- a/gdb/config/i386/nm-i386gnu.h +++ b/gdb/config/i386/nm-i386gnu.h @@ -19,11 +19,6 @@ #ifndef CONFIG_I386_NM_I386GNU_H #define CONFIG_I386_NM_I386GNU_H -#include -#include -#include -#include "regcache.h" - /* Thread flavors used in re-setting the T bit. */ #define THREAD_STATE_FLAVOR i386_REGS_SEGS_STATE #define THREAD_STATE_SIZE i386_THREAD_STATE_COUNT diff --git a/gdb/gnu-nat.c b/gdb/gnu-nat.c index cb8331daaf4..bd8fcb6e59b 100644 --- a/gdb/gnu-nat.c +++ b/gdb/gnu-nat.c @@ -20,6 +20,9 @@ You should have received a copy of the GNU General Public License along with this program. If not, see . */ +/* Include this first, to pick up the 'thread_info' diversion. */ +#include "gnu-nat.h" + /* Mach/Hurd headers are not yet ready for C++ compilation. */ extern "C" { @@ -67,7 +70,6 @@ extern "C" #include "gdb_obstack.h" #include "tid-parse.h" -#include "gnu-nat.h" #include "inf-child.h" /* MIG stubs are not yet ready for C++ compilation. */ @@ -3429,8 +3431,9 @@ thread_takeover_sc_cmd (const char *args, int from_tty) thread_basic_info_data_t _info; thread_basic_info_t info = &_info; mach_msg_type_number_t info_len = THREAD_BASIC_INFO_COUNT; - kern_return_t err = - thread_info (thread->port, THREAD_BASIC_INFO, (int *) &info, &info_len); + kern_return_t err + = mach_thread_info (thread->port, THREAD_BASIC_INFO, + (int *) &info, &info_len); if (err) error (("%s."), safe_strerror (err)); thread->sc = info->suspend_count; diff --git a/gdb/gnu-nat.h b/gdb/gnu-nat.h index 9df479c8506..dbad0cac93f 100644 --- a/gdb/gnu-nat.h +++ b/gdb/gnu-nat.h @@ -19,8 +19,21 @@ #ifndef GNU_NAT_H #define GNU_NAT_H -#include +#include "defs.h" + +/* Work around conflict between Mach's 'thread_info' function, and GDB's + 'thread_info' class. Make the former available as 'mach_thread_info'. */ +#define thread_info mach_thread_info +/* Mach headers are not yet ready for C++ compilation. */ +extern "C" +{ #include +} +#undef thread_info +/* Divert 'mach_thread_info' to the original Mach 'thread_info' function. */ +extern __typeof__ (mach_thread_info) mach_thread_info asm ("thread_info"); + +#include struct inf; diff --git a/gdb/i386-gnu-nat.c b/gdb/i386-gnu-nat.c index ffba941eef9..c23c4bc79cf 100644 --- a/gdb/i386-gnu-nat.c +++ b/gdb/i386-gnu-nat.c @@ -17,6 +17,9 @@ You should have received a copy of the GNU General Public License along with this program. If not, see . */ +/* Include this first, to pick up the 'thread_info' diversion. */ +#include "gnu-nat.h" + /* Mach/Hurd headers are not yet ready for C++ compilation. */ extern "C" { @@ -34,7 +37,6 @@ extern "C" #include "i386-tdep.h" -#include "gnu-nat.h" #include "inf-child.h" #include "i387-tdep.h"