diff options
author | Mike Pavone <pavone@retrodev.com> | 2013-01-17 20:00:07 -0800 |
---|---|---|
committer | Mike Pavone <pavone@retrodev.com> | 2013-01-17 20:00:07 -0800 |
commit | caad3a07a1d56b9f455667fef9e63e3be62454f7 (patch) | |
tree | 37bc284fc35fb0f9f59e4c3c198353de5c8c068a /dis.c | |
parent | f6ebaabe9ee2703a6d12162310d058f9159ed770 (diff) |
Add instruction address logging to translator and support for reading an address log to the disassembler
Diffstat (limited to 'dis.c')
-rw-r--r-- | dis.c | 21 |
1 files changed, 21 insertions, 0 deletions
@@ -82,6 +82,7 @@ int main(int argc, char ** argv) deferred *def = NULL, *tmpd; for(uint8_t opt = 2; opt < argc; ++opt) { if (argv[opt][0] == '-') { + FILE * address_log; switch (argv[opt][1]) { case 'l': @@ -93,6 +94,26 @@ int main(int argc, char ** argv) case 'o': only = 1; break; + case 'f': + opt++; + if (opt >= argc) { + fputs("-f must be followed by a filename\n", stderr); + exit(1); + } + address_log = fopen(argv[opt], "r"); + if (!address_log) { + fprintf(stderr, "Failed to open %s for reading\n", argv[opt]); + exit(1); + } + while (fgets(disbuf, sizeof(disbuf), address_log)) { + if (disbuf[0]) { + uint32_t address = strtol(disbuf, NULL, 16); + if (address) { + def = defer(address, def); + reference(address); + } + } + } } } else { uint32_t address = strtol(argv[opt], NULL, 16); |