From a7735f8a16d30ab7f8865c5cffa1f58fc6201b48 Mon Sep 17 00:00:00 2001 From: Kai Backman Date: Mon, 6 Jul 2009 06:36:25 -0700 Subject: [PATCH] fixed bug that cause -g to segfault R=rsc APPROVED=rsc DELTA=48 (30 added, 16 deleted, 2 changed) OCL=31152 CL=31187 --- src/cmd/5g/list.c | 50 ++++++++++++++++++++++++++++++----------------- 1 file changed, 32 insertions(+), 18 deletions(-) diff --git a/src/cmd/5g/list.c b/src/cmd/5g/list.c index 631015869f..4d9f35c3aa 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); +} -- 2.50.0