Mercurial > hg-old > index.cgi
comparison lwasm/main.c @ 372:90de73ba0cac
Created a useful debug framework and adjusted lw_expr_print() to return a "static" dynamic string
author | lost@starbug |
---|---|
date | Thu, 22 Apr 2010 18:19:06 -0600 |
parents | 6b33faa21a0a |
children | d99322ef6f21 |
comparison
equal
deleted
inserted
replaced
371:9c24d9d485b9 | 372:90de73ba0cac |
---|---|
41 char *program_name; | 41 char *program_name; |
42 | 42 |
43 static struct argp_option options[] = | 43 static struct argp_option options[] = |
44 { | 44 { |
45 { "output", 'o', "FILE", 0, "Output to FILE"}, | 45 { "output", 'o', "FILE", 0, "Output to FILE"}, |
46 { "debug", 'd', 0, 0, "Set debug mode"}, | 46 { "debug", 'd', "LEVEL", OPTION_ARG_OPTIONAL, "Set debug mode"}, |
47 { "format", 'f', "TYPE", 0, "Select output format: decb, raw, obj, os9"}, | 47 { "format", 'f', "TYPE", 0, "Select output format: decb, raw, obj, os9"}, |
48 { "list", 'l', "FILE", OPTION_ARG_OPTIONAL, "Generate list [to FILE]"}, | 48 { "list", 'l', "FILE", OPTION_ARG_OPTIONAL, "Generate list [to FILE]"}, |
49 { "decb", 'b', 0, 0, "Generate DECB .bin format output, equivalent of --format=decb"}, | 49 { "decb", 'b', 0, 0, "Generate DECB .bin format output, equivalent of --format=decb"}, |
50 { "raw", 'r', 0, 0, "Generate raw binary format output, equivalent of --format=raw"}, | 50 { "raw", 'r', 0, 0, "Generate raw binary format output, equivalent of --format=raw"}, |
51 { "obj", 0x100, 0, 0, "Generate proprietary object file format for later linking, equivalent of --format=obj" }, | 51 { "obj", 0x100, 0, 0, "Generate proprietary object file format for later linking, equivalent of --format=obj" }, |
73 lw_free(as -> output_file); | 73 lw_free(as -> output_file); |
74 as -> output_file = lw_strdup(arg); | 74 as -> output_file = lw_strdup(arg); |
75 break; | 75 break; |
76 | 76 |
77 case 'd': | 77 case 'd': |
78 as -> debug_level++; | 78 if (!arg) |
79 as -> debug_level = 50; | |
80 else | |
81 as -> debug_level = atoi(arg); | |
79 break; | 82 break; |
80 | 83 |
81 case 'l': | 84 case 'l': |
82 if (as -> list_file) | 85 if (as -> list_file) |
83 lw_free(as -> list_file); | 86 lw_free(as -> list_file); |
188 { "finalize", do_pass6 }, | 191 { "finalize", do_pass6 }, |
189 { "emit", do_pass7 }, | 192 { "emit", do_pass7 }, |
190 { NULL, NULL } | 193 { NULL, NULL } |
191 }; | 194 }; |
192 | 195 |
193 extern void dump_state(asmstate_t *as, FILE *fp); | |
194 | 196 |
195 int main(int argc, char **argv) | 197 int main(int argc, char **argv) |
196 { | 198 { |
197 int passnum; | 199 int passnum; |
198 | 200 |
219 | 221 |
220 input_init(&asmstate); | 222 input_init(&asmstate); |
221 | 223 |
222 for (passnum = 0; passlist[passnum].fn; passnum++) | 224 for (passnum = 0; passlist[passnum].fn; passnum++) |
223 { | 225 { |
224 fprintf(stderr, "Doing pass %d (%s)\n", passnum, passlist[passnum].passname); | 226 debug_message(&asmstate, 50, "Doing pass %d (%s)\n", passnum, passlist[passnum].passname); |
225 (passlist[passnum].fn)(&asmstate); | 227 (passlist[passnum].fn)(&asmstate); |
226 fprintf(stderr, "After pass %d (%s):\n", passnum, passlist[passnum].passname); | 228 debug_message(&asmstate, 50, "After pass %d (%s)\n", passnum, passlist[passnum].passname); |
227 dump_state(&asmstate, stderr); | 229 dump_state(&asmstate); |
228 | 230 |
229 if (asmstate.errorcount > 0) | 231 if (asmstate.errorcount > 0) |
230 { | 232 { |
231 lwasm_show_errors(&asmstate); | 233 lwasm_show_errors(&asmstate); |
232 exit(1); | 234 exit(1); |