if(debug['W'])
print(" ANAME %s\n", s->name);
+ if(o < 0 || o >= nelem(h)) {
+ fprint(2, "%s: mangled input file\n", pn);
+ errorexit();
+ }
h[o] = s;
if((v == D_EXTERN || v == D_STATIC) && s->type == 0)
s->type = SXREF;
void wputl(uint16);
void xdefine(char*, int, vlong);
void xfol(Prog*);
-void zaddr(Biobuf*, Adr*, Sym*[]);
+void zaddr(char*, Biobuf*, Adr*, Sym*[]);
void machseg(char*, vlong, vlong, vlong, vlong, uint32, uint32, uint32, uint32);
void machsymseg(uint32, uint32);
}
void
-zaddr(Biobuf *f, Adr *a, Sym *h[])
+zaddr(char *pn, Biobuf *f, Adr *a, Sym *h[])
{
- int t;
+ int o, t;
int32 l;
Sym *s;
Auto *u;
}
}
a->sym = S;
- if(t & T_SYM)
- a->sym = h[Bgetc(f)];
+ if(t & T_SYM) {
+ o = Bgetc(f);
+ if(o < 0 || o >= NSYM || h[o] == nil) {
+ fprint(2, "%s: mangled input file\n", pn);
+ errorexit();
+ }
+ a->sym = h[o];
+ }
a->type = D_NONE;
if(t & T_FCONST) {
a->ieee.l = Bget4(f);
if(debug['W'])
print(" ANAME %s\n", s->name);
+ if(o < 0 || o >= nelem(h)) {
+ fprint(2, "%s: mangled input file\n", pn);
+ errorexit();
+ }
h[o] = s;
if((v == D_EXTERN || v == D_STATIC) && s->type == 0)
s->type = SXREF;
p->mode = mode;
p->ft = 0;
p->tt = 0;
- zaddr(f, &p->from, h);
+ zaddr(pn, f, &p->from, h);
fromgotype = adrgotype;
- zaddr(f, &p->to, h);
+ zaddr(pn, f, &p->to, h);
if(debug['W'])
print("%P\n", p);
void wputl(ushort);
void xdefine(char*, int, int32);
void xfol(Prog*);
-void zaddr(Biobuf*, Adr*, Sym*[]);
+void zaddr(char*, Biobuf*, Adr*, Sym*[]);
uint32 machheadr(void);
vlong addaddr(Sym *s, Sym *t);
vlong addsize(Sym *s, Sym *t);
}
void
-zaddr(Biobuf *f, Adr *a, Sym *h[])
+zaddr(char *pn, Biobuf *f, Adr *a, Sym *h[])
{
- int t;
+ int o, t;
int32 l;
Sym *s;
Auto *u;
a->type = D_CONST2;
}
a->sym = S;
- if(t & T_SYM)
- a->sym = h[Bgetc(f)];
+ if(t & T_SYM) {
+ o = Bgetc(f);
+ if(o < 0 || o >= NSYM || h[o] == nil) {
+ fprint(2, "%s: mangled input file\n", pn);
+ errorexit();
+ }
+ a->sym = h[o];
+ }
if(t & T_FCONST) {
a->ieee.l = Bget4(f);
a->ieee.h = Bget4(f);
if(debug['W'])
print(" ANAME %s\n", s->name);
+ if(o < 0 || o >= nelem(h)) {
+ fprint(2, "%s: mangled input file\n", pn);
+ errorexit();
+ }
h[o] = s;
if((v == D_EXTERN || v == D_STATIC) && s->type == 0)
s->type = SXREF;
p->back = 2;
p->ft = 0;
p->tt = 0;
- zaddr(f, &p->from, h);
+ zaddr(pn, f, &p->from, h);
fromgotype = adrgotype;
- zaddr(f, &p->to, h);
+ zaddr(pn, f, &p->to, h);
if(debug['W'])
print("%P\n", p);
}
for(; i<histfrogp; i++) {
- snprint(comp, sizeof comp, histfrog[i]->name+1);
+ snprint(comp, sizeof comp, "%s", histfrog[i]->name+1);
for(;;) {
p = strstr(comp, "$O");
if(p == 0)