Commit 60826e0b authored by Anthony Martin's avatar Anthony Martin

cmd/6c, cmd/8c: fix print format for Prog

The FmtLong flag should only be used with the %D verb
when printing an ATEXT Prog. It was erroneously used
for every Prog except ADATA. This caused a preponderance
of exclamation points, "!!", in the assembly listings.

I also cleaned up the code so that the list.c files look
very similar. Now the real differences are easily spotted
with a simple diff.

R=golang-dev, rsc
CC=golang-dev
https://golang.org/cl/7128045
parent c8c8ab08
...@@ -93,7 +93,7 @@ Pconv(Fmt *fp) ...@@ -93,7 +93,7 @@ Pconv(Fmt *fp)
break; break;
default: default:
sprint(str, "(%L) %A %D,%lD", sprint(str, "(%L) %A %D,%D",
p->lineno, p->as, &p->from, &p->to); p->lineno, p->as, &p->from, &p->to);
break; break;
} }
...@@ -120,13 +120,12 @@ Dconv(Fmt *fp) ...@@ -120,13 +120,12 @@ Dconv(Fmt *fp)
i = a->type; i = a->type;
if(fp->flags & FmtLong) { if(fp->flags & FmtLong) {
if(i != D_CONST) { if(i == D_CONST)
sprint(str, "$%lld-%lld", a->offset&0xffffffffLL, a->offset>>32);
else {
// ATEXT dst is not constant // ATEXT dst is not constant
sprint(str, "!!%D", a); sprint(str, "!!%D", a);
goto brk;
} }
sprint(str, "$%lld-%lld", a->offset&0xffffffffLL,
(a->offset>>32)&0xffffffffLL);
goto brk; goto brk;
} }
...@@ -138,7 +137,6 @@ Dconv(Fmt *fp) ...@@ -138,7 +137,6 @@ Dconv(Fmt *fp)
goto brk; goto brk;
} }
switch(i) { switch(i) {
default: default:
if(a->offset) if(a->offset)
sprint(str, "$%lld,%R", a->offset, i); sprint(str, "$%lld,%R", a->offset, i);
...@@ -159,24 +157,21 @@ Dconv(Fmt *fp) ...@@ -159,24 +157,21 @@ Dconv(Fmt *fp)
break; break;
case D_STATIC: case D_STATIC:
sprint(str, "%s<>+%lld(SB)", a->sym->name, sprint(str, "%s<>+%lld(SB)", a->sym->name, a->offset);
a->offset);
break; break;
case D_AUTO: case D_AUTO:
if(a->sym) { if(a->sym)
sprint(str, "%s+%lld(SP)", a->sym->name, a->offset); sprint(str, "%s+%lld(SP)", a->sym->name, a->offset);
break; else
} sprint(str, "%lld(SP)", a->offset);
sprint(str, "%lld(SP)", a->offset);
break; break;
case D_PARAM: case D_PARAM:
if(a->sym) { if(a->sym)
sprint(str, "%s+%lld(FP)", a->sym->name, a->offset); sprint(str, "%s+%lld(FP)", a->sym->name, a->offset);
break; else
} sprint(str, "%lld(FP)", a->offset);
sprint(str, "%lld(FP)", a->offset);
break; break;
case D_CONST: case D_CONST:
...@@ -210,7 +205,7 @@ conv: ...@@ -210,7 +205,7 @@ conv:
char* regstr[] = char* regstr[] =
{ {
"AL", /* [D_AL] */ "AL", /* [D_AL] */
"CL", "CL",
"DL", "DL",
"BL", "BL",
...@@ -227,7 +222,7 @@ char* regstr[] = ...@@ -227,7 +222,7 @@ char* regstr[] =
"R14B", "R14B",
"R15B", "R15B",
"AX", /* [D_AX] */ "AX", /* [D_AX] */
"CX", "CX",
"DX", "DX",
"BX", "BX",
...@@ -249,7 +244,7 @@ char* regstr[] = ...@@ -249,7 +244,7 @@ char* regstr[] =
"DH", "DH",
"BH", "BH",
"F0", /* [D_F0] */ "F0", /* [D_F0] */
"F1", "F1",
"F2", "F2",
"F3", "F3",
...@@ -284,20 +279,20 @@ char* regstr[] = ...@@ -284,20 +279,20 @@ char* regstr[] =
"X14", "X14",
"X15", "X15",
"CS", /* [D_CS] */ "CS", /* [D_CS] */
"SS", "SS",
"DS", "DS",
"ES", "ES",
"FS", "FS",
"GS", "GS",
"GDTR", /* [D_GDTR] */ "GDTR", /* [D_GDTR] */
"IDTR", /* [D_IDTR] */ "IDTR", /* [D_IDTR] */
"LDTR", /* [D_LDTR] */ "LDTR", /* [D_LDTR] */
"MSW", /* [D_MSW] */ "MSW", /* [D_MSW] */
"TASK", /* [D_TASK] */ "TASK", /* [D_TASK] */
"CR0", /* [D_CR] */ "CR0", /* [D_CR] */
"CR1", "CR1",
"CR2", "CR2",
"CR3", "CR3",
...@@ -314,7 +309,7 @@ char* regstr[] = ...@@ -314,7 +309,7 @@ char* regstr[] =
"CR14", "CR14",
"CR15", "CR15",
"DR0", /* [D_DR] */ "DR0", /* [D_DR] */
"DR1", "DR1",
"DR2", "DR2",
"DR3", "DR3",
...@@ -323,7 +318,7 @@ char* regstr[] = ...@@ -323,7 +318,7 @@ char* regstr[] =
"DR6", "DR6",
"DR7", "DR7",
"TR0", /* [D_TR] */ "TR0", /* [D_TR] */
"TR1", "TR1",
"TR2", "TR2",
"TR3", "TR3",
...@@ -332,7 +327,7 @@ char* regstr[] = ...@@ -332,7 +327,7 @@ char* regstr[] =
"TR6", "TR6",
"TR7", "TR7",
"NONE", /* [D_NONE] */ "NONE", /* [D_NONE] */
}; };
int int
......
...@@ -93,7 +93,7 @@ Pconv(Fmt *fp) ...@@ -93,7 +93,7 @@ Pconv(Fmt *fp)
break; break;
default: default:
sprint(str, "(%L) %A %D,%lD", sprint(str, "(%L) %A %D,%D",
p->lineno, p->as, &p->from, &p->to); p->lineno, p->as, &p->from, &p->to);
break; break;
} }
...@@ -118,6 +118,17 @@ Dconv(Fmt *fp) ...@@ -118,6 +118,17 @@ Dconv(Fmt *fp)
a = va_arg(fp->args, Adr*); a = va_arg(fp->args, Adr*);
i = a->type; i = a->type;
if(fp->flags & FmtLong) {
if(i == D_CONST2)
sprint(str, "$%d-%d", a->offset, a->offset2);
else {
// ATEXT dst is not constant
sprint(str, "!!%D", a);
}
goto brk;
}
if(i >= D_INDIR) { if(i >= D_INDIR) {
if(a->offset) if(a->offset)
sprint(str, "%d(%R)", a->offset, i-D_INDIR); sprint(str, "%d(%R)", a->offset, i-D_INDIR);
...@@ -126,7 +137,6 @@ Dconv(Fmt *fp) ...@@ -126,7 +137,6 @@ Dconv(Fmt *fp)
goto brk; goto brk;
} }
switch(i) { switch(i) {
default: default:
if(a->offset) if(a->offset)
sprint(str, "$%d,%R", a->offset, i); sprint(str, "$%d,%R", a->offset, i);
...@@ -147,12 +157,14 @@ Dconv(Fmt *fp) ...@@ -147,12 +157,14 @@ Dconv(Fmt *fp)
break; break;
case D_STATIC: case D_STATIC:
sprint(str, "%s<>+%d(SB)", a->sym->name, sprint(str, "%s<>+%d(SB)", a->sym->name, a->offset);
a->offset);
break; break;
case D_AUTO: case D_AUTO:
sprint(str, "%s+%d(SP)", a->sym->name, a->offset); if(a->sym)
sprint(str, "%s+%d(SP)", a->sym->name, a->offset);
else
sprint(str, "%d(SP)", a->offset);
break; break;
case D_PARAM: case D_PARAM:
...@@ -167,7 +179,10 @@ Dconv(Fmt *fp) ...@@ -167,7 +179,10 @@ Dconv(Fmt *fp)
break; break;
case D_CONST2: case D_CONST2:
sprint(str, "$%d-%d", a->offset, a->offset2); if(!(fp->flags & FmtLong)) {
// D_CONST2 outside of ATEXT should not happen
sprint(str, "!!$%d-%d", a->offset, a->offset2);
}
break; break;
case D_FCONST: case D_FCONST:
...@@ -197,7 +212,7 @@ conv: ...@@ -197,7 +212,7 @@ conv:
char* regstr[] = char* regstr[] =
{ {
"AL", /*[D_AL]*/ "AL", /* [D_AL] */
"CL", "CL",
"DL", "DL",
"BL", "BL",
...@@ -206,7 +221,7 @@ char* regstr[] = ...@@ -206,7 +221,7 @@ char* regstr[] =
"DH", "DH",
"BH", "BH",
"AX", /*[D_AX]*/ "AX", /* [D_AX] */
"CX", "CX",
"DX", "DX",
"BX", "BX",
...@@ -215,7 +230,7 @@ char* regstr[] = ...@@ -215,7 +230,7 @@ char* regstr[] =
"SI", "SI",
"DI", "DI",
"F0", /*[D_F0]*/ "F0", /* [D_F0] */
"F1", "F1",
"F2", "F2",
"F3", "F3",
...@@ -224,20 +239,20 @@ char* regstr[] = ...@@ -224,20 +239,20 @@ char* regstr[] =
"F6", "F6",
"F7", "F7",
"CS", /*[D_CS]*/ "CS", /* [D_CS] */
"SS", "SS",
"DS", "DS",
"ES", "ES",
"FS", "FS",
"GS", "GS",
"GDTR", /*[D_GDTR]*/ "GDTR", /* [D_GDTR] */
"IDTR", /*[D_IDTR]*/ "IDTR", /* [D_IDTR] */
"LDTR", /*[D_LDTR]*/ "LDTR", /* [D_LDTR] */
"MSW", /*[D_MSW] */ "MSW", /* [D_MSW] */
"TASK", /*[D_TASK]*/ "TASK", /* [D_TASK] */
"CR0", /*[D_CR]*/ "CR0", /* [D_CR] */
"CR1", "CR1",
"CR2", "CR2",
"CR3", "CR3",
...@@ -246,7 +261,7 @@ char* regstr[] = ...@@ -246,7 +261,7 @@ char* regstr[] =
"CR6", "CR6",
"CR7", "CR7",
"DR0", /*[D_DR]*/ "DR0", /* [D_DR] */
"DR1", "DR1",
"DR2", "DR2",
"DR3", "DR3",
...@@ -255,7 +270,7 @@ char* regstr[] = ...@@ -255,7 +270,7 @@ char* regstr[] =
"DR6", "DR6",
"DR7", "DR7",
"TR0", /*[D_TR]*/ "TR0", /* [D_TR] */
"TR1", "TR1",
"TR2", "TR2",
"TR3", "TR3",
...@@ -264,7 +279,7 @@ char* regstr[] = ...@@ -264,7 +279,7 @@ char* regstr[] =
"TR6", "TR6",
"TR7", "TR7",
"X0", /*[D_X0]*/ "X0", /* [D_X0] */
"X1", "X1",
"X2", "X2",
"X3", "X3",
...@@ -273,7 +288,7 @@ char* regstr[] = ...@@ -273,7 +288,7 @@ char* regstr[] =
"X6", "X6",
"X7", "X7",
"NONE", /*[D_NONE]*/ "NONE", /* [D_NONE] */
}; };
int int
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment