0.6.12.3:
[sbcl.git] / src / runtime / interr.c
index 1fd412c..7f60dde 100644 (file)
@@ -152,6 +152,16 @@ describe_internal_error(os_context_t *context)
 
 lispobj debug_print(lispobj string)
 {
-    fprintf(stderr, "%s\n", (char *)(((struct vector *)PTR(string))->data));
+    /* This is a kludge.  It's not actually safe - in general - to use 
+       %primitive print on the alpha, because it skips half of the
+       number stack setup that should usually be done on a function call,
+       so the called routine (i.e. this one) ends up being able to overwrite
+       local variables in the caller.  Rather than fix this everywhere
+       that %primitive print is used (it's only a debugging aid anyway)
+       we just put guarantee our safety by putting an unused buffer on
+       the stack before doing anything else here */
+    char untouched[32];
+    fprintf(stderr, "%s\n", 
+           (char *)(((struct vector *)PTR(string))->data),untouched);
     return NIL;
 }