tadd registers to stack trace - plan9port - [fork] Plan 9 from user space
 (HTM) git clone git://src.adamsgaard.dk/plan9port
 (DIR) Log
 (DIR) Files
 (DIR) Refs
 (DIR) README
 (DIR) LICENSE
       ---
 (DIR) commit f21f37f219965af3980ba50bac429658d19615d1
 (DIR) parent 4a64a77bd3c08809a1cfb4c5a76c2efbd33b1d7b
 (HTM) Author: rsc <devnull@localhost>
       Date:   Wed, 21 Apr 2004 20:04:34 +0000
       
       add registers to stack trace
       
       Diffstat:
         M src/libmach/localaddr.c             |      18 +++++++++++++++++-
       
       1 file changed, 17 insertions(+), 1 deletion(-)
       ---
 (DIR) diff --git a/src/libmach/localaddr.c b/src/libmach/localaddr.c
       t@@ -14,6 +14,7 @@ static struct {
                Loc l;
                char *fn;
                char *var;
       +        char *reg;
        } rock;
        
        static int
       t@@ -28,6 +29,13 @@ ltrace(Map *map, Regs *regs, ulong pc, ulong nextpc, Symbol *sym, int depth)
        
                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)
       t@@ -43,10 +51,18 @@ ltrace(Map *map, Regs *regs, ulong pc, ulong nextpc, Symbol *sym, int depth)
        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;