From f7fa7933f9c3621bf2452c077f176bc0db7c0015 Mon Sep 17 00:00:00 2001 From: Kelvin Sherlock Date: Thu, 28 Sep 2017 16:31:37 -0400 Subject: [PATCH] better support for orca debugger symbol tables. --- DumpOBJ.cc | 44 +++++++++++++++++++++++++++++++++++++------- 1 file changed, 37 insertions(+), 7 deletions(-) diff --git a/DumpOBJ.cc b/DumpOBJ.cc index 50c6a87..18d46fc 100644 --- a/DumpOBJ.cc +++ b/DumpOBJ.cc @@ -2169,8 +2169,8 @@ void DisSTable (void) { long tlen; -int p1, p2, p3, p4; /* temps for computed parms */ - +int p1, p2; /* temps for computed parms */ +long subscript; if (!constant) { GetOpCode(); if (opcode && (opcode < OPALIGN)) @@ -2230,18 +2230,48 @@ if (constant >= 2) { Dis_DC(opcode); } } + subscript = 0; if (constant >= 4) { PutCTPC(); p1 = fgetc(input); p2 = fgetc(input); - p3 = fgetc(input); - p4 = fgetc(input); - printf(" DC H'%02X %02X %02X%02X'", p1, p2, p3, p4); - pc += 4; - count += 4; + + ReadInt(&subscript,2,input,numsex); + + printf(" DC H'%02X %02X'", p1, p2); /* flag, format */ + count += 2; + pc += 2; + PutCTPC(); + printf(" DC I2'%d'", (int)subscript); /* subscript */ + + + count += 2; + pc += 2; constant -= 4; + + // type 13 subscript is not a subscript. + if ((p2 & 0x3f) == 13) subscript = 0; + else subscript *= 12; } tlen -= 12; + if (constant >= subscript) { + long a, b, c; + + while (subscript) { + ReadInt(&a, 4, input, numsex); + ReadInt(&b, 4, input, numsex); + ReadInt(&c, 4, input, numsex); + + PutCTPC(); + printf(" DC I4'%d,%d,%d'", (int)a, (int)b, (int)c); /* subscript */ + + subscript -= 12; + constant -= 12; + count += 12; + tlen -= 12; + pc += 12; + } + } } } }