From: Kai Backman Date: Fri, 26 Jun 2009 20:44:25 +0000 (-0700) Subject: Adding more debug output when 5l encounters a bad op X-Git-Tag: weekly.2009-11-06~1314 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=d6197d94b53d7ba7a299f5501dd29cfa2a76132d;p=gostls13.git Adding more debug output when 5l encounters a bad op combination. R=rsc APPROVED=rsc DELTA=69 (68 added, 0 deleted, 1 changed) OCL=30798 CL=30801 --- diff --git a/src/cmd/5l/l.h b/src/cmd/5l/l.h index 1237b7875b..685b9ce557 100644 --- a/src/cmd/5l/l.h +++ b/src/cmd/5l/l.h @@ -381,6 +381,7 @@ int Aconv(Fmt*); int Cconv(Fmt*); int Dconv(Fmt*); int Nconv(Fmt*); +int Oconv(Fmt*); int Pconv(Fmt*); int Sconv(Fmt*); int aclass(Adr*); diff --git a/src/cmd/5l/list.c b/src/cmd/5l/list.c index c3153938c1..a039c2d2b6 100644 --- a/src/cmd/5l/list.c +++ b/src/cmd/5l/list.c @@ -40,6 +40,7 @@ listinit(void) fmtinstall('P', Pconv); fmtinstall('S', Sconv); fmtinstall('N', Nconv); + fmtinstall('O', Oconv); // C_type constants } void @@ -372,6 +373,72 @@ Sconv(Fmt *fp) return fmtstrcpy(fp, str); } +static char* +cnames[] = +{ + [C_ADDR] = "C_ADDR", + [C_BCON] = "C_BCON", + [C_FAUTO] = "C_FAUTO", + [C_FCON] = "C_FCON", + [C_FCR] = "C_FCR", + [C_FEXT] = "C_FEXT", + [C_FOREG] = "C_FOREG", + [C_FREG] = "C_FREG", + [C_GACON] = "C_GACON", + [C_GBRA] = "C_GBRA", + [C_GCON] = "C_GCON", + [C_GOK] = "C_GOK", + [C_GOREG] = "C_GOREG", + [C_HAUTO] = "C_HAUTO", + [C_HEXT] = "C_HEXT", + [C_HFAUTO] = "C_HFAUTO", + [C_HFEXT] = "C_HFEXT", + [C_HFOREG] = "C_HFOREG", + [C_HOREG] = "C_HOREG", + [C_HREG] = "C_HREG", + [C_LACON] = "C_LACON", + [C_LAUTO] = "C_LAUTO", + [C_LBRA] = "C_LBRA", + [C_LCON] = "C_LCON", + [C_LECON] = "C_LECON", + [C_LEXT] = "C_LEXT", + [C_LOREG] = "C_LOREG", + [C_NCON] = "C_NCON", + [C_NONE] = "C_NONE", + [C_OFFPC] = "C_OFFPC", + [C_PC] = "C_PC", + [C_PSR] = "C_PSR", + [C_RACON] = "C_RACON", + [C_RCON] = "C_RCON", + [C_RECON] = "C_RECON", + [C_REG] = "C_REG", + [C_REGREG] = "C_REGREG", + [C_ROREG] = "C_ROREG", + [C_SACON] = "C_SACON", + [C_SAUTO] = "C_SAUTO", + [C_SBRA] = "C_SBRA", + [C_SCON] = "C_SCON", + [C_SEXT] = "C_SEXT", + [C_SHIFT] = "C_SHIFT", + [C_SOREG] = "C_SOREG", + [C_SP] = "C_SP", + [C_SROREG] = "C_SROREG" +}; + +int +Oconv(Fmt *fp) +{ + char buf[500]; + int o; + + o = va_arg(fp->args, int); + if(o < 0 || o >= nelem(cnames) || cnames[o] == nil) { + snprint(buf, sizeof(buf), "C_%d", o); + return fmtstrcpy(fp, buf); + } + return fmtstrcpy(fp, cnames[o]); +} + void diag(char *fmt, ...) { diff --git a/src/cmd/5l/span.c b/src/cmd/5l/span.c index bf7bd34a48..ef80bed9c3 100644 --- a/src/cmd/5l/span.c +++ b/src/cmd/5l/span.c @@ -864,7 +864,7 @@ oplook(Prog *p) p->optab = (o-otab)+1; return o; } - diag("illegal combination %A %d %d %d, %d %d", + diag("illegal combination %A %O %O %O, %d %d", p->as, a1, a2, a3, p->from.type, p->to.type); prasm(p); if(o == 0)