aboutsummaryrefslogtreecommitdiff
path: root/gdb/windows-nat.c
diff options
context:
space:
mode:
authorChristopher Faylor <me+cygwin@cgf.cx>2009-03-08 21:01:52 +0000
committerChristopher Faylor <me+cygwin@cgf.cx>2009-03-08 21:01:52 +0000
commit41b4aadcde523bf37df7cd600455a04c55a6be90 (patch)
tree37a4754b757149b10dc4107a686c94ed4af64e66 /gdb/windows-nat.c
parentdb37ab6c7c357aa50478a1ca69b017491bc59a6c (diff)
downloadgdb-41b4aadcde523bf37df7cd600455a04c55a6be90.zip
gdb-41b4aadcde523bf37df7cd600455a04c55a6be90.tar.gz
gdb-41b4aadcde523bf37df7cd600455a04c55a6be90.tar.bz2
* windows-nat.c (dr): Redefine to use largest possible integer which holds a
pointer. (cygwin_set_dr): Avoid coercion. * windows-nat.c (windows_create_inferior): implement --tty handling on non-cygwin.
Diffstat (limited to 'gdb/windows-nat.c')
-rw-r--r--gdb/windows-nat.c33
1 files changed, 31 insertions, 2 deletions
diff --git a/gdb/windows-nat.c b/gdb/windows-nat.c
index 67f0c99..33ff1a0 100644
--- a/gdb/windows-nat.c
+++ b/gdb/windows-nat.c
@@ -95,7 +95,7 @@ enum
#define CONTEXT_DEBUGGER_DR CONTEXT_DEBUGGER | CONTEXT_DEBUG_REGISTERS \
| CONTEXT_EXTENDED_REGISTERS
-static unsigned dr[8];
+static uintptr_t dr[8];
static int debug_registers_changed;
static int debug_registers_used;
#define DR6_CLEAR_VALUE 0xffff0ff0
@@ -1815,8 +1815,12 @@ windows_create_inferior (struct target_ops *ops, char *exec_file,
char *toexec;
char shell[MAX_PATH + 1]; /* Path to shell */
const char *sh;
+#ifdef __CYGWIN__
int tty;
int ostdin, ostdout, ostderr;
+#else
+ HANDLE tty;
+#endif
const char *inferior_io_terminal = get_inferior_io_terminal ();
if (!exec_file)
@@ -1886,6 +1890,28 @@ windows_create_inferior (struct target_ops *ops, char *exec_file,
dup2 (tty, 2);
}
}
+#else
+ if (!inferior_io_terminal)
+ tty = INVALID_HANDLE_VALUE;
+ else
+ {
+ SECURITY_ATTRIBUTES sa;
+ sa.nLength = sizeof(sa);
+ sa.lpSecurityDescriptor = 0;
+ sa.bInheritHandle = TRUE;
+ tty = CreateFileA (inferior_io_terminal, GENERIC_READ | GENERIC_WRITE,
+ 0, &sa, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);
+ if (tty == INVALID_HANDLE_VALUE)
+ warning (_("Warning: Failed to open TTY %s, error %#x."),
+ inferior_io_terminal, (unsigned) GetLastError ());
+ else
+ {
+ si.hStdInput = tty;
+ si.hStdOutput = tty;
+ si.hStdError = tty;
+ si.dwFlags |= STARTF_USESTDHANDLES;
+ }
+ }
#endif
windows_init_thread_list ();
@@ -1911,6 +1937,9 @@ windows_create_inferior (struct target_ops *ops, char *exec_file,
close (ostdout);
close (ostderr);
}
+#else
+ if (tty != INVALID_HANDLE_VALUE)
+ CloseHandle (tty);
#endif
if (!ret)
@@ -2245,7 +2274,7 @@ cygwin_set_dr (int i, CORE_ADDR addr)
if (i < 0 || i > 3)
internal_error (__FILE__, __LINE__,
_("Invalid register %d in cygwin_set_dr.\n"), i);
- dr[i] = (unsigned) addr;
+ dr[i] = addr;
debug_registers_changed = 1;
debug_registers_used = 1;
}