shithub: sl

Download patch

ref: 1d5710a5c982ad26dfb127a76af30a69bc42856f
parent: d31d6eed9d84008806398170c5c5ae693e7d590d
author: spew <spew@cbza.org>
date: Sat Apr 12 01:12:49 EDT 2025

lsd: use the correct pointer size of the process being debugged

--- a/src/plan9/lsd.c
+++ b/src/plan9/lsd.c
@@ -21,6 +21,12 @@
 	lsd_framesym = mk_csym("frame");
 }
 
+sl_v
+mk_lsdptr(u64int n)
+{
+	return mach->szreg == 8 ? mk_p64(n) : mk_p32(n);
+}
+
 static Reglist*
 rname(char *name)
 {
@@ -72,7 +78,7 @@
 	vec_elt(v, 0) = lsd_symsym;
 	vec_elt(v, 1) = str_from_cstr(s->name);
 	vec_elt(v, 2) = mk_rune(r);
-	vec_elt(v, 3) = mk_ptr(s->value);
+	vec_elt(v, 3) = mk_lsdptr(s->value);
 	sl_free_gc_handles(1);
 	return v;
 }
@@ -228,8 +234,8 @@
 	sl_gc_handle(&v);
 	vec_elt(v, 0) = lsd_framesym;
 	vec_elt(v, 1) = mk_symbol(fn);
-	vec_elt(v, 2) = mk_ptr(retpc);
-	vec_elt(v, 3) = mk_ptr(sp);
+	vec_elt(v, 2) = mk_lsdptr(retpc);
+	vec_elt(v, 3) = mk_lsdptr(sp);
 	vec_elt(v, 4) = localslist(fn, sp);
 	sl_free_gc_handles(1);
 	tracelist = mk_cons(v, tracelist);
@@ -313,7 +319,7 @@
 	}
 	sl_free_gc_handles(2);
 
-	v = alloc_vec(5, 0);
+	v = alloc_vec(6, 0);
 	sl_gc_handle(&v);
 	vec_elt(v, 0) = fixnum(pid);
 	vec_elt(v, 1) = registers;
@@ -320,6 +326,7 @@
 	vec_elt(v, 2) = cvalue_from_ref(sl_strtype, machdata->bpinst, machdata->bpsize);
 	vec_elt(v, 3) = symslist(textsym);
 	vec_elt(v, 4) = symslist(globalsym);
+	vec_elt(v, 5) = sym_value(mach->szreg == 8 ? sl_p64sym : sl_p32sym);
 	sl_free_gc_handles(1);
 
 	return v;
@@ -375,7 +382,7 @@
 	foll = sl_nil;
 	sl_gc_handle(&foll);
 	for(p = f; p < f+n; p++)
-		foll = mk_cons(mk_ptr(*p), foll);
+		foll = mk_cons(mk_lsdptr(*p), foll);
 	sl_free_gc_handles(1);
 	return foll;
 }
@@ -443,7 +450,7 @@
 	addr = file2pc(file, line);
 	if(addr == ~0)
 		bthrow(lerrorf(sl_errio, "could not find address of %s:%d", file, line));
-	return mk_ptr(addr);
+	return mk_lsdptr(addr);
 }
 
 BUILTIN("lsd-findsym", lsd_findsym)
--- a/src/plan9/lsd.sl
+++ b/src/plan9/lsd.sl
@@ -146,14 +146,15 @@
   `(core-read (symbol-addr ,symbol) ,.rest))
 
 (defmacro (defcval name size)
-  `(def (,name loc (n NIL))
-     ,(str "Read the value at the location as a " size " value.\n\n"
-           "   Optionally read an array of n values\n\n"
-           "   The input to this function is as in @.")
-     :doc-see @
-     :doc-group lsd
-     (if n (core-read (@ loc) ',size n)
-           (core-read (@ loc) ',size))))
+  (let {[sizesym `(sym ,size)]}
+    `(def (,name loc (n NIL))
+       ,(str "Read the value at the location as a " size " value.\n\n"
+             "   Optionally read an array of n values\n\n"
+             "   The input to this function is as in @.")
+       :doc-see @
+       :doc-group lsd
+       (if n (core-read (@ loc) ,sizesym n)
+             (core-read (@ loc) ,sizesym)))))
 
 (defcval c-byte u8)
 (defcval c-char utf8)
@@ -216,8 +217,8 @@
 
    Examples:
 
-       (pc "strecpy") → #ptr(0x22be91); look up a symbol
-       (pc "/sys/src/cmd/ls.c:75") → #ptr(0x20009f); source code address»
+       (pc "strecpy") → #p64(0x22be91); look up a symbol
+       (pc "/sys/src/cmd/ls.c:75") → #p64(0x20009f); source code address»
   :doc-see filepc
   :doc-see symbol
   :doc-group lsd
@@ -486,9 +487,9 @@
 
    Examples:
 
-       (filepc "/sys/src/cmd/cat.c:5") → #ptr(0x200028)
-       (filepc "/sys/src/cmd/cat.c" 5) → #ptr(0x200028)
-       (src #ptr(0x200028))      → "/sys/src/cmd/cat.c:5"»
+       (filepc "/sys/src/cmd/cat.c:5") → #p64(0x200028)
+       (filepc "/sys/src/cmd/cat.c" 5) → #p64(0x200028)
+       (src #p64(0x200028))      → "/sys/src/cmd/cat.c:5"»
   :doc-group lsd
   (if line
       (lsd-file2pc f line)
@@ -506,7 +507,7 @@
 
    Examples:
 
-       (global-symbol "strecpy") → #(symbol "strecpy" #\T #ptr(0x22be91))»
+       (global-symbol "strecpy") → #(symbol "strecpy" #\T #p64(0x22be91))»
   :doc-group lsd
   (def (find tbl k) (and (has? tbl k) (get tbl k)))
   (and (not text) (not data) (set! text T) (set! data T))
@@ -520,7 +521,7 @@
 
    Examples:
 
-       (local-symbol "i")    → #(symbol "i" #\a #ptr(0x7fffffffeec4))
+       (local-symbol "i")    → #(symbol "i" #\a #p64(0x7fffffffeec4))
        (symbol-read (local-symbol "argc") 's32) → #s32(2)»
   :doc-group lsd
   :doc-see _stk
@@ -567,7 +568,8 @@
     (set! pid (aref v 0))
     (set! registers (reverse! (aref v 1)))
     (set! bpinst (aref v 2))
-    (set! globals (make-global :text text :data data)))
+    (set! globals (make-global :text text :data data))
+    (set! ptr (aref v 5)))
   (if (>= pid 0) (attach) (void)))
 
 (def (usage)
--