From cac8f1e9cb124a1ab5ebcfddff381e3af19d83cf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Carl-Henrik=20Sk=C3=A5rstedt?= Date: Wed, 16 Dec 2015 22:19:25 -0800 Subject: [PATCH] Disassembler calling graph - graph command line option adds a calling graph to the disassembly file - graph+bra includes branches in the calling graph - re-evaluating separating code/data segments after the segments have been culled. - Added a c64kernal.lbl file that includes kernal calls --- bin/x65_win32.zip | Bin 99672 -> 102657 bytes bin/x65_x64.zip | Bin 124366 -> 127903 bytes disassembler/README.MD | 27 +++- disassembler/c64kernal.lbl | 158 ++++++++++++++++++++ disassembler/x65dsasm.cpp | 287 +++++++++++++++++++++++++++++++++++-- 5 files changed, 463 insertions(+), 9 deletions(-) create mode 100644 disassembler/c64kernal.lbl diff --git a/bin/x65_win32.zip b/bin/x65_win32.zip index e061aa0558d79d0f8256d770878254d22bb2c535..db22b1ee283c73b984dc8291b052a8e9e9514bba 100644 GIT binary patch delta 22770 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%0Dx!!*2h;0PaWgoMOD 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 && (refs[i].address+refs[i].size)<=(addr+bytes)) { + if (refs[i].address>=addr && (refs[i].address+refs[i].size)<=(addr+(int)bytes)) { unsigned char *p = mem + refs[i].address - addr; for (int l = 0; l=refs[curr_label].address) { + was_data = refs[curr_label].data != DT_CODE; + curr_label++; + } + if (curr_label==refs.size()) + break; + if (was_data || refs[curr_label].separator) { + int skip = refs[curr_label].address-addr; + if (skip>(int)bytes) + break; + bytes -= skip; + addr += skip; + mem += skip; + } else { + unsigned char op = *mem++; + int curr = addr; + bytes--; + addr++; + if (opcodes == a65816_ops) { + if (op == 0xe2) { // sep + if ((*mem)&0x20) acc_16 = false; + if ((*mem)&0x10) ind_16 = false; + } else if (op == 0xc2) { // rep + if ((*mem)&0x20) acc_16 = true; + if ((*mem)&0x10) ind_16 = true; + } + } + + bool not_valid = opcodes[op].mnemonic==mnm_inv || (!ill_wdc && opcodes[op].mnemonic>=mnm_wdc_and_illegal_instructions); + int arg_size = not_valid ? 0 : opcodes[op].arg_size;; + int mode = not_valid ? AM_NON : opcodes[op].addrMode; + switch (mode) { + case AM_IMM_DBL_A: + arg_size = acc_16 ? 2 : 1; + break; + case AM_IMM_DBL_I: + arg_size = ind_16 ? 2 : 1; + break; + } + + addr += arg_size; + mem += arg_size; + if (arg_size > (int)bytes) + break; + bytes -= arg_size; + + if (op == 0x00 || op == 0x60 || op == 0x40 || op == 0x6b || + ((op == 0x4c || op == 0x6c) && (prev_op!=0x4c && prev_op!=0x6c)) || + op == 0x6c || op == 0x7c || op == 0x5c || op == 0xdc) { // rts, rti, rtl or jmp + refs[curr_label].separator = true; + int skip = refs[curr_label+1].address-addr; + if (skip>(int)bytes) + break; + bytes -= skip; + addr += skip; + mem += skip; + } + } + } + + // re-check for code references to code being mislabeled bool adjusted_code_ref = true; while (adjusted_code_ref) { @@ -1859,8 +1931,9 @@ void GetReferences(unsigned char *mem, size_t bytes, bool acc_16, bool ind_16, i } } k = refs.begin(); + bool was_code = false; while (k!=refs.end()) { - if (k->data == DT_CODE && !k->label) { + if (k->data == DT_CODE && !k->label && (!was_code || k->separator)) { std::vector &links = *k->pRefs; bool definitely_code = false; for (std::vector::iterator l = links.begin(); l!=links.end(); ++l) { @@ -1873,6 +1946,7 @@ void GetReferences(unsigned char *mem, size_t bytes, bool acc_16, bool ind_16, i if (!definitely_code) k->data = DT_DATA; } + was_code = k->data == DT_CODE; ++k; } } @@ -1900,8 +1974,195 @@ bool IsReadOnlyInstruction(MNM_Base op_base) return false; } +struct call_ref { + int address; + int target; + int seg_addr; + int seg_trg; + bool recursed; + RefType type; +}; + +struct seg_call { + int first_call_in_seg; + int num_calls_in_seg; + int address; +}; + + +typedef std::vector call_vector; +typedef std::vector seg_lookup; + +static int _sortCalls(const void *A, const void *B) +{ + return ((const struct call_ref*)A)->address - ((const struct call_ref*)B)->address; +} + +static int _sortInclusiveCalls(const void *A, const void *B) +{ + return ((const int*)B)[1] - ((const int*)A)[1]; +} + +static int countCalls(const int curr_ref, const call_ref *pCalls, const int num_calls, const seg_call *pLookup, const int num_lookup, char *visited) +{ + visited[curr_ref>>3] |= 1<<(curr_ref&7); + int ret = 1; + for (int j = 0; j>3] & 1<<(next_ref&7))==0) + ret += countCalls(next_ref, pCalls, num_calls, pLookup, num_lookup, visited); + } + return ret; +} + +static strown<256> _lblName; + +static const char *aRefStr[] = { + "-", //RT_NONE, + "branch", //RT_BRANCH, // bne, etc. + "long branch", //RT_BRA_L, // brl + "jmp", //RT_JUMP, // jmp + "jsr", //RT_JSR, // jsr + "data", //RT_DATA, // lda $... + "zp", //RT_ZP, // using a zero page / direct page instruction +}; + +static void printCalls(const int curr_ref, const call_ref *pCalls, const int num_calls, const seg_call *pLookup, const int num_lookup, char *visited, char *included, char *prefix, RefType rtype, FILE *f) +{ + RefAddr &ra = refs[curr_ref]; + if (ra.label) + _lblName.copy(ra.label); + else + _lblName.sprintf("%s_%d", ra.local ? ".l" : (ra.data==DT_CODE ? "Code" : + (ra.address>=0 && ra.address<0x100 ? "zp" : "Data")), ra.number); + + fprintf(f, "%s" STRREF_FMT " ($%x) [%s]%s\n", prefix, STRREF_ARG(_lblName), pLookup[curr_ref].address, aRefStr[rtype], (visited[curr_ref>>3] & 1<<(curr_ref&7)) ? " ...":""); + if (visited[curr_ref>>3] & 1<<(curr_ref&7)) + return; + visited[curr_ref>>3] |= 1<<(curr_ref&7); + included[curr_ref>>3] |= 1<<(curr_ref&7); + strcpy(prefix+strlen(prefix), " "); + for (int j = 0; j>3] & 1<<(next_ref&7)) == 0) { + RefType next_type = pCalls[pLookup[curr_ref].first_call_in_seg + j].type; + printCalls(next_ref, pCalls, num_calls, pLookup, num_lookup, visited, included, prefix, next_type, f); + } + } + prefix[strlen(prefix)-2] = 0; +} + + + +void CallGraph(int start, int end, bool branches, FILE *f) +{ + call_vector calls; + calls.reserve(refs.size() * 5); + std::vector call_counts; + call_counts.reserve(refs.size()); + seg_lookup lookup; + lookup.reserve(refs.size()); + + + int g = 0; + DataType prevType = DT_DATA; + for (int i = 0; i<(int)refs.size(); ++i) { + if (refs[i].data == DT_CODE) { + if (!refs[i].local || prevType != DT_CODE) + g = i; + int addr0 = refs[g].address; + int addr1 = (i+1)<(int)refs.size() ? refs[i+1].address : end; + if (std::vector *pLinks = refs[i].pRefs) { + for (std::vector::iterator l = pLinks->begin(); l!=pLinks->end(); ++l) { + if (l->instr_addr>=addr0 && l->instr_addrtype == RT_JSR || l->type==RT_JUMP || (branches && (l->type == RT_BRANCH || l->type==RT_BRA_L))) && + l->instr_addr>=start && l->instr_addrinstr_addr; + c.target = refs[i].address; + c.seg_trg = g; + c.seg_addr = -1; + c.type = l->type; + int jg = 0; + for (int j = 0; j<(int)refs.size(); ++j) { + if (!j || !refs[j].local) + jg = j; + if (c.address>=refs[j].address && ((j+1)==refs.size() || c.address=0) + call_counts[calls[i].seg_addr]++; + if (seg>3]&(1<<(n&7))) == 0 && refs[n].data==DT_CODE && !refs[n].local) { + memset(visited, 0, call8s); + printCalls(n, &calls[0], (int)calls.size(), &lookup[0], (int)lookup.size(), visited, included, prefix, RT_NONE, f); + } + } + } + fprintf(f, ";\n; DISASSEMBLY\n;\n"); + free(subcalls); + free(visited); + free(included); + } +} + static const char spacing[] = " "; -void Disassemble(strref filename, unsigned char *mem, size_t bytes, bool acc_16, bool ind_16, int addr, bool ill_wdc, const dismnm *opcodes, bool src, int init_data, strref labels) +void Disassemble(strref filename, unsigned char *mem, size_t bytes, bool acc_16, bool ind_16, int addr, bool ill_wdc, bool graph, bool graph_branches, const dismnm *opcodes, bool src, int init_data, strref labels) { const char *spc = src ? "" : spacing; @@ -1929,6 +2190,9 @@ void Disassemble(strref filename, unsigned char *mem, size_t bytes, bool acc_16, int reseperate = -1; + if (graph) + CallGraph(addr, addr+(int)bytes, graph_branches, f); + while (bytes) { // Determine if current address is referenced from somewhere while (curr_label_index<(int)refs.size() && addr >= refs[curr_label_index].address) { @@ -2024,7 +2288,7 @@ void Disassemble(strref filename, unsigned char *mem, size_t bytes, bool acc_16, out.sprintf_append(" ; $%04x " STRREF_FMT "\n", a, STRREF_ARG(refs[lbl].comment)); } else { RefAddr &ra = refs[lbl]; - out.sprintf_append("%s%s_%d: ; $%04x" STRREF_FMT "\n", spc, + out.sprintf_append("%s%s_%d ; $%04x" STRREF_FMT "\n", spc, ra.local ? ".l" : (ra.data==DT_CODE ? "Code" : (ra.address>=0 && ra.address<0x100 ? "zp" : "Data")), ra.number, a, STRREF_ARG(ra.comment)); } @@ -2105,7 +2369,7 @@ void Disassemble(strref filename, unsigned char *mem, size_t bytes, bool acc_16, int reference = -1; separator = false; - if (op == 0x60 || op == 0x40 || op == 0x6b || + if (op == 0x00 || op == 0x60 || op == 0x40 || op == 0x6b || ((op == 0x4c || op == 0x6c) && mem[arg_size] != 0x4c && mem[arg_size] != 0x6c) || op == 0x6c || op == 0x7c || op == 0x5c || op == 0xdc) { // rts, rti, rtl or jmp separator = true; @@ -2310,6 +2574,8 @@ int main(int argc, char **argv) bool src = false; bool prg = false; bool ill_wdc = false; + bool graph = false; + bool graph_branches = false; const dismnm *opcodes = a6502_ops; strref labels; @@ -2332,7 +2598,12 @@ int main(int argc, char **argv) src = true; else if (var.same_str("prg")) prg = true; - else if (!arg) { + else if (var.same_str("graph")) + graph = true; + else if (var.same_str("graph+bra")) { + graph = true; + graph_branches = true; + } else if (!arg) { if (!bin) bin = argv[i]; else if (!out) @@ -2393,7 +2664,7 @@ int main(int argc, char **argv) size_t bytes = size - skip; if (end && bytes > size_t(end - skip)) bytes = size_t(end - skip); - Disassemble(out, mem + skip, bytes, acc_16, ind_16, addr, ill_wdc, opcodes, src, data, labels); + Disassemble(out, mem + skip, bytes, acc_16, ind_16, addr, ill_wdc, graph, graph_branches, opcodes, src, data, labels); } free(mem); }