ARM doesn't have the concept of scale, so I renamed the field
Addr.scale to Addr.flag to better reflect its true meaning.
R=rsc
CC=golang-dev
https://golang.org/cl/
5687044
Bputc(&obuf, a->type);
Bputc(&obuf, a->reg);
+ Bputc(&obuf, 0); // flag
Bputc(&obuf, s);
Bputc(&obuf, a->name);
switch(a->type) {
bp[0] = a->type;
bp[1] = a->reg;
- bp[2] = s;
- bp[3] = a->name;
- bp += 4;
+ bp[2] = 0; // flag
+ bp[3] = s;
+ bp[4] = a->name;
+ bp += 5;
switch(a->type) {
default:
diag(Z, "unknown type %d in zaddr", a->type);
uchar reg;
char pun;
uchar etype;
+ char flag;
};
#define A ((Addr*)0)
default:
Bputc(b, a->type);
Bputc(b, a->reg);
+ Bputc(b, a->flag);
Bputc(b, s);
Bputc(b, a->name);
}
p->to.type = D_CONST;
p->to.offset = width;
if(nam->readonly)
- p->from.scale = RODATA;
+ p->from.flag = RODATA;
if(nam->type != T && !haspointers(nam->type))
- p->from.scale |= NOPTR;
+ p->from.flag |= NOPTR;
}
void
p->to.offset = width;
if(dupok)
p->reg = DUPOK;
+ p->from.flag |= RODATA;
}
int
ElfStrRelPlt,
ElfStrPlt,
ElfStrNoteNetbsdIdent,
+ ElfStrNoPtrData,
NElfStr
};
elfstr[ElfStrEmpty] = addstring(shstrtab, "");
elfstr[ElfStrText] = addstring(shstrtab, ".text");
+ elfstr[ElfStrNoPtrData] = addstring(shstrtab, ".noptrdata");
elfstr[ElfStrData] = addstring(shstrtab, ".data");
elfstr[ElfStrBss] = addstring(shstrtab, ".bss");
if(HEADTYPE == Hnetbsd)
uchar index; // not used on arm, required by ld/go.c
char reg;
char name;
+ char flag;
int32 offset2; // argsize
char class;
Sym* gotype;
a->type = Bgetc(f);
a->reg = Bgetc(f);
+ a->flag = Bgetc(f);
c = Bgetc(f);
if(c < 0 || c > NSYM){
print("sym out of range: %d\n", c);
s->size = p->to.offset;
if(p->reg & DUPOK)
s->dupok = 1;
- if(p->from.scale & RODATA)
+ if(p->from.flag & RODATA)
s->type = SRODATA;
- else if(p->from.scale & NOPTR)
+ else if(p->from.flag & NOPTR)
s->type = SNOPTRDATA;
break;
long off;
a.type = Bgetc(bp); /* a.type */
- skip(bp,1); /* reg */
+ skip(bp,2); /* reg, flag */
a.sym = Bgetc(bp); /* sym index */
a.name = Bgetc(bp); /* sym type */
switch(a.type){