summaryrefslogtreecommitdiff
path: root/dis.c
diff options
context:
space:
mode:
authorMichael Pavone <pavone@retrodev.com>2014-10-11 22:18:49 -0700
committerMichael Pavone <pavone@retrodev.com>2014-10-11 22:18:49 -0700
commitfc252737d7e366c5eccbbc08dc028b6adcb7d793 (patch)
tree970494fd15f05765b940facd8ed3a2a5f31c04e9 /dis.c
parenta4b73b992202fb0d0b3da08cee05e0da16be7e59 (diff)
Better support for labels sourced from VOS program module header
Diffstat (limited to 'dis.c')
-rw-r--r--dis.c15
1 files changed, 14 insertions, 1 deletions
diff --git a/dis.c b/dis.c
index b7a11fc..06521dd 100644
--- a/dis.c
+++ b/dis.c
@@ -99,6 +99,19 @@ void check_reference(m68kinst * inst, m68k_op_info * op)
}
}
+int label_fun(char *dst, uint32_t address, void * data)
+{
+ tern_node * labels = data;
+ char key[MAX_INT_KEY_SIZE];
+ label_names * names = tern_find_ptr(labels, tern_int_key(address & 0xFFFFFF, key));
+ if (names)
+ {
+ return sprintf(dst, "%s", names->labels[0]);
+ } else {
+ return m68k_default_label_fun(dst, address, NULL);
+ }
+}
+
int main(int argc, char ** argv)
{
long filesize;
@@ -310,7 +323,7 @@ int main(int argc, char ** argv)
encoded = filebuf + (address-address_off)/2;
m68k_decode(encoded, &instbuf, address);
if (labels) {
- m68k_disasm_labels(&instbuf, disbuf);
+ m68k_disasm_labels(&instbuf, disbuf, label_fun, named_labels);
char keybuf[MAX_INT_KEY_SIZE];
label_names * names = tern_find_ptr(named_labels, tern_int_key(address, keybuf));
if (names)