--- a/Object.st Mon Oct 23 17:50:42 1995 +0100
+++ b/Object.st Mon Oct 23 17:55:03 1995 +0100
@@ -30,7 +30,7 @@
COPYRIGHT (c) 1988 by Claus Gittinger
All Rights Reserved
-$Header: /cvs/stx/stx/libbasic/Object.st,v 1.64 1995-09-17 17:57:05 claus Exp $
+$Header: /cvs/stx/stx/libbasic/Object.st,v 1.65 1995-10-23 16:54:15 cg Exp $
'!
!Object class methodsFor:'documentation'!
@@ -51,7 +51,7 @@
version
"
-$Header: /cvs/stx/stx/libbasic/Object.st,v 1.64 1995-09-17 17:57:05 claus Exp $
+$Header: /cvs/stx/stx/libbasic/Object.st,v 1.65 1995-10-23 16:54:15 cg Exp $
"
!
@@ -1503,10 +1503,15 @@
!
signalInterrupt:signalNumber
- "unix signal occured - some signals are handled as Smalltalk Exceptions (SIGPIPE),
- others (SIGBUS) are rather fatal ..."
-
- |box name here sig ignorable titles actions badContext|
+ "unix signal occured - some signals are handled as Smalltalk Exceptions
+ (SIGPIPE), others (SIGBUS) are rather fatal ...
+ In any case, if a smalltalk-signal has been connected to the OS signal,
+ that one is raised.
+ TODO: add another argument, giving more detailed signal info (PC, VADDR,
+ exact cause etc.). This helps if segvs occur in primitive code.
+ Currently (temporary kludge), these are passed as global variables."
+
+ |box name here sig ignorable titles actions badContext msg pc addr|
"
special case - since SIGPIPE has an ST-signal associated
@@ -1561,7 +1566,20 @@
"
a hard signal - go into debugger immediately
"
- Debugger enter:here withMessage:('Signal ', name).
+ msg := 'Signal ', name.
+ InterruptPcLow notNil ifTrue:[
+ pc := InterruptPcLow + (InterruptPcHi bitShift:16).
+ pc ~~ 0 ifTrue:[
+ msg := msg , ' PC=' , (pc printStringRadix:16)
+ ].
+ ].
+ InterruptAddrLow notNil ifTrue:[
+ addr := InterruptAddrLow + (InterruptAddrHi bitShift:16).
+ addr ~~ 0 ifTrue:[
+ msg := msg , ' ADDR=' , (addr printStringRadix:16)
+ ].
+ ].
+ Debugger enter:here withMessage:msg.
badContext return.
^ nil.
].
@@ -2937,7 +2955,7 @@
numberOfArgs := argArray size.
%{
- extern OBJ Array;
+ extern OBJ Array, __AT_();
REGISTER OBJ *argP;
int nargs, i;
static OBJ last0 = nil; static struct inlineCache ilc0 = _ILC0;
@@ -2986,7 +3004,7 @@
} else {
argP = (OBJ *)(&a1);
for (i=1; i <= nargs; i++) {
- *argP++ = _AT_(argArray, CON_COMMA _MKSMALLINT(i));
+ *argP++ = __AT_(argArray, CON_COMMA _MKSMALLINT(i));
}
}
switch (nargs) {
@@ -3229,7 +3247,7 @@
].
numberOfArgs := argArray size.
%{
- extern OBJ Array;
+ extern OBJ Array, __AT_();
REGISTER OBJ *argP;
int nargs, i;
static struct inlineCache ilc0 = _DUMMYILC0;
@@ -3262,7 +3280,7 @@
}
} else {
for (i=1; i <= nargs; i++) {
- *argP++ = _AT_(argArray, CON_COMMA _MKSMALLINT(i));
+ *argP++ = __AT_(argArray, CON_COMMA _MKSMALLINT(i));
}
}
switch (nargs) {