..., so handle these in "C" mode still: gdb/ * config/i386/i386gnu.mh (%_S.o %_U.o): Add "-x c" to "COMPILE.post". * gnu-nat.c: #include Mach/Hurd headers before all others. Wrap Mach/Hurd headers and MIG stubs' prototypes in 'extern "C"'. * i386-gnu-nat.c: Likewise. --- gdb/ChangeLog | 6 ++++++ gdb/config/i386/i386gnu.mh | 3 +++ gdb/gnu-nat.c | 35 ++++++++++++++++++++++------------- gdb/i386-gnu-nat.c | 14 +++++++++----- 4 files changed, 40 insertions(+), 18 deletions(-)
diff --git a/gdb/ChangeLog b/gdb/ChangeLog index a40eb29..171d03a 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,5 +1,11 @@ 2016-12-08 Thomas Schwinge <tho...@codesourcery.com> + * config/i386/i386gnu.mh (%_S.o %_U.o): Add "-x c" to + "COMPILE.post". + * gnu-nat.c: #include Mach/Hurd headers before all others. Wrap + Mach/Hurd headers and MIG stubs' prototypes in 'extern "C"'. + * i386-gnu-nat.c: Likewise. + * gnu-nat.c (proc_get_exception_port, proc_set_exception_port) (INF_RESUME_MSGPORT_RPC, proc_get_state, _proc_get_exc_port) (proc_steal_exc_port, proc_restore_exc_port, make_proc) diff --git a/gdb/config/i386/i386gnu.mh b/gdb/config/i386/i386gnu.mh index 24e817e..070497f 100644 --- a/gdb/config/i386/i386gnu.mh +++ b/gdb/config/i386/i386gnu.mh @@ -32,6 +32,9 @@ MIGCOM = $(MIG) -cc cat - /dev/null $(CPP) $(CPPFLAGS) $($*-MIGUFLAGS) -x c $< \ | $(MIGCOM) -sheader /dev/null -server /dev/null -user $*_U.c -header $*_U.h +# MIG stubs are not yet ready for C++ compilation. +%_S.o %_U.o : COMPILE.post += -x c + NAT_GENERATED_FILES = notify_S.h notify_S.c \ process_reply_S.h process_reply_S.c \ msg_reply_S.h msg_reply_S.c msg_U.h msg_U.c \ diff --git a/gdb/gnu-nat.c b/gdb/gnu-nat.c index ae4430d..5fd59a2 100644 --- a/gdb/gnu-nat.c +++ b/gdb/gnu-nat.c @@ -20,14 +20,9 @@ You should have received a copy of the GNU General Public License along with this program. If not, see <http://www.gnu.org/licenses/>. */ -#include "defs.h" - -#include <ctype.h> -#include <limits.h> -#include <setjmp.h> -#include <signal.h> -#include <sys/ptrace.h> - +/* Mach/Hurd headers are not yet ready for C++ compilation. */ +extern "C" +{ #include <mach.h> #include <mach_error.h> #include <mach/exception.h> @@ -48,6 +43,15 @@ #include <hurd/sigpreempt.h> #include <portinfo.h> +} + +#include "defs.h" + +#include <ctype.h> +#include <limits.h> +#include <setjmp.h> +#include <signal.h> +#include <sys/ptrace.h> #include "inferior.h" #include "symtab.h" @@ -63,12 +67,16 @@ #include "gnu-nat.h" #include "inf-child.h" +/* MIG stubs are not yet ready for C++ compilation. */ +extern "C" +{ #include "exc_request_S.h" #include "notify_S.h" #include "process_reply_S.h" #include "msg_reply_S.h" #include "exc_request_U.h" #include "msg_U.h" +} static process_t proc_server = MACH_PORT_NULL; @@ -1443,6 +1451,12 @@ struct inf *gnu_current_inf = 0; multi-threaded, we don't bother to lock this. */ struct inf *waiting_inf; +/* MIG stubs are not yet ready for C++ compilation. */ +extern "C" int exc_server (mach_msg_header_t *, mach_msg_header_t *); +extern "C" int msg_reply_server (mach_msg_header_t *, mach_msg_header_t *); +extern "C" int notify_server (mach_msg_header_t *, mach_msg_header_t *); +extern "C" int process_reply_server (mach_msg_header_t *, mach_msg_header_t *); + /* Wait for something to happen in the inferior, returning what in STATUS. */ static ptid_t gnu_wait (struct target_ops *ops, @@ -1458,11 +1472,6 @@ gnu_wait (struct target_ops *ops, struct proc *thread; struct inf *inf = gnu_current_inf; - extern int exc_server (mach_msg_header_t *, mach_msg_header_t *); - extern int msg_reply_server (mach_msg_header_t *, mach_msg_header_t *); - extern int notify_server (mach_msg_header_t *, mach_msg_header_t *); - extern int process_reply_server (mach_msg_header_t *, mach_msg_header_t *); - gdb_assert (inf->task); if (!inf->threads && !inf->pending_execs) diff --git a/gdb/i386-gnu-nat.c b/gdb/i386-gnu-nat.c index add0aa4..77081b8 100644 --- a/gdb/i386-gnu-nat.c +++ b/gdb/i386-gnu-nat.c @@ -17,17 +17,21 @@ You should have received a copy of the GNU General Public License along with this program. If not, see <http://www.gnu.org/licenses/>. */ +/* Mach/Hurd headers are not yet ready for C++ compilation. */ +extern "C" +{ +#include <mach.h> +#include <mach_error.h> +#include <mach/message.h> +#include <mach/exception.h> +} + #include "defs.h" #include "x86-nat.h" #include "inferior.h" #include "floatformat.h" #include "regcache.h" -#include <mach.h> -#include <mach_error.h> -#include <mach/message.h> -#include <mach/exception.h> - #include "i386-tdep.h" #include "gnu-nat.h" -- 2.10.2