* cygtls.cc (_cygtls::init_exception_handler): Revert patch

from 2005-12-02.
        * exceptions.cc (stack_info::walk): Add workaround for NT 5.2
        64 bit OSes.
        * wincap.h (wincaps::has_restricted_stack_args): New element.
        * wincap.cc: Implement above element throughout.
        (wincapc::init): Reset has_restricted_stack_args if not running
        under WOW64.
This commit is contained in:
Corinna Vinschen
2008-02-13 09:42:22 +00:00
parent 9cb5dea0e2
commit 5cb998e66c
5 changed files with 58 additions and 5 deletions

View File

@ -245,9 +245,20 @@ stack_info::walk ()
sf.AddrReturn.Offset = (DWORD) *++ebp;
if (needargs)
/* The arguments follow the return address */
for (unsigned i = 0; i < NPARAMS; i++)
sf.Params[i] = (DWORD) *++ebp;
{
unsigned nparams = NPARAMS;
/* The arguments follow the return address */
sf.Params[0] = (DWORD) *++ebp;
/* Hack for XP/2K3 WOW64. If the first stack param points to the
application entry point, we can only fetch one additional
parameter. Accessing anything beyond this address results in
a SEGV. This is fixed in Vista/2K8 WOW64. */
if (wincap.has_restricted_stack_args () && sf.Params[0] == 0x401000)
nparams = 2;
for (unsigned i = 0; i < nparams; i++)
sf.Params[i] = (DWORD) *++ebp;
}
return 1;
}