diff options
author | Christopher Faylor <me+cygwin@cgf.cx> | 2009-03-08 21:01:52 +0000 |
---|---|---|
committer | Christopher Faylor <me+cygwin@cgf.cx> | 2009-03-08 21:01:52 +0000 |
commit | 41b4aadcde523bf37df7cd600455a04c55a6be90 (patch) | |
tree | 37a4754b757149b10dc4107a686c94ed4af64e66 | |
parent | db37ab6c7c357aa50478a1ca69b017491bc59a6c (diff) | |
download | gdb-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.
-rw-r--r-- | gdb/ChangeLog | 11 | ||||
-rw-r--r-- | 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 <me+cygwin@cgf.cx> + + * windows-nat.c (dr): Redefine to use largest possible integer which + holds a pointer. + (cygwin_set_dr): Avoid coercion. + +2009-03-08 Oswald Buddenhagen <oswald.buddenhagen@trolltech.de> + + * windows-nat.c (windows_create_inferior): implement --tty handling on + non-cygwin. + 2009-03-06 Paul Pluzhnikov <ppluzhnikov@google.com> 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; } |