From 41b4aadcde523bf37df7cd600455a04c55a6be90 Mon Sep 17 00:00:00 2001 From: Christopher Faylor Date: Sun, 8 Mar 2009 21:01:52 +0000 Subject: [PATCH] * 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. --- gdb/ChangeLog | 11 +++++++++++ gdb/windows-nat.c | 33 +++++++++++++++++++++++++++++++-- 2 files changed, 42 insertions(+), 2 deletions(-) diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 412161c..96a4295 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,14 @@ +2009-03-08 Christopher Faylor + + * windows-nat.c (dr): Redefine to use largest possible integer which + holds a pointer. + (cygwin_set_dr): Avoid coercion. + +2009-03-08 Oswald Buddenhagen + + * windows-nat.c (windows_create_inferior): implement --tty handling on + non-cygwin. + 2009-03-06 Paul Pluzhnikov Rename solib_address to solib_name_from_address. 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; } -- 2.7.4