X-Git-Url: https://notaz.gp2x.de/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=tools%2Fcvt_data.c;h=e21ff96e0b724cfc9b45ab01cd3ba0a0a3e6bb98;hb=c0050df6e9d6eb81afacb0fa2d1910293dd2165e;hp=bf9840195c2da8fe2b130d0d4cd2632b833e7a6d;hpb=b545ba7c32f3413fe3d1af1ed1a9fcc9c59b9687;p=ia32rtools.git diff --git a/tools/cvt_data.c b/tools/cvt_data.c index bf98401..e21ff96 100644 --- a/tools/cvt_data.c +++ b/tools/cvt_data.c @@ -255,7 +255,8 @@ static void sprint_pp_short(const struct parsed_proto *pp, char *buf, snprintf(buf + l, buf_size - l, ")"); } -static void check_var(FILE *fhdr, const char *sym, const char *varname) +static const struct parsed_proto *check_var(FILE *fhdr, + const char *sym, const char *varname) { const struct parsed_proto *pp, *pp_sym; char fp_sym[256], fp_var[256]; @@ -265,11 +266,11 @@ static void check_var(FILE *fhdr, const char *sym, const char *varname) if (pp == NULL) { if (IS_START(varname, "sub_")) awarn("sub_ sym missing proto: '%s'\n", varname); - return; + return NULL; } if (!pp->is_func && !pp->is_fptr) - return; + return NULL; sprint_pp(pp, fp_var, sizeof(fp_var)); @@ -294,7 +295,7 @@ check_sym: g_func_sym_pp = NULL; pp_sym = proto_parse(fhdr, sym, 1); if (pp_sym == NULL) - return; + return pp; if (!pp_sym->is_fptr) aerr("func ptr data, but label '%s' !is_fptr\n", pp_sym->name); g_func_sym_pp = pp_sym; @@ -302,7 +303,7 @@ check_sym: else { pp_sym = g_func_sym_pp; if (pp_sym == NULL) - return; + return pp; } if (pp->argc != pp_sym->argc || pp->argc_reg != pp_sym->argc_reg) @@ -328,6 +329,8 @@ check_sym: anote("sym: %s\n", fp_sym); awarn("^ mismatch\n"); } + + return pp; } static int cmpstringp(const void *p1, const void *p2) @@ -616,7 +619,8 @@ int main(int argc, char *argv[]) } else if (is_label) { p = words[w]; - if (IS_START(p, "loc_") || strchr(p, '?') || strchr(p, '@') + if (IS_START(p, "loc_") || IS_START(p, "__imp") + || strchr(p, '?') || strchr(p, '@') || bsearch(&p, rlist, rlist_cnt, sizeof(rlist[0]), cmpstringp)) { @@ -624,8 +628,12 @@ int main(int argc, char *argv[]) snprintf(g_comment, sizeof(g_comment), "%s", p); } else { - check_var(fhdr, sym, p); - fprintf(fout, "_%s", p); + pp = check_var(fhdr, sym, p); + if (p[0] != '_') + fprintf(fout, (pp && pp->is_fastcall) ? "@" : "_"); + fprintf(fout, "%s", p); + if (pp && pp->is_stdcall && pp->argc > 0) + fprintf(fout, "@%d", pp->argc * 4); } } else {