* exception.h (stackdump): Declare.

* exceptions.cc (stackdump): Rework to perform all operations needed for a
stackdump and to avoid recursion.
(exception::handle): Use simplified stackdump interface.
* sigproc.cc (signal::exit): Ditto.  Delete now, uneeded declaration.
This commit is contained in:
Christopher Faylor
2012-02-12 22:43:33 +00:00
parent ce48510394
commit e52a43f101
4 changed files with 27 additions and 20 deletions

View File

@ -280,21 +280,21 @@ stack_info::walk ()
}
void
stackdump (DWORD ebp, int open_file, bool isexception)
stackdump (DWORD ebp, PCONTEXT in, EXCEPTION_RECORD *e)
{
static bool already_dumped;
if (cygheap->rlim_core == 0UL || (open_file && already_dumped))
if (already_dumped || cygheap->rlim_core == 0Ul)
return;
if (open_file)
open_stackdumpfile ();
already_dumped = true;
open_stackdumpfile ();
if (e)
dump_exception (e, in);
int i;
thestack.init (ebp, 1, !isexception); /* Initialize from the input CONTEXT */
thestack.init (ebp, 1, !in); /* Initialize from the input CONTEXT */
small_printf ("Stack trace:\r\nFrame Function Args\r\n");
for (i = 0; i < 16 && thestack++; i++)
{
@ -356,7 +356,7 @@ cygwin_stackdump ()
CONTEXT c;
c.ContextFlags = CONTEXT_FULL;
GetThreadContext (GetCurrentThread (), &c);
stackdump (c.Ebp, 0, 0);
stackdump (c.Ebp);
}
#define TIME_TO_WAIT_FOR_DEBUGGER 10000
@ -660,11 +660,7 @@ exception::handle (EXCEPTION_RECORD *e, exception_list *frame, CONTEXT *in, void
rtl_unwind (frame, e);
if (cygheap->rlim_core > 0UL)
{
open_stackdumpfile ();
dump_exception (e, in);
stackdump ((DWORD) ebp, 0, 1);
}
stackdump ((DWORD) ebp, in, e);
}
if (e->ExceptionCode == STATUS_ACCESS_VIOLATION)