shithub: sl

Download patch

ref: 9645b04499cba95df390c2fc2dc2a6a999e8474c
parent: f0cd82006871d2aa9d2aa97f21c13c0bc9967052
author: spew <spew@cbza.org>
date: Fri Mar 14 19:15:39 EDT 2025

lsd: add bpdel

--- a/src/plan9/lsd.lsp
+++ b/src/plan9/lsd.lsp
@@ -65,21 +65,28 @@
   (unless coref (error "not attached to proc"))
   (apply readcore (cons (symbol-addr symbol) rest)))
 
-(def (bpset loc)
-  (if (< pid 0) (error "no running process"))
-  (let ((addr (cond ((sym? loc)
-                     (symbol-addr (get (global-text globals) loc)))
-                    ((num? loc)
-                     (u64 loc))
-                    (else (error "symbol or number")))))
-    (unless (eq? (status) 'Stopped)
-      (begin
-        (princ "Waiting... " status "\n")
-        (stop)))
-    (if (has? bptbl addr)
-        (error "breakpoint already set at " loc))
-    (put! bptbl addr (readcore addr 'byte (length bpinst)))
-    (writecore addr bpinst)))
+(let ((bp_init (λ (loc)
+                 (if (< pid 0) (error "no running process"))
+                 (unless (eq? (status) 'Stopped)
+                         (begin (princ "Waiting... " status "\n")
+                                (stop)))
+                 (cond ((sym? loc) (unless (has? (global-text globals) loc)
+                                           (error "symbol " loc " not found"))
+                                   (symbol-addr (get (global-text globals) loc)))
+                       ((num? loc) (u64 loc))
+                       (else (error "symbol or number"))))))
+  (set! bpset (λ (loc)
+                (let ((addr (bp_init loc)))
+                  (if (has? bptbl addr)
+                      (error "breakpoint already set at " loc))
+                  (put! bptbl addr (readcore addr 'byte (length bpinst)))
+                  (writecore addr bpinst))))
+  (set! bpdel (λ (loc)
+                (let ((addr (bp_init loc)))
+                  (unless (has? bptbl addr)
+                          (error "breakpoint not set at " loc))
+                  (writecore addr (get bptbl addr))
+                  (del! bptbl addr)))))
 
 (def (detach)
   (if regsf (io-close regsf))