X-Git-Url: https://notaz.gp2x.de/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=tools%2Fcvt_data.c;h=2c5bbbf69a104f0576dd3e3a29ce1c5e6dc29f5b;hb=23fd0b111f4f6437346e1889099f7a5a7652a9d8;hp=044857bdbef22d761ee8247291915dbbb2ae4417;hpb=f0be238a6a7a2801edfb842a637b19bf91b245bd;p=ia32rtools.git diff --git a/tools/cvt_data.c b/tools/cvt_data.c index 044857b..2c5bbbf 100644 --- a/tools/cvt_data.c +++ b/tools/cvt_data.c @@ -1,3 +1,11 @@ +/* + * ia32rtools + * (C) notaz, 2013,2014 + * + * This work is licensed under the terms of 3-clause BSD license. + * See COPYING file in the top-level directory. + */ + #define _GNU_SOURCE #include #include @@ -138,7 +146,7 @@ static const char *type_name(enum dx_type type) case DXT_BYTE: return ".byte"; case DXT_WORD: - return ".word"; + return ".hword"; case DXT_DWORD: return ".long"; case DXT_QUAD: @@ -240,7 +248,6 @@ static const struct parsed_proto *check_var(FILE *fhdr, { const struct parsed_proto *pp, *pp_sym; char fp_sym[256], fp_var[256]; - int i, bad = 0; pp = proto_parse(fhdr, varname, 1); if (pp == NULL) { @@ -287,24 +294,7 @@ check_sym: return pp; } - if (pp->argc != pp_sym->argc || pp->argc_reg != pp_sym->argc_reg) - bad = 1; - else { - for (i = 0; i < pp->argc; i++) { - if ((pp->arg[i].reg != NULL) != (pp_sym->arg[i].reg != NULL)) { - bad = 1; - break; - } - if ((pp->arg[i].reg != NULL) - && !IS(pp->arg[i].reg, pp_sym->arg[i].reg)) - { - bad = 1; - break; - } - } - } - - if (bad) { + if (pp_cmp_func(pp, pp_sym)) { pp_print(fp_sym, sizeof(fp_sym), pp_sym); anote("var: %s\n", fp_var); anote("sym: %s\n", fp_sym); @@ -501,8 +491,18 @@ int main(int argc, char *argv[]) asmln++; p = sskip(line); - if (*p == 0 || *p == ';') + if (*p == 0) + continue; + + if (*p == ';') { + if (IS_START(p, ";org") && sscanf(p + 5, "%Xh", &i) == 1) { + // ;org is only seen at section start, so assume . addr 0 + i &= 0xfff; + if (i != 0) + fprintf(fout, "\t\t .skip 0x%x\n", i); + } continue; + } for (wordc = 0; wordc < ARRAY_SIZE(words); wordc++) { p = sskip(next_word_s(words[wordc], sizeof(words[0]), p));