From 87f1d1d93bcf39b92fa06dc8d255110cc373e23e Mon Sep 17 00:00:00 2001
From: dtc <dtc>
Date: Sun, 25 Jan 1998 05:58:55 +0000
Subject: [PATCH] Fix recently introduced bugs in the breakpoint handling on
 non-x86 ports; fake_foreign_function_call must be called before sap_alloc on
 the non-x86 port so that current_dynamic_space_free_pointer is setup from
 reg_ALLOC.

---
 lisp/breakpoint.c | 26 +++++++++++++++++++++-----
 1 file changed, 21 insertions(+), 5 deletions(-)

diff --git a/lisp/breakpoint.c b/lisp/breakpoint.c
index 192c0e289..dd0f75205 100644
--- a/lisp/breakpoint.c
+++ b/lisp/breakpoint.c
@@ -1,6 +1,6 @@
 /*
 
- $Header: /Volumes/share2/src/cmucl/cvs2git/cvsroot/src/lisp/breakpoint.c,v 1.8 1998/01/16 16:05:04 dtc Exp $
+ $Header: /Volumes/share2/src/cmucl/cvs2git/cvsroot/src/lisp/breakpoint.c,v 1.9 1998/01/25 05:58:55 dtc Exp $
 
  This code was written as part of the CMU Common Lisp project at
  Carnegie Mellon University, and has been placed in the public domain.
@@ -117,6 +117,23 @@ static int compute_offset(struct sigcontext *scp, lispobj code)
     }
 }
 
+#ifndef i386
+void handle_breakpoint(int signal, int subcode, struct sigcontext *scp)
+{
+    lispobj code;
+
+    fake_foreign_function_call(scp);
+
+    code = find_code(scp);
+
+    funcall3(SymbolFunction(HANDLE_BREAKPOINT),
+	     compute_offset(scp, code),
+	     code,
+	     alloc_sap(scp));
+
+    undo_fake_foreign_function_call(scp);
+}
+#else
 void handle_breakpoint(int signal, int subcode, struct sigcontext *scp)
 {
     lispobj code, scp_sap=alloc_sap(scp);
@@ -125,11 +142,9 @@ void handle_breakpoint(int signal, int subcode, struct sigcontext *scp)
 
     code = find_code(scp);
 
-#ifdef i386
     /* Don't disallow recursive breakpoint traps.  Otherwise, we can't */
     /* use debugger breakpoints anywhere in here. */
     sigsetmask(scp->sc_mask);
-#endif
 
     funcall3(SymbolFunction(HANDLE_BREAKPOINT),
 	     compute_offset(scp, code),
@@ -138,12 +153,13 @@ void handle_breakpoint(int signal, int subcode, struct sigcontext *scp)
 
     undo_fake_foreign_function_call(scp);
 }
+#endif
 
 #ifndef i386
 void *handle_function_end_breakpoint(int signal, int subcode,
 				     struct sigcontext *scp)
 {
-    lispobj code, lra, scp_sap=alloc_sap(scp);
+    lispobj code, lra;
     struct code *codeptr;
 
     fake_foreign_function_call(scp);
@@ -154,7 +170,7 @@ void *handle_function_end_breakpoint(int signal, int subcode,
     funcall3(SymbolFunction(HANDLE_BREAKPOINT),
 	     compute_offset(scp, code),
 	     code,
-	     scp_sap);
+	     alloc_sap(scp));
 
     lra = codeptr->constants[REAL_LRA_SLOT];
 #ifdef reg_CODE
-- 
GitLab