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