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)
--
⑨