diff options
author | Christopher Faylor <me@cgf.cx> | 2011-11-05 22:29:51 +0400 |
---|---|---|
committer | Christopher Faylor <me@cgf.cx> | 2011-11-05 22:29:51 +0400 |
commit | 481b6ac0c84bbe5639adce0b059c256aa22955ad (patch) | |
tree | 6bb60f7b875d6984ffd9f8c2354b5d1110132cab /winsup | |
parent | 26601df44c0d70a74e882f7ca0262220d1e9c382 (diff) |
* pinfo.cc (status_exit): Return complete error code. Handle
STATUS_ACCESS_VIOLATION correctly.
(pinfo::set_exit_code): Set self->exitcode directly from status_exit.
Diffstat (limited to 'winsup')
-rw-r--r-- | winsup/cygwin/ChangeLog | 6 | ||||
-rw-r--r-- | winsup/cygwin/pinfo.cc | 16 |
2 files changed, 16 insertions, 6 deletions
diff --git a/winsup/cygwin/ChangeLog b/winsup/cygwin/ChangeLog index 1401a18fa..cd9cdf5ea 100644 --- a/winsup/cygwin/ChangeLog +++ b/winsup/cygwin/ChangeLog @@ -1,3 +1,9 @@ +2011-11-05 Christopher Faylor <me.cygwin2011@cgf.cx> + + * pinfo.cc (status_exit): Return complete error code. Handle + STATUS_ACCESS_VIOLATION correctly. + (pinfo::set_exit_code): Set self->exitcode directly from status_exit. + 2011-11-04 Christopher Faylor <me.cygwin2011@cgf.cx> * pinfo.h (pinfo::reattach): Only set destroy to false when diff --git a/winsup/cygwin/pinfo.cc b/winsup/cygwin/pinfo.cc index 5a77d8f6c..83f231d64 100644 --- a/winsup/cygwin/pinfo.cc +++ b/winsup/cygwin/pinfo.cc @@ -130,18 +130,21 @@ status_exit (DWORD x) mount_table->conv_to_posix_path (pc.get_win32 (), posix_prog, 1); small_printf ("%s: error while loading shared libraries: %s: cannot open shared object file: No such file or directory\n", posix_prog, find_first_notloaded_dll (pc)); - x = 127; + x = 127 << 8; } break; case STATUS_ILLEGAL_DLL_PSEUDO_RELOCATION: /* custom error value */ /* We've already printed the error message in pseudo-reloc.c */ - x = 127; + x = 127 << 8; + break; + case STATUS_ACCESS_VIOLATION: + x = SIGSEGV; break; default: debug_printf ("*** STATUS_%p\n", x); - x = 127; + x = 127 << 8; } - return x; + return EXITCODE_SET | x; } # define self (*this) @@ -149,8 +152,9 @@ void pinfo::set_exit_code (DWORD x) { if (x >= 0xc0000000UL) - x = status_exit (x); - self->exitcode = EXITCODE_SET | (sigExeced ?: (x & 0xff) << 8); + self->exitcode = status_exit (x); + else + self->exitcode = EXITCODE_SET | (sigExeced ?: (x & 0xff) << 8); } void |