Mercurial > hg > index.cgi
diff lwasm/section.c @ 432:58cafa61ab40
Add support for undocumented custom module format (for LW)
Nothing to see here. Move along. These are not the droids you are looking
for.
author | William Astle <lost@l-w.ca> |
---|---|
date | Fri, 18 Nov 2016 21:25:43 -0700 |
parents | 8764142b3192 |
children | ed7b8f74087d |
line wrap: on
line diff
--- a/lwasm/section.c Wed Nov 16 19:36:16 2016 -0700 +++ b/lwasm/section.c Fri Nov 18 21:25:43 2016 -0700 @@ -35,7 +35,7 @@ char *opts = NULL; sectiontab_t *s; - if (as -> output_format != OUTPUT_OBJ) + if (as -> output_format != OUTPUT_OBJ && as -> output_format != OUTPUT_LWMOD) { lwasm_register_error(as, l, E_SECTION_TARGET); return; @@ -62,7 +62,7 @@ sn = lw_strndup(*p, p2 - *p); *p = p2; - if (**p == ',') + if (**p == ',' && as -> output_format != OUTPUT_LWMOD) { // have opts (*p)++; @@ -74,6 +74,20 @@ *p = p2; } + if (as -> output_format == OUTPUT_LWMOD) + { + for (p2 = sn; *p2; p2++) + *p2 = tolower(*p2); + + if (strcmp(sn, "bss") && strcmp(sn, "main") && strcmp(sn, "init") && strcmp(sn, "calls") && strcmp(sn, "modname")) + { + lwasm_register_error(as, l, E_SECTION_NAME); + lw_free(sn); + lw_free(opts); + return; + } + } + for (s = as -> sections; s; s = s -> next) { if (!strcmp(s -> name, sn)) @@ -90,6 +104,7 @@ s -> oblen = 0; s -> obsize = 0; s -> obytes = NULL; + s -> tbase = -1; s -> name = lw_strdup(sn); s -> offset = lw_expr_build(lw_expr_type_special, lwasm_expr_secbase, s); s -> flags = section_flag_none;