diff options
-rw-r--r-- | src/cmd/5g/list.c | 50 |
1 files changed, 32 insertions, 18 deletions
diff --git a/src/cmd/5g/list.c b/src/cmd/5g/list.c index 631015869..4d9f35c3a 100644 --- a/src/cmd/5g/list.c +++ b/src/cmd/5g/list.c @@ -30,6 +30,8 @@ #include "gg.h" +// TODO(kaib): make 5g/list.c congruent with 5l/list.c + static int sconsize; void listinit(void) @@ -40,6 +42,7 @@ listinit(void) fmtinstall('D', Dconv); // Addr* fmtinstall('Y', Yconv); // sconst fmtinstall('R', Rconv); // register + fmtinstall('M', Mconv); // names } int @@ -97,27 +100,11 @@ Dconv(Fmt *fp) snprint(str, sizeof(str), "%d", a->branch->loc); break; - case D_EXTERN: - snprint(str, sizeof(str), "%S+%d(SB)", a->sym, a->offset); - break; - - case D_STATIC: - snprint(str, sizeof(str), "%S<>+%d(SB)", a->sym, a->offset); - break; - - case D_AUTO: - snprint(str, sizeof(str), "%S+%d(SP)", a->sym, a->offset); - break; - - case D_PARAM: - snprint(str, sizeof(str), "%S+%d(FP)", a->sym, a->offset); - break; - case D_CONST: if(a->reg != NREG) - sprint(str, "$%N(R%d)", a, a->reg); + sprint(str, "$%M(R%d)", a, a->reg); else - sprint(str, "$%N", a); + sprint(str, "$%M", a); break; case D_CONST2: @@ -210,3 +197,30 @@ Rconv(Fmt *fp) snprint(str, sizeof(str), "R%d", r); return fmtstrcpy(fp, str); } + +int +Mconv(Fmt *fp) +{ + char str[STRINGSZ]; + Addr *a; + + a = va_arg(fp->args, Addr*); + switch(a->name) { + case D_EXTERN: + snprint(str, sizeof(str), "%S+%d(SB)", a->sym, a->offset); + break; + + case D_STATIC: + snprint(str, sizeof(str), "%S<>+%d(SB)", a->sym, a->offset); + break; + + case D_AUTO: + snprint(str, sizeof(str), "%S+%d(SP)", a->sym, a->offset); + break; + + case D_PARAM: + snprint(str, sizeof(str), "%S+%d(FP)", a->sym, a->offset); + break; + } + return fmtstrcpy(fp, str); +} |