aboutsummaryrefslogtreecommitdiff
path: root/src/liblink
diff options
context:
space:
mode:
authorRuss Cox <rsc@golang.org>2015-01-29 20:19:07 -0500
committerRuss Cox <rsc@golang.org>2015-02-03 18:23:05 +0000
commit2e5b065ac24912be82e7082eeb136afd18d9734b (patch)
tree9658f6b04dda8a9dd921bad95b2ca5adceb90f9b /src/liblink
parent3ac37c72ae56a229bdc75986a4071b29bd7298c8 (diff)
downloadgo-2e5b065ac24912be82e7082eeb136afd18d9734b.tar.xz
liblink: define fixed A-numbers for common instructions
This makes names like ANOP, ATEXT, AGLOBL, ACALL, AJMP, ARET available for use by architecture-independent processing passes. On arm and ppc64, the alternate names are now aliases for the official ones (ABL for ACALL, AB or ABR for AJMP, ARETURN for ARET). Change-Id: Id027771243795af2b3745199c645b6e1bedd7d18 Reviewed-on: https://go-review.googlesource.com/3577 Reviewed-by: Aram Hăvărneanu <aram@mgk.ro> Reviewed-by: Austin Clements <austin@google.com>
Diffstat (limited to 'src/liblink')
-rw-r--r--src/liblink/asm5.c16
-rw-r--r--src/liblink/asm6.c2
-rw-r--r--src/liblink/asm8.c20
-rw-r--r--src/liblink/asm9.c12
-rw-r--r--src/liblink/list9.c2
-rw-r--r--src/liblink/obj5.c27
-rw-r--r--src/liblink/obj6.c42
-rw-r--r--src/liblink/obj8.c27
-rw-r--r--src/liblink/obj9.c42
-rw-r--r--src/liblink/objfile.c16
-rw-r--r--src/liblink/pass.c6
-rw-r--r--src/liblink/pcln.c14
12 files changed, 44 insertions, 182 deletions
diff --git a/src/liblink/asm5.c b/src/liblink/asm5.c
index 9ae041eeb8..5be4a87d7d 100644
--- a/src/liblink/asm5.c
+++ b/src/liblink/asm5.c
@@ -2187,13 +2187,13 @@ if(0 /*debug['G']*/) print("%ux: %s: arm %d\n", (uint32)(p->pc), p->from.sym->na
o1 = oprrr(ctxt, p->as, p->scond);
o1 |= ((p->from.reg&15)<<0);
o1 |= ((FREGTMP&15)<<12);
- o2 = oprrr(ctxt, AMOVFW+AEND, p->scond);
+ o2 = oprrr(ctxt, AMOVFW+ALAST, p->scond);
o2 |= ((FREGTMP&15)<<16);
o2 |= ((p->to.reg&15)<<12);
break;
case 87: /* movwf reg,freg - fix-to-float */
// macro for movw reg,FTMP; movwf FTMP,freg
- o1 = oprrr(ctxt, AMOVWF+AEND, p->scond);
+ o1 = oprrr(ctxt, AMOVWF+ALAST, p->scond);
o1 |= ((p->from.reg&15)<<12);
o1 |= ((FREGTMP&15)<<16);
o2 = oprrr(ctxt, p->as, p->scond);
@@ -2201,17 +2201,17 @@ if(0 /*debug['G']*/) print("%ux: %s: arm %d\n", (uint32)(p->pc), p->from.sym->na
o2 |= ((p->to.reg&15)<<12);
break;
case 88: /* movw reg,freg */
- o1 = oprrr(ctxt, AMOVWF+AEND, p->scond);
+ o1 = oprrr(ctxt, AMOVWF+ALAST, p->scond);
o1 |= ((p->from.reg&15)<<12);
o1 |= ((p->to.reg&15)<<16);
break;
case 89: /* movw freg,reg */
- o1 = oprrr(ctxt, AMOVFW+AEND, p->scond);
+ o1 = oprrr(ctxt, AMOVFW+ALAST, p->scond);
o1 |= ((p->from.reg&15)<<16);
o1 |= ((p->to.reg&15)<<12);
break;
case 90: /* tst reg */
- o1 = oprrr(ctxt, ACMP+AEND, p->scond);
+ o1 = oprrr(ctxt, ACMP+ALAST, p->scond);
o1 |= (p->from.reg&15)<<16;
break;
case 91: /* ldrexd oreg,reg */
@@ -2416,11 +2416,11 @@ oprrr(Link *ctxt, int a, int sc)
return o | (0xe<<24) | (0xb<<20) | (8<<16) | (0xa<<8) | (4<<4) |
(1<<18) | (1<<8) | (1<<7); // toint, double, trunc
- case AMOVWF+AEND: // copy WtoF
+ case AMOVWF+ALAST: // copy WtoF
return o | (0xe<<24) | (0x0<<20) | (0xb<<8) | (1<<4);
- case AMOVFW+AEND: // copy FtoW
+ case AMOVFW+ALAST: // copy FtoW
return o | (0xe<<24) | (0x1<<20) | (0xb<<8) | (1<<4);
- case ACMP+AEND: // cmp imm
+ case ACMP+ALAST: // cmp imm
return o | (0x3<<24) | (0x5<<20);
case ACLZ:
diff --git a/src/liblink/asm6.c b/src/liblink/asm6.c
index b3a19dc9fb..bc66c0b9a8 100644
--- a/src/liblink/asm6.c
+++ b/src/liblink/asm6.c
@@ -990,7 +990,6 @@ static Optab optab[] =
{ AFXRSTOR64, ysvrs, Pw, {0x0f,0xae,(01),0x0f,0xae,(01)} },
{ AFXSAVE64, ysvrs, Pw, {0x0f,0xae,(00),0x0f,0xae,(00)} },
{ AGLOBL },
- { AHISTORY },
{ AHLT, ynone, Px, {0xf4} },
{ AIDIVB, ydivb, Pb, {0xf6,(07)} },
{ AIDIVL, ydivl, Px, {0xf7,(07)} },
@@ -1115,7 +1114,6 @@ static Optab optab[] =
{ AMULSD, yxm, Pf2, {0x59} },
{ AMULSS, yxm, Pf3, {0x59} },
{ AMULW, ydivl, Pe, {0xf7,(04)} },
- { ANAME },
{ ANEGB, yscond, Pb, {0xf6,(03)} },
{ ANEGL, yscond, Px, {0xf7,(03)} },
{ ANEGQ, yscond, Pw, {0xf7,(03)} },
diff --git a/src/liblink/asm8.c b/src/liblink/asm8.c
index c982ca98b7..1678958f2f 100644
--- a/src/liblink/asm8.c
+++ b/src/liblink/asm8.c
@@ -53,6 +53,8 @@ struct Optab
uchar op[13];
};
+static Optab* opindex[ALAST+1];
+
enum
{
Yxxx = 0,
@@ -675,7 +677,6 @@ static Optab optab[] =
{ ADIVW, ydivl, Pe, {0xf7,(06)} },
{ AENTER }, /* botch */
{ AGLOBL },
- { AHISTORY },
{ AHLT, ynone, Px, {0xf4} },
{ AIDIVB, ydivb, Pb, {0xf6,(07)} },
{ AIDIVL, ydivl, Px, {0xf7,(07)} },
@@ -748,7 +749,6 @@ static Optab optab[] =
{ AMULB, ydivb, Pb, {0xf6,(04)} },
{ AMULL, ydivl, Px, {0xf7,(04)} },
{ AMULW, ydivl, Pe, {0xf7,(04)} },
- { ANAME },
{ ANEGB, yscond, Px, {0xf6,(03)} },
{ ANEGL, yscond, Px, {0xf7,(03)} }, // TODO(rsc): yscond is wrong here.
{ ANEGW, yscond, Pe, {0xf7,(03)} }, // TODO(rsc): yscond is wrong here.
@@ -967,9 +967,6 @@ static Optab optab[] =
{ AFYL2X, ynone, Px, {0xd9, 0xf1} },
{ AFYL2XP1, ynone, Px, {0xd9, 0xf9} },
{ AEND },
- { ADYNT_ },
- { AINIT_ },
- { ASIGNAME },
{ ACMPXCHGB, yrb_mb, Pm, {0xb0} },
{ ACMPXCHGL, yrl_ml, Pm, {0xb1} },
{ ACMPXCHGW, yrl_ml, Pm, {0xb1} },
@@ -1379,11 +1376,14 @@ span8(Link *ctxt, LSym *s)
static void
instinit(void)
{
- int i;
+ int i, c;
- for(i=1; optab[i].as; i++)
- if(i != optab[i].as)
- sysfatal("phase error in optab: at %A found %A", i, optab[i].as);
+ for(i=1; optab[i].as; i++) {
+ c = optab[i].as;
+ if(opindex[c] != nil)
+ sysfatal("phase error in optab: %d (%A)", i, c);
+ opindex[c] = &optab[i];
+ }
for(i=0; i<Ymax; i++)
ycover[i*Ymax + i] = 1;
@@ -2198,7 +2198,7 @@ doasm(Link *ctxt, Prog *p)
ft = p->ft * Ymax;
tt = p->tt * Ymax;
- o = &optab[p->as];
+ o = opindex[p->as];
t = o->ytab;
if(t == 0) {
ctxt->diag("asmins: noproto %P", p);
diff --git a/src/liblink/asm9.c b/src/liblink/asm9.c
index f1c7625747..84aa14e7f5 100644
--- a/src/liblink/asm9.c
+++ b/src/liblink/asm9.c
@@ -1788,7 +1788,7 @@ asmout(Link *ctxt, Prog *p, Optab *o, uint32 *out)
r = p->to.reg;
if(p->as == AADD && (!r0iszero && p->reg == 0 || r0iszero && p->to.reg == 0))
ctxt->diag("literal operation on R0\n%P", p);
- o1 = AOP_IRR(opirr(ctxt, p->as+AEND), p->to.reg, r, v>>16);
+ o1 = AOP_IRR(opirr(ctxt, p->as+ALAST), p->to.reg, r, v>>16);
break;
case 22: /* add $lcon,r1,r2 ==> cau+or+add */ /* could do add/sub more efficiently */
@@ -2157,7 +2157,7 @@ asmout(Link *ctxt, Prog *p, Optab *o, uint32 *out)
r = p->reg;
if(r == 0)
r = p->to.reg;
- o1 = LOP_IRR(opirr(ctxt, p->as+AEND), p->to.reg, r, v>>16); /* oris, xoris, andis */
+ o1 = LOP_IRR(opirr(ctxt, p->as+ALAST), p->to.reg, r, v>>16); /* oris, xoris, andis */
break;
case 60: /* tw to,a,b */
@@ -2632,10 +2632,10 @@ opirr(Link *ctxt, int a)
case AADD: return OPVCC(14,0,0,0);
case AADDC: return OPVCC(12,0,0,0);
case AADDCCC: return OPVCC(13,0,0,0);
- case AADD+AEND: return OPVCC(15,0,0,0); /* ADDIS/CAU */
+ case AADD+ALAST: return OPVCC(15,0,0,0); /* ADDIS/CAU */
case AANDCC: return OPVCC(28,0,0,0);
- case AANDCC+AEND: return OPVCC(29,0,0,0); /* ANDIS./ANDIU. */
+ case AANDCC+ALAST: return OPVCC(29,0,0,0); /* ANDIS./ANDIU. */
case ABR: return OPVCC(18,0,0,0);
case ABL: return OPVCC(18,0,0,0) | 1;
@@ -2662,7 +2662,7 @@ opirr(Link *ctxt, int a)
case AMULLW: return OPVCC(7,0,0,0);
case AOR: return OPVCC(24,0,0,0);
- case AOR+AEND: return OPVCC(25,0,0,0); /* ORIS/ORIU */
+ case AOR+ALAST: return OPVCC(25,0,0,0); /* ORIS/ORIU */
case ARLWMI: return OPVCC(20,0,0,0); /* rlwimi */
case ARLWMICC: return OPVCC(20,0,0,1);
@@ -2692,7 +2692,7 @@ opirr(Link *ctxt, int a)
case ATD: return OPVCC(2,0,0,0);
case AXOR: return OPVCC(26,0,0,0); /* XORIL */
- case AXOR+AEND: return OPVCC(27,0,0,0); /* XORIU */
+ case AXOR+ALAST: return OPVCC(27,0,0,0); /* XORIU */
}
ctxt->diag("bad opcode i/r %A", a);
return 0;
diff --git a/src/liblink/list9.c b/src/liblink/list9.c
index 522d3305d8..1cd0cdb353 100644
--- a/src/liblink/list9.c
+++ b/src/liblink/list9.c
@@ -93,7 +93,7 @@ Pconv(Fmt *fp)
a = p->as;
str[0] = 0;
- if(a == ADATA || a == AINIT || a == ADYNT)
+ if(a == ADATA)
sprint(str, "%.5lld (%L) %A %D/%lld,%D", p->pc, p->lineno, a, &p->from, p->from3.offset, &p->to);
else if(a == ATEXT || a == AGLOBL) {
if(p->from3.offset != 0)
diff --git a/src/liblink/obj5.c b/src/liblink/obj5.c
index 2f7562d53b..805b2b921d 100644
--- a/src/liblink/obj5.c
+++ b/src/liblink/obj5.c
@@ -35,18 +35,6 @@
#include "../cmd/5l/5.out.h"
#include "../runtime/stack.h"
-static int
-isdata(Prog *p)
-{
- return p->as == ADATA || p->as == AGLOBL;
-}
-
-static int
-iscall(Prog *p)
-{
- return p->as == ABL;
-}
-
static void
progedit(Link *ctxt, Prog *p)
{
@@ -1010,24 +998,9 @@ LinkArch linkarm = {
.preprocess = preprocess,
.assemble = span5,
.follow = follow,
- .iscall = iscall,
- .isdata = isdata,
.progedit = progedit,
.minlc = 4,
.ptrsize = 4,
.regsize = 4,
-
- .ACALL = ABL,
- .ADATA = ADATA,
- .AEND = AEND,
- .AFUNCDATA = AFUNCDATA,
- .AGLOBL = AGLOBL,
- .AJMP = AB,
- .ANOP = ANOP,
- .APCDATA = APCDATA,
- .ARET = ARET,
- .ATEXT = ATEXT,
- .ATYPE = ATYPE,
- .AUSEFIELD = AUSEFIELD,
};
diff --git a/src/liblink/obj6.c b/src/liblink/obj6.c
index faa3de7f48..cddc723bf2 100644
--- a/src/liblink/obj6.c
+++ b/src/liblink/obj6.c
@@ -47,18 +47,6 @@ nopout(Prog *p)
p->to.name = 0;
}
-static int
-isdata(Prog *p)
-{
- return p->as == ADATA || p->as == AGLOBL;
-}
-
-static int
-iscall(Prog *p)
-{
- return p->as == ACALL;
-}
-
static void nacladdr(Link*, Prog*, Addr*);
static int
@@ -1047,26 +1035,11 @@ LinkArch linkamd64 = {
.preprocess = preprocess,
.assemble = span6,
.follow = follow,
- .iscall = iscall,
- .isdata = isdata,
.progedit = progedit,
.minlc = 1,
.ptrsize = 8,
.regsize = 8,
-
- .ACALL = ACALL,
- .ADATA = ADATA,
- .AEND = AEND,
- .AFUNCDATA = AFUNCDATA,
- .AGLOBL = AGLOBL,
- .AJMP = AJMP,
- .ANOP = ANOP,
- .APCDATA = APCDATA,
- .ARET = ARET,
- .ATEXT = ATEXT,
- .ATYPE = ATYPE,
- .AUSEFIELD = AUSEFIELD,
};
LinkArch linkamd64p32 = {
@@ -1077,24 +1050,9 @@ LinkArch linkamd64p32 = {
.preprocess = preprocess,
.assemble = span6,
.follow = follow,
- .iscall = iscall,
- .isdata = isdata,
.progedit = progedit,
.minlc = 1,
.ptrsize = 4,
.regsize = 8,
-
- .ACALL = ACALL,
- .ADATA = ADATA,
- .AEND = AEND,
- .AFUNCDATA = AFUNCDATA,
- .AGLOBL = AGLOBL,
- .AJMP = AJMP,
- .ANOP = ANOP,
- .APCDATA = APCDATA,
- .ARET = ARET,
- .ATEXT = ATEXT,
- .ATYPE = ATYPE,
- .AUSEFIELD = AUSEFIELD,
};
diff --git a/src/liblink/obj8.c b/src/liblink/obj8.c
index 6565489c1c..eb8e318762 100644
--- a/src/liblink/obj8.c
+++ b/src/liblink/obj8.c
@@ -36,18 +36,6 @@
#include "../runtime/stack.h"
static int
-isdata(Prog *p)
-{
- return p->as == ADATA || p->as == AGLOBL;
-}
-
-static int
-iscall(Prog *p)
-{
- return p->as == ACALL;
-}
-
-static int
canuselocaltls(Link *ctxt)
{
switch(ctxt->headtype) {
@@ -846,24 +834,9 @@ LinkArch link386 = {
.preprocess = preprocess,
.assemble = span8,
.follow = follow,
- .iscall = iscall,
- .isdata = isdata,
.progedit = progedit,
.minlc = 1,
.ptrsize = 4,
.regsize = 4,
-
- .ACALL = ACALL,
- .ADATA = ADATA,
- .AEND = AEND,
- .AFUNCDATA = AFUNCDATA,
- .AGLOBL = AGLOBL,
- .AJMP = AJMP,
- .ANOP = ANOP,
- .APCDATA = APCDATA,
- .ARET = ARET,
- .ATEXT = ATEXT,
- .ATYPE = ATYPE,
- .AUSEFIELD = AUSEFIELD,
};
diff --git a/src/liblink/obj9.c b/src/liblink/obj9.c
index 58b6cf72c8..450ed00306 100644
--- a/src/liblink/obj9.c
+++ b/src/liblink/obj9.c
@@ -35,18 +35,6 @@
#include "../runtime/stack.h"
#include "../runtime/funcdata.h"
-static int
-isdata(Prog *p)
-{
- return p->as == ADATA || p->as == AGLOBL;
-}
-
-static int
-iscall(Prog *p)
-{
- return p->as == ABL;
-}
-
static void
progedit(Link *ctxt, Prog *p)
{
@@ -933,26 +921,11 @@ LinkArch linkppc64 = {
.preprocess = preprocess,
.assemble = span9,
.follow = follow,
- .iscall = iscall,
- .isdata = isdata,
.progedit = progedit,
.minlc = 4,
.ptrsize = 8,
.regsize = 8,
-
- .ACALL = ABL,
- .ADATA = ADATA,
- .AEND = AEND,
- .AFUNCDATA = AFUNCDATA,
- .AGLOBL = AGLOBL,
- .AJMP = ABR,
- .ANOP = ANOP,
- .APCDATA = APCDATA,
- .ARET = ARETURN,
- .ATEXT = ATEXT,
- .ATYPE = ATYPE,
- .AUSEFIELD = AUSEFIELD,
};
LinkArch linkppc64le = {
@@ -963,24 +936,9 @@ LinkArch linkppc64le = {
.preprocess = preprocess,
.assemble = span9,
.follow = follow,
- .iscall = iscall,
- .isdata = isdata,
.progedit = progedit,
.minlc = 4,
.ptrsize = 8,
.regsize = 8,
-
- .ACALL = ABL,
- .ADATA = ADATA,
- .AEND = AEND,
- .AFUNCDATA = AFUNCDATA,
- .AGLOBL = AGLOBL,
- .AJMP = ABR,
- .ANOP = ANOP,
- .APCDATA = APCDATA,
- .ARET = ARETURN,
- .ATEXT = ATEXT,
- .ATYPE = ATYPE,
- .AUSEFIELD = AUSEFIELD,
};
diff --git a/src/liblink/objfile.c b/src/liblink/objfile.c
index 79a88db0bf..c01160af7e 100644
--- a/src/liblink/objfile.c
+++ b/src/liblink/objfile.c
@@ -147,10 +147,10 @@ writeobj(Link *ctxt, Biobuf *b)
plink = p->link;
p->link = nil;
- if(p->as == ctxt->arch->AEND)
+ if(p->as == AEND)
continue;
- if(p->as == ctxt->arch->ATYPE) {
+ if(p->as == ATYPE) {
// Assume each TYPE instruction describes
// a different local variable or parameter,
// so no dedup.
@@ -174,7 +174,7 @@ writeobj(Link *ctxt, Biobuf *b)
continue;
}
- if(p->as == ctxt->arch->AGLOBL) {
+ if(p->as == AGLOBL) {
s = p->from.sym;
if(s->seenglobl++)
print("duplicate %P\n", p);
@@ -200,12 +200,12 @@ writeobj(Link *ctxt, Biobuf *b)
continue;
}
- if(p->as == ctxt->arch->ADATA) {
+ if(p->as == ADATA) {
savedata(ctxt, p->from.sym, p, "<input>");
continue;
}
- if(p->as == ctxt->arch->ATEXT) {
+ if(p->as == ATEXT) {
s = p->from.sym;
if(s == nil) {
// func _() { }
@@ -235,7 +235,7 @@ writeobj(Link *ctxt, Biobuf *b)
continue;
}
- if(p->as == ctxt->arch->AFUNCDATA) {
+ if(p->as == AFUNCDATA) {
// Rewrite reference to go_args_stackmap(SB) to the Go-provided declaration information.
if(curtext == nil) // func _() {}
continue;
@@ -260,14 +260,14 @@ writeobj(Link *ctxt, Biobuf *b)
continue;
found = 0;
for(p = s->text; p != nil; p = p->link) {
- if(p->as == ctxt->arch->AFUNCDATA && p->from.type == TYPE_CONST && p->from.offset == FUNCDATA_ArgsPointerMaps) {
+ if(p->as == AFUNCDATA && p->from.type == TYPE_CONST && p->from.offset == FUNCDATA_ArgsPointerMaps) {
found = 1;
break;
}
}
if(!found) {
p = appendp(ctxt, s->text);
- p->as = ctxt->arch->AFUNCDATA;
+ p->as = AFUNCDATA;
p->from.type = TYPE_CONST;
p->from.offset = FUNCDATA_ArgsPointerMaps;
p->to.type = TYPE_MEM;
diff --git a/src/liblink/pass.c b/src/liblink/pass.c
index edc4d9ba73..a8bf76f4d6 100644
--- a/src/liblink/pass.c
+++ b/src/liblink/pass.c
@@ -40,8 +40,9 @@ brchain(Link *ctxt, Prog *p)
{
int i;
+ USED(ctxt);
for(i=0; i<20; i++) {
- if(p == nil || p->as != ctxt->arch->AJMP || p->pcond == nil)
+ if(p == nil || p->as != AJMP || p->pcond == nil)
return p;
p = p->pcond;
}
@@ -54,9 +55,10 @@ brloop(Link *ctxt, Prog *p)
int c;
Prog *q;
+ USED(ctxt);
c = 0;
for(q = p; q != nil; q = q->pcond) {
- if(q->as != ctxt->arch->AJMP || q->pcond == nil)
+ if(q->as != AJMP || q->pcond == nil)
break;
c++;
if(c >= 5000)
diff --git a/src/liblink/pcln.c b/src/liblink/pcln.c
index 0ab1581e1d..93e4127a1e 100644
--- a/src/liblink/pcln.c
+++ b/src/liblink/pcln.c
@@ -160,7 +160,7 @@ pctofileline(Link *ctxt, LSym *sym, int32 oldval, Prog *p, int32 phase, void *ar
USED(sym);
- if(p->as == ctxt->arch->ATEXT || p->as == ctxt->arch->ANOP || p->as == ctxt->arch->AUSEFIELD || p->lineno == 0 || phase == 1)
+ if(p->as == ATEXT || p->as == ANOP || p->as == AUSEFIELD || p->lineno == 0 || phase == 1)
return oldval;
linkgetline(ctxt, p->lineno, &f, &l);
if(f == nil) {
@@ -223,7 +223,7 @@ pctopcdata(Link *ctxt, LSym *sym, int32 oldval, Prog *p, int32 phase, void *arg)
{
USED(sym);
- if(phase == 0 || p->as != ctxt->arch->APCDATA || p->from.offset != (uintptr)arg)
+ if(phase == 0 || p->as != APCDATA || p->from.offset != (uintptr)arg)
return oldval;
if((int32)p->to.offset != p->to.offset) {
ctxt->diag("overflow in PCDATA instruction: %P", p);
@@ -248,9 +248,9 @@ linkpcln(Link *ctxt, LSym *cursym)
npcdata = 0;
nfuncdata = 0;
for(p = cursym->text; p != nil; p = p->link) {
- if(p->as == ctxt->arch->APCDATA && p->from.offset >= npcdata)
+ if(p->as == APCDATA && p->from.offset >= npcdata)
npcdata = p->from.offset+1;
- if(p->as == ctxt->arch->AFUNCDATA && p->from.offset >= nfuncdata)
+ if(p->as == AFUNCDATA && p->from.offset >= nfuncdata)
nfuncdata = p->from.offset+1;
}
@@ -269,12 +269,12 @@ linkpcln(Link *ctxt, LSym *cursym)
havepc = emallocz(n);
havefunc = havepc + (npcdata+31)/32;
for(p = cursym->text; p != nil; p = p->link) {
- if(p->as == ctxt->arch->AFUNCDATA) {
+ if(p->as == AFUNCDATA) {
if((havefunc[p->from.offset/32]>>(p->from.offset%32))&1)
ctxt->diag("multiple definitions for FUNCDATA $%d", p->from.offset);
havefunc[p->from.offset/32] |= 1<<(p->from.offset%32);
}
- if(p->as == ctxt->arch->APCDATA)
+ if(p->as == APCDATA)
havepc[p->from.offset/32] |= 1<<(p->from.offset%32);
}
// pcdata.
@@ -288,7 +288,7 @@ linkpcln(Link *ctxt, LSym *cursym)
// funcdata
if(nfuncdata > 0) {
for(p = cursym->text; p != nil; p = p->link) {
- if(p->as == ctxt->arch->AFUNCDATA) {
+ if(p->as == AFUNCDATA) {
i = p->from.offset;
pcln->funcdataoff[i] = p->to.offset;
if(p->to.type != TYPE_CONST) {