diff options
author | Kai Backman <kaib@golang.org> | 2009-07-06 06:36:25 -0700 |
---|---|---|
committer | Kai Backman <kaib@golang.org> | 2009-07-06 06:36:25 -0700 |
commit | 7e248806f36bd42a1db025ee808a4794dff88724 (patch) | |
tree | 32dd4b663e954ae04f993e770def0afe25ccfc57 | |
parent | f54bc7106c566b93745c9a7fec4de957df20db14 (diff) | |
download | golang-7e248806f36bd42a1db025ee808a4794dff88724.tar.gz |
fixed bug that cause -g to segfault
R=rsc
APPROVED=rsc
DELTA=48 (30 added, 16 deleted, 2 changed)
OCL=31152
CL=31187
-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); +} |