Mercurial > hg > index.cgi
comparison lwasm/main.c @ 487:7fbf3171ca15
Add symbol table dump in assembly format
Add --symbol-dump[=FILE] which will dump the global symbol table in assembly
source format to stdout or to the FILE named by FILE.
author | William Astle <lost@l-w.ca> |
---|---|
date | Fri, 03 May 2019 19:44:02 -0600 |
parents | 469a130e7029 |
children | e10618b48e68 |
comparison
equal
deleted
inserted
replaced
486:e545196bf14f | 487:7fbf3171ca15 |
---|---|
47 { "format", 'f', "TYPE", 0, "Select output format: decb, basic, raw, obj, os9, ihex, srec"}, | 47 { "format", 'f', "TYPE", 0, "Select output format: decb, basic, raw, obj, os9, ihex, srec"}, |
48 { "list", 'l', "FILE", lw_cmdline_opt_optional, "Generate list [to FILE]"}, | 48 { "list", 'l', "FILE", lw_cmdline_opt_optional, "Generate list [to FILE]"}, |
49 { "list-nofiles", 0x104, 0, 0, "Omit file names in list output"}, | 49 { "list-nofiles", 0x104, 0, 0, "Omit file names in list output"}, |
50 { "symbols", 's', 0, lw_cmdline_opt_optional, "Generate symbol list in listing, no effect without --list"}, | 50 { "symbols", 's', 0, lw_cmdline_opt_optional, "Generate symbol list in listing, no effect without --list"}, |
51 { "symbols-nolocals", 0x103, 0, lw_cmdline_opt_optional, "Same as --symbols but with local labels ignored"}, | 51 { "symbols-nolocals", 0x103, 0, lw_cmdline_opt_optional, "Same as --symbols but with local labels ignored"}, |
52 { "symbol-dump", 0x106, "FILE", lw_cmdline_opt_optional, "Dump global symbol table in assembly format" }, | |
52 { "tabs", 't', "WIDTH", 0, "Set tab spacing in listing (0=don't expand tabs)" }, | 53 { "tabs", 't', "WIDTH", 0, "Set tab spacing in listing (0=don't expand tabs)" }, |
53 { "map", 'm', "FILE", lw_cmdline_opt_optional, "Generate map [to FILE]"}, | 54 { "map", 'm', "FILE", lw_cmdline_opt_optional, "Generate map [to FILE]"}, |
54 { "decb", 'b', 0, 0, "Generate DECB .bin format output, equivalent of --format=decb"}, | 55 { "decb", 'b', 0, 0, "Generate DECB .bin format output, equivalent of --format=decb"}, |
55 { "raw", 'r', 0, 0, "Generate raw binary format output, equivalent of --format=raw"}, | 56 { "raw", 'r', 0, 0, "Generate raw binary format output, equivalent of --format=raw"}, |
56 { "obj", 0x100, 0, 0, "Generate proprietary object file format for later linking, equivalent of --format=obj" }, | 57 { "obj", 0x100, 0, 0, "Generate proprietary object file format for later linking, equivalent of --format=obj" }, |
109 | 110 |
110 case 0x105: | 111 case 0x105: |
111 as -> flags |= FLAG_NOOUT; | 112 as -> flags |= FLAG_NOOUT; |
112 break; | 113 break; |
113 | 114 |
115 case 0x106: | |
116 if (as -> symbol_dump_file) | |
117 lw_free(as -> symbol_dump_file); | |
118 if (!arg) | |
119 as -> symbol_dump_file = lw_strdup("-"); | |
120 else | |
121 as -> symbol_dump_file = lw_strdup(arg); | |
122 as -> flags |= FLAG_SYMDUMP; | |
123 break; | |
124 | |
114 case 'd': | 125 case 'd': |
115 #ifdef LWASM_NODEBUG | 126 #ifdef LWASM_NODEBUG |
116 fprintf(stderr, "This binary has been built without debugging message support\n"); | 127 fprintf(stderr, "This binary has been built without debugging message support\n"); |
117 #else | 128 #else |
118 if (!arg) | 129 if (!arg) |
272 void do_pass4(asmstate_t *as); | 283 void do_pass4(asmstate_t *as); |
273 void do_pass5(asmstate_t *as); | 284 void do_pass5(asmstate_t *as); |
274 void do_pass6(asmstate_t *as); | 285 void do_pass6(asmstate_t *as); |
275 void do_pass7(asmstate_t *as); | 286 void do_pass7(asmstate_t *as); |
276 void do_output(asmstate_t *as); | 287 void do_output(asmstate_t *as); |
288 void do_symdump(asmstate_t *as); | |
277 void do_list(asmstate_t *as); | 289 void do_list(asmstate_t *as); |
278 void do_map(asmstate_t *as); | 290 void do_map(asmstate_t *as); |
279 lw_expr_t lwasm_evaluate_special(int t, void *ptr, void *priv); | 291 lw_expr_t lwasm_evaluate_special(int t, void *ptr, void *priv); |
280 lw_expr_t lwasm_evaluate_var(char *var, void *priv); | 292 lw_expr_t lwasm_evaluate_var(char *var, void *priv); |
281 lw_expr_t lwasm_parse_term(char **p, void *priv); | 293 lw_expr_t lwasm_parse_term(char **p, void *priv); |
388 if (asmstate.flags & FLAG_UNICORNS) | 400 if (asmstate.flags & FLAG_UNICORNS) |
389 { | 401 { |
390 debug_message(&asmstate, 50, "Invoking unicorns"); | 402 debug_message(&asmstate, 50, "Invoking unicorns"); |
391 lwasm_do_unicorns(&asmstate); | 403 lwasm_do_unicorns(&asmstate); |
392 } | 404 } |
405 do_symdump(&asmstate); | |
393 do_list(&asmstate); | 406 do_list(&asmstate); |
394 do_map(&asmstate); | 407 do_map(&asmstate); |
395 | 408 |
396 if (asmstate.testmode_errorcount > 0) exit(1); | 409 if (asmstate.testmode_errorcount > 0) exit(1); |
397 | 410 |