commit f21f37f219965af3980ba50bac429658d19615d1 from: rsc date: Wed Apr 21 20:04:34 2004 UTC add registers to stack trace commit - 4a64a77bd3c08809a1cfb4c5a76c2efbd33b1d7b commit + f21f37f219965af3980ba50bac429658d19615d1 blob - 1b1dea73f7247ee862c96f650d397bc395779de9 blob + 800c0f660b2a3ee10b1133b7884ee33eb205bd92 --- src/libmach/localaddr.c +++ src/libmach/localaddr.c @@ -14,6 +14,7 @@ static struct { Loc l; char *fn; char *var; + char *reg; } rock; static int @@ -28,6 +29,13 @@ ltrace(Map *map, Regs *regs, ulong pc, ulong nextpc, S if(sym==nil || strcmp(sym->name, rock.fn) != 0) return ++rock.nframe < 40; + if(rock.reg){ + if(rget(regs, rock.reg, &v) < 0) + return 0; + rock.l = locconst(v); + rock.found = 1; + return 0; + } if(lookuplsym(sym, rock.var, &s1) < 0) return 0; if(locsimplify(map, regs, s1.loc, &rock.l) < 0) @@ -43,10 +51,18 @@ ltrace(Map *map, Regs *regs, ulong pc, ulong nextpc, S int localaddr(Map *map, Regs *regs, char *fn, char *var, ulong *val) { + Regdesc *rp; + rock.found = 0; rock.nframe = 0; rock.fn = fn; - rock.var = var; + rock.reg = nil; + rock.var = nil; + for(rp=mach->reglist; rp->name; rp++) + if(strcmp(rp->name, var) == 0) + rock.reg = rp->name; + if(!rock.reg) + rock.var = var; stacktrace(map, regs, ltrace); if(rock.found){ *val = rock.l.addr;