summaryrefslogtreecommitdiff
path: root/utils/ql/obj.c
diff options
context:
space:
mode:
Diffstat (limited to 'utils/ql/obj.c')
-rw-r--r--utils/ql/obj.c35
1 files changed, 21 insertions, 14 deletions
diff --git a/utils/ql/obj.c b/utils/ql/obj.c
index a4e76c1c..adff8dfd 100644
--- a/utils/ql/obj.c
+++ b/utils/ql/obj.c
@@ -6,6 +6,9 @@
#define DEFAULT '9'
#endif
+#define OANAME 229 /* old ANAME */
+
+
char *noname = "<none>";
char symname[] = SYMDEF;
char thechar = 'q';
@@ -718,35 +721,39 @@ loop:
bloc = buf.xbuf;
goto loop;
}
- o = bloc[0]; /* as */
+ o = bloc[0] | (bloc[1] << 8); /* as */
+ if(bloc[0] == OANAME && o != OANAME) {
+ diag("%s: probably old .q file\n", pn);
+ errorexit();
+ }
if(o <= 0 || o >= ALAST) {
diag("%s: opcode out of range %d", pn, o);
- print(" probably not a .q file\n");
+ print(" probably not a .%c file\n", thechar);
errorexit();
}
if(o == ANAME || o == ASIGNAME) {
sig = 0;
if(o == ASIGNAME) {
- sig = bloc[1] | (bloc[2]<<8) | (bloc[3]<<16) | (bloc[4]<<24);
+ sig = bloc[2] | (bloc[3]<<8) | (bloc[4]<<16) | (bloc[5]<<24);
bloc += 4;
c -= 4;
}
- stop = memchr(&bloc[3], 0, bsize-&bloc[3]);
+ stop = memchr(&bloc[4], 0, bsize-&bloc[4]);
if(stop == 0){
bsize = readsome(f, buf.xbuf, bloc, bsize, c);
if(bsize == 0)
goto eof;
bloc = buf.xbuf;
- stop = memchr(&bloc[3], 0, bsize-&bloc[3]);
+ stop = memchr(&bloc[4], 0, bsize-&bloc[4]);
if(stop == 0){
fprint(2, "%s: name too long\n", pn);
errorexit();
}
}
- v = bloc[1]; /* type */
- o = bloc[2]; /* sym */
- bloc += 3;
- c -= 3;
+ v = bloc[2]; /* type */
+ o = bloc[3]; /* sym */
+ bloc += 4;
+ c -= 4;
r = 0;
if(v == D_STATIC)
@@ -789,12 +796,12 @@ loop:
hunk += sizeof(Prog);
p->as = o;
- p->reg = bloc[1] & 0x3f;
- if(bloc[1] & 0x80)
+ p->reg = bloc[2] & 0x3f;
+ if(bloc[2] & 0x80)
p->mark = NOSCHED;
- p->line = bloc[2] | (bloc[3]<<8) | (bloc[4]<<16) | (bloc[5]<<24);
- r = zaddr(bloc+6, &p->from, h) + 6;
- if(bloc[1] & 0x40)
+ p->line = bloc[3] | (bloc[4]<<8) | (bloc[5]<<16) | (bloc[6]<<24);
+ r = zaddr(bloc+7, &p->from, h) + 7;
+ if(bloc[2] & 0x40)
r += zaddr(bloc+r, &p->from3, h);
else
p->from3 = zprg.from3;