This is the mail archive of the gdb-patches@sourceware.org mailing list for the GDB project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [all pushed] Re: [PATCH 00/36] Support building GDB as a C++ program


OK, I now successfully build gdb.exe and gdbserver.exe!
To handle the INT32_MAX and INT32_MIN macro definition issue, I just have:

#ifndef INT32_MIN
#define INT32_MIN INT_MIN
#endif

#ifndef INT32_MAX
#define INT32_MAX INT_MAX
#endif

Before
 
#if !(INT_MIN == INT32_MIN && INT_MAX == INT32_MAX)
# error "This file assumes that 'int' has exactly 32 bits. Please report your platform and compiler to <bug-gnulib@gnu.org>."
#endif

In either:
mybuildcpp\gdb\gdbserver\build-gnulib-gdbserver\import\inttypes.h
and
mybuildcpp\gdb\build-gnulib\import\inttypes.h

The total patch I use is in attachment.

Yuanhui Zhang




>From d0a34a8b8491f3aae0a7e13e6a5f0a1969aac1dd Mon Sep 17 00:00:00 2001
From: asmwarrior <asmwarrior@gmail.com>
Date: Mon, 16 Mar 2015 16:23:38 +0800
Subject: [PATCH] build fix when using --enable-build-with-cxx option under
 MinGW.

---
 gdb/gdb_curses.h   |  2 +-
 gdb/stub-termcap.c | 22 ++++++++++++++--------
 gdb/windows-nat.c  | 38 +++++++++++++++++++-------------------
 3 files changed, 34 insertions(+), 28 deletions(-)

diff --git a/gdb/gdb_curses.h b/gdb/gdb_curses.h
index 9b3707a..d02cab3 100644
--- a/gdb/gdb_curses.h
+++ b/gdb/gdb_curses.h
@@ -51,7 +51,7 @@
    of the termcap functions will be built from stub-termcap.c.  Readline
    provides its own extern declarations when there's no termcap.h; do the
    same here for the termcap functions used in GDB.  */
-extern int tgetnum (const char *);
+extern "C" int tgetnum (const char *);
 #endif
 
 /* SunOS's curses.h has a '#define reg register' in it.  Thank you Sun.  */
diff --git a/gdb/stub-termcap.c b/gdb/stub-termcap.c
index cc8632c..a2e833a 100644
--- a/gdb/stub-termcap.c
+++ b/gdb/stub-termcap.c
@@ -23,14 +23,20 @@
 #include "defs.h"
 
 #include <stdlib.h>
-
+#ifdef __cplusplus
+extern "C" {
+#endif
 /* -Wmissing-prototypes */
-extern int tgetent (char *buffer, char *termtype);
-extern int tgetnum (char *name);
-extern int tgetflag (char *name);
-extern char* tgetstr (char *name, char **area);
-extern int tputs (char *string, int nlines, int (*outfun) ());
-extern char *tgoto (const char *cap, int col, int row);
+int tgetent (char *buffer, char *termtype);
+int tgetnum (char *name);
+int tgetflag (char *name);
+char* tgetstr (char *name, char **area);
+int tputs (char *string, int nlines, int (*outfun) (char *));
+char *tgoto (const char *cap, int col, int row);
+#ifdef __cplusplus
+}
+#endif
+
 
 /* Each of the files below is a minimal implementation of the standard
    termcap function with the same name, suitable for use in a Windows
@@ -61,7 +67,7 @@ tgetstr (char *name, char **area)
 }
 
 int
-tputs (char *string, int nlines, int (*outfun) ())
+tputs (char *string, int nlines, int (*outfun) (char *))
 {
   while (*string)
     outfun (*string++);
diff --git a/gdb/windows-nat.c b/gdb/windows-nat.c
index 49c09d3..f812a2c 100644
--- a/gdb/windows-nat.c
+++ b/gdb/windows-nat.c
@@ -189,16 +189,16 @@ typedef struct thread_info_struct
     CONTEXT context;
     STACKFRAME sf;
   }
-thread_info;
+thread_info_windows;
 
-static thread_info thread_head;
+static thread_info_windows thread_head;
 
 /* The process and thread handles for the above context.  */
 
 static DEBUG_EVENT current_event;	/* The current debug event from
 					   WaitForDebugEvent */
 static HANDLE current_process_handle;	/* Currently executing process */
-static thread_info *current_thread;	/* Info on currently selected thread */
+static thread_info_windows *current_thread;	/* Info on currently selected thread */
 static DWORD main_thread_id;		/* Thread ID of the main thread */
 
 /* Counts of things.  */
