Object.st
changeset 443 fae13c0f1512
parent 438 6c03b347369f
child 446 9005802b114a
--- 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) {