From 3f6f9155c9385702dce1d4011759d1ff4aa602fd Mon Sep 17 00:00:00 2001 From: Eric Blake Date: Thu, 23 Jul 2009 02:47:17 +0000 Subject: [PATCH] * exceptions.cc (handle_exceptions): Set si_addr according to POSIX for SIGSEGV. --- winsup/cygwin/ChangeLog | 17 +++++++++++------ winsup/cygwin/exceptions.cc | 4 +++- 2 files changed, 14 insertions(+), 7 deletions(-) diff --git a/winsup/cygwin/ChangeLog b/winsup/cygwin/ChangeLog index f4c75a307..399804502 100644 --- a/winsup/cygwin/ChangeLog +++ b/winsup/cygwin/ChangeLog @@ -1,3 +1,8 @@ +2009-07-22 Eric Blake + + * exceptions.cc (handle_exceptions): Set si_addr according to + POSIX for SIGSEGV. + 2009-07-22 Corinna Vinschen * mount.cc (fs_info::update): Open filesystem with access set to 0. @@ -43,7 +48,7 @@ for MVFS. Explain why. (fhandler_disk_file::utimens): Drop local variables lastaccess and lastwrite. Copy timestamps right into FILE_BASIC_INFORMATION structure - to avoid copying them twice. + to avoid copying them twice. 2009-07-20 Corinna Vinschen @@ -189,7 +194,7 @@ * ntdll.h (PROCESSINFOCLASS): Remove unneeded trailing comma. * pinfo.cc (_pinfo::dup_proc_pipe): Remove unneeded assignment. - + * sigproc.cc (sig_send): Don't send signal to myself if this is an exec stub. @@ -712,7 +717,7 @@ * fhandler_clipboard.cc: Avoid calling system_printf. (set_clipboard): Add basic error checking. Set errno here. Per MSDN, - don't call GlobalFree on data block transferred to clipboard. + don't call GlobalFree on data block transferred to clipboard. (fhandler_dev_clipboard::write): Drop setting errno after call to set_clipboard. (fhandler_dev_clipboard::read): Add basic error checking. Simplify code. @@ -989,7 +994,7 @@ * flock.cc (lf_setlock): Handle border case which results in WFMO loop exiting with ret == WAIT_TIMEOUT gracefully. Add a system_printf to - uncover other potential problems with WFMO loop. + uncover other potential problems with WFMO loop. 2009-04-18 Christopher Faylor @@ -1033,7 +1038,7 @@ 2009-04-15 Corinna Vinschen * path.cc (path_conv::get_wide_win32_path): Allow relative paths. - (cygwin_conv_path): In case of CCP_POSIX_TO_WIN_W, convert relative + (cygwin_conv_path): In case of CCP_POSIX_TO_WIN_W, convert relative paths to absolute paths if the relative pathname length exceeds MAX_PATH. @@ -1312,7 +1317,7 @@ * path.cc (symlink_worker): Write target filename as UTF-16 string with leading BOM marker. - (symlink_info::check_shortcut): If check for leading BOM marker + (symlink_info::check_shortcut): If check for leading BOM marker succeeds, read filename as UTF-16 string. (symlink_info::check_sysfile): Ditto. diff --git a/winsup/cygwin/exceptions.cc b/winsup/cygwin/exceptions.cc index 76632854b..df0248947 100644 --- a/winsup/cygwin/exceptions.cc +++ b/winsup/cygwin/exceptions.cc @@ -686,7 +686,9 @@ _cygtls::handle_exceptions (EXCEPTION_RECORD *e, exception_list *frame, CONTEXT me.signal_exit (0x80 | si.si_signo); // Flag signal + core dump } - si.si_addr = (void *) in->Eip; + si.si_addr = (si.si_signo == SIGSEGV || si.si_signo == SIGBUS + ? (void *) e->ExceptionInformation[1] + : (void *) in->Eip); si.si_errno = si.si_pid = si.si_uid = 0; me.incyg++; sig_send (NULL, si, &me); // Signal myself