@@ -291,10 +291,10 @@ check (BOOL ok, const char *file, int line)
 /* Find a thread record given a thread id.  If GET_CONTEXT is not 0,
    then also retrieve the context for this thread.  If GET_CONTEXT is
    negative, then don't suspend the thread.  */
-static thread_info *
+static thread_info_windows *
 thread_rec (DWORD id, int get_context)
 {
-  thread_info *th;
+  thread_info_windows *th;
 
   for (th = &thread_head; (th = th->next) != NULL;)
     if (th->id == id)
@@ -331,10 +331,10 @@ thread_rec (DWORD id, int get_context)
 }
 
 /* Add a thread to the thread list.  */
-static thread_info *
+static thread_info_windows *
 windows_add_thread (ptid_t ptid, HANDLE h, void *tlb)
 {
-  thread_info *th;
+  thread_info_windows *th;
   DWORD id;
 
   gdb_assert (ptid_get_tid (ptid) != 0);
@@ -344,7 +344,7 @@ windows_add_thread (ptid_t ptid, HANDLE h, void *tlb)
   if ((th = thread_rec (id, FALSE)))
     return th;
 
-  th = XCNEW (thread_info);
+  th = XCNEW (thread_info_windows);
   th->id = id;
   th->h = h;
   th->thread_local_base = (CORE_ADDR) (uintptr_t) tlb;
@@ -374,13 +374,13 @@ windows_add_thread (ptid_t ptid, HANDLE h, void *tlb)
 static void
 windows_init_thread_list (void)
 {
-  thread_info *th = &thread_head;
+  thread_info_windows *th = &thread_head;
 
   DEBUG_EVENTS (("gdb: windows_init_thread_list\n"));
   init_thread_list ();
   while (th->next != NULL)
     {
-      thread_info *here = th->next;
+      thread_info_windows *here = th->next;
       th->next = here->next;
       xfree (here);
     }
@@ -391,7 +391,7 @@ windows_init_thread_list (void)
 static void
 windows_delete_thread (ptid_t ptid, DWORD exit_code)
 {
-  thread_info *th;
+  thread_info_windows *th;
   DWORD id;
 
   gdb_assert (ptid_get_tid (ptid) != 0);
@@ -412,7 +412,7 @@ windows_delete_thread (ptid_t ptid, DWORD exit_code)
 
   if (th->next != NULL)
     {
-      thread_info *here = th->next;
+      thread_info_windows *here = th->next;
       th->next = here->next;
       xfree (here);
     }
@@ -446,7 +446,7 @@ do_windows_fetch_inferior_registers (struct regcache *regcache, int r)
       else
 #endif
 	{
-	  thread_info *th = current_thread;
+	  thread_info_windows *th = current_thread;
 	  th->context.ContextFlags = CONTEXT_DEBUGGER_DR;
 	  CHECK (GetThreadContext (th->h, &th->context));
 	  /* Copy dr values from that thread.
@@ -1080,7 +1080,7 @@ display_selectors (char * args, int from_tty)
 static int
 handle_exception (struct target_waitstatus *ourstatus)
 {
-  thread_info *th;
+  thread_info_windows *th;
   DWORD code = current_event.u.Exception.ExceptionRecord.ExceptionCode;
 
   ourstatus->kind = TARGET_WAITKIND_STOPPED;
@@ -1211,7 +1211,7 @@ static BOOL
 windows_continue (DWORD continue_status, int id, int killed)
 {
   int i;
-  thread_info *th;
+  thread_info_windows *th;
   BOOL res;
 
   DEBUG_EVENTS (("ContinueDebugEvent (cpid=%d, ctid=0x%x, %s);\n",
@@ -1289,7 +1289,7 @@ static void
 windows_resume (struct target_ops *ops,
 		ptid_t ptid, int step, enum gdb_signal sig)
 {
-  thread_info *th;
+  thread_info_windows *th;
   DWORD continue_status = DBG_CONTINUE;
 
   /* A specific PTID means `step only this thread id'.  */
@@ -1412,8 +1412,8 @@ get_windows_debug_event (struct target_ops *ops,
 {
   BOOL debug_event;
   DWORD continue_status, event_code;
-  thread_info *th;
-  static thread_info dummy_thread_info;
+  thread_info_windows *th;
+  static thread_info_windows dummy_thread_info;
   int retval = 0;
 
   last_sig = GDB_SIGNAL_0;
@@ -2551,7 +2551,7 @@ static int
 windows_get_tib_address (struct target_ops *self,
 			 ptid_t ptid, CORE_ADDR *addr)
 {
-  thread_info *th;
+  thread_info_windows *th;
 
   th = thread_rec (ptid_get_tid (ptid), 0);
   if (th == NULL)
-- 
1.9.5.msysgit.0


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]