2007-10-14 Pedro Alves * config/i386/mingw.mh, config/i386/mingw.mt: New files. * configure.tgt (i[34567]86-*-mingw32*): Set gdb_target = mingw. * win32-nat.c: Only include cygwin.h on Cygwin host. Don't include procfs.h. (win32_make_so): Don't convert path to posix on MinGW. (win32_attach): Only fallback to Cygwin pids on Cygwin. (win32_pid_to_exec_file): Disable Cygwin specific code. (win32_create_inferior): Disable handle starting the inferior through a shell on MinGW. Disable environment var processing. Disable tty handling. (cygwin_pid_to_str): Rename to ... (win32_pid_to_str): ... this. (init_win32_ops): Update use of win32_pid_to_str. Disable "shell" command on MinGW. --- gdb/config/i386/mingw.mh | 4 ++++ gdb/config/i386/mingw.mt | 3 +++ gdb/configure.tgt | 2 +- gdb/win32-nat.c | 44 ++++++++++++++++++++++++++++++++++---------- 4 files changed, 42 insertions(+), 11 deletions(-) Index: src/gdb/config/i386/mingw.mh =================================================================== --- /dev/null 1970-01-01 00:00:00.000000000 +0000 +++ src/gdb/config/i386/mingw.mh 2007-10-14 12:19:44.000000000 +0100 @@ -0,0 +1,4 @@ +MH_CFLAGS= +NATDEPFILES= i386-nat.o win32-nat.o +NAT_FILE=nm-cygwin.h +XM_CLIBS= Index: src/gdb/config/i386/mingw.mt =================================================================== --- /dev/null 1970-01-01 00:00:00.000000000 +0000 +++ src/gdb/config/i386/mingw.mt 2007-10-14 10:36:20.000000000 +0100 @@ -0,0 +1,3 @@ +# Target: Intel 386 run win32 +TDEPFILES= i386-tdep.o i386-cygwin-tdep.o i387-tdep.o \ + solib-target.o corelow.o Index: src/gdb/configure.tgt =================================================================== --- src.orig/gdb/configure.tgt 2007-10-12 20:25:20.000000000 +0100 +++ src/gdb/configure.tgt 2007-10-14 11:19:50.000000000 +0100 @@ -120,7 +120,7 @@ i[34567]86-*-gnu*) gdb_target=i386gnu ;; i[34567]86-*-cygwin*) gdb_target=cygwin build_gdbserver=yes ;; -i[34567]86-*-mingw32*) gdb_target=i386 +i[34567]86-*-mingw32*) gdb_target=mingw build_gdbserver=yes ;; i[34567]86-*-*) gdb_target=i386 ;; Index: src/gdb/win32-nat.c =================================================================== --- src.orig/gdb/win32-nat.c 2007-10-13 02:27:04.000000000 +0100 +++ src/gdb/win32-nat.c 2007-10-14 12:23:22.000000000 +0100 @@ -22,8 +22,6 @@ /* Originally by Steve Chamberlain, sac@cygnus.com */ -/* We assume we're being built with and will be used for cygwin. */ - #include "defs.h" #include "frame.h" /* required by inferior.h */ #include "inferior.h" @@ -40,7 +38,9 @@ #include #include #include +#ifdef __CYGWIN__ #include +#endif #include #include "buildsym.h" @@ -81,7 +81,6 @@ enum CONTEXT_DEBUGGER = (CONTEXT_FULL | CONTEXT_FLOATING_POINT) }; #endif -#include #include #define CONTEXT_DEBUGGER_DR CONTEXT_DEBUGGER | CONTEXT_DEBUG_REGISTERS \ @@ -637,7 +636,11 @@ win32_make_so (const char *name, DWORD l so = XZALLOC (struct so_list); so->lm_info = (struct lm_info *) xmalloc (sizeof (struct lm_info)); so->lm_info->load_addr = load_addr; +#ifdef __CYGWIN__ cygwin_conv_to_posix_path (buf, so->so_name); +#else + strcpy (so->so_name, buf); +#endif strcpy (so->so_original_name, name); /* Record cygwin1.dll .text start/end. */ @@ -1625,6 +1628,7 @@ win32_attach (char *args, int from_tty) ok = DebugActiveProcess (pid); saw_create = 0; +#ifdef __CYGWIN__ if (!ok) { /* Try fall back to Cygwin pid */ @@ -1632,10 +1636,11 @@ win32_attach (char *args, int from_tty) if (pid > 0) ok = DebugActiveProcess (pid); + } +#endif - if (!ok) - error (_("Can't attach to process.")); - } + if (!ok) + error (_("Can't attach to process.")); if (has_detach_ability ()) DebugSetProcessKillOnExit (FALSE); @@ -1697,10 +1702,12 @@ win32_pid_to_exec_file (int pid) /* Try to find the process path using the Cygwin internal process list pid isn't a valid pid, unfortunately. Use current_event.dwProcessId instead. */ - /* TODO: Also find native Windows processes using CW_GETPINFO_FULL. */ static char path[MAX_PATH + 1]; char *path_ptr = NULL; + +#ifdef __CYGWIN__ + /* TODO: Also find native Windows processes using CW_GETPINFO_FULL. */ int cpid; struct external_pinfo *pinfo; @@ -1718,6 +1725,10 @@ win32_pid_to_exec_file (int pid) } } cygwin_internal (CW_UNLOCK_PINFO); + if (path_ptr) + return path_ptr; +#endif + return path_ptr; } @@ -1764,9 +1775,12 @@ win32_create_inferior (char *exec_file, memset (&si, 0, sizeof (si)); si.cb = sizeof (si); + flags = DEBUG_ONLY_THIS_PROCESS; + toexec = exec_file; + +#ifdef __CYGWIN__ if (!useshell) { - flags = DEBUG_ONLY_THIS_PROCESS; cygwin_conv_to_win32_path (exec_file, real_path); toexec = real_path; } @@ -1784,6 +1798,7 @@ win32_create_inferior (char *exec_file, toexec = shell; flags = DEBUG_PROCESS; } +#endif if (new_group) flags |= CREATE_NEW_PROCESS_GROUP; @@ -1798,6 +1813,8 @@ win32_create_inferior (char *exec_file, strcat (args, " "); strcat (args, allargs); +#ifdef __CYGWIN__ + /* Prepare the environment vars for CreateProcess. */ cygwin_internal (CW_SYNC_WINENV); @@ -1822,6 +1839,8 @@ win32_create_inferior (char *exec_file, } } +#endif + win32_init_thread_list (); ret = CreateProcess (0, args, /* command line */ @@ -1833,6 +1852,8 @@ win32_create_inferior (char *exec_file, NULL, /* current directory */ &si, &pi); + +#ifdef __CYGWIN__ if (tty >= 0) { close (tty); @@ -1843,6 +1864,7 @@ win32_create_inferior (char *exec_file, close (ostdout); close (ostderr); } +#endif if (!ret) error (_("Error creating process %s, (error %d)."), @@ -1951,7 +1973,7 @@ win32_close (int x) /* Convert pid to printable format. */ static char * -cygwin_pid_to_str (ptid_t ptid) +win32_pid_to_str (ptid_t ptid) { static char buf[80]; int pid = PIDGET (ptid); @@ -2055,7 +2077,7 @@ init_win32_ops (void) win32_ops.to_mourn_inferior = win32_mourn_inferior; win32_ops.to_can_run = win32_can_run; win32_ops.to_thread_alive = win32_win32_thread_alive; - win32_ops.to_pid_to_str = cygwin_pid_to_str; + win32_ops.to_pid_to_str = win32_pid_to_str; win32_ops.to_stop = win32_stop; win32_ops.to_stratum = process_stratum; win32_ops.to_has_all_memory = 1; @@ -2086,12 +2108,14 @@ _initialize_win32_nat (void) add_com_alias ("sharedlibrary", "dll-symbols", class_alias, 1); +#ifdef __CYGWIN__ add_setshow_boolean_cmd ("shell", class_support, &useshell, _("\ Set use of shell to start subprocess."), _("\ Show use of shell to start subprocess."), NULL, NULL, NULL, /* FIXME: i18n: */ &setlist, &showlist); +#endif add_setshow_boolean_cmd ("cygwin-exceptions", class_support, &cygwin_exceptions, _("\ Break when an exception is detected in the Cygwin DLL itself."), _("\