Mail Archives: djgpp-workers/1997/12/14/06:32:37
AFAIK, according to POSIX, `abort' should dump core. In our environment,
this means a crash traceback. The changes below make this happen.
I would like to ask once again whether there is something magic about the
fake exceptions used between exceptn.S and dpmiexcp.c (last time I asked,
nobody answered). I want to know if there are any dangers in inventing
new fake exception numbers like the patches below do.
*** src/libc/ansi/stdlib/abort.c~0 Sun Oct 6 00:33:20 1996
--- src/libc/ansi/stdlib/abort.c Sat Dec 13 15:11:02 1997
*************** void
*** 9,14 ****
--- 9,15 ----
abort()
{
_write(STDERR_FILENO, msg, sizeof(msg)-1);
+ __asm__ __volatile__ ("movb $0x7f,%al;call ___djgpp_hw_exception");
_exit(1);
}
*** src/libc/go32/dpmiexcp.c~1 Sun Dec 7 13:59:52 1997
--- src/libc/go32/dpmiexcp.c Sat Dec 13 15:12:06 1997
*************** except_to_sig(int excep)
*** 84,89 ****
--- 84,91 ----
return SIGINT;
else if(excep == 0x7a)
return SIGQUIT;
+ else if(excep == 0x7f) /* fake exception used by `abort' */
+ return SIGABRT;
else
return SIGILL;
}
*************** do_faulting_finish_message(void)
*** 177,188 ****
exception_names[signum];
if (signum == 0x75)
en = "Floating Point exception";
! if (signum == 0x1b)
en = "Control-Break Pressed";
! if (signum == 0x79)
en = "INTR key Pressed";
! if (signum == 0x7a)
en = "QUIT key Pressed";
if (en == 0)
{
err("Exception ");
--- 179,192 ----
exception_names[signum];
if (signum == 0x75)
en = "Floating Point exception";
! else if (signum == 0x1b)
en = "Control-Break Pressed";
! else if (signum == 0x79)
en = "INTR key Pressed";
! else if (signum == 0x7a)
en = "QUIT key Pressed";
+ else if (signum == 0x7f)
+ en = "Program Aborted";
if (en == 0)
{
err("Exception ");
- Raw text -