X-Git-Url: https://notaz.gp2x.de/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=tools%2Fmkbridge.c;h=29bdd9a55a708547c58d269fb284e68ac8fef7d8;hb=1fe8d40ebdb232ab6be27af1a3b94a2869cc3779;hp=01a8f56629d2bef4591496c781c54d7b4c229293;hpb=7637b6cc2bdfb7dc1d2c3c10097f1e6b4ad01e41;p=ia32rtools.git diff --git a/tools/mkbridge.c b/tools/mkbridge.c index 01a8f56..29bdd9a 100644 --- a/tools/mkbridge.c +++ b/tools/mkbridge.c @@ -12,9 +12,7 @@ #include "my_assert.h" #include "my_str.h" - -#define ARRAY_SIZE(x) (sizeof(x) / sizeof(x[0])) -#define IS(w, y) !strcmp(w, y) +#include "common.h" #include "protoparse.h" @@ -185,7 +183,21 @@ static void out_fromasm_x86(FILE *f, const char *sym, pp->is_fastcall ? "__fastcall" : (pp->is_stdcall ? "__stdcall" : "__cdecl")); if (ret64) - fprintf(f, " ret64"); + fprintf(f, " ret64"); + if (!pp->is_fastcall && pp->argc_reg != 0) + fprintf(f, " +reg"); + + if (pp->is_stdcall && !pp->is_fastcall && pp->argc_reg != 0 + && !IS_START(sym, "sub_") && !IS_START(sym, "f_")) + { + // alias for possible .def export + char sym2[256]; + + snprintf(sym2, sizeof(sym2), "_%s@%d", + sym, pp->argc * 4); + fprintf(f, "\n.global %s # for .def\n", sym2); + fprintf(f, "%s:", sym2); + } fprintf(f, "\n.global %s\n", sym); fprintf(f, "%s:\n", sym); @@ -318,7 +330,7 @@ int main(int argc, char *argv[]) my_assert_not(fout, NULL); fprintf(fout, ".text\n\n"); - fprintf(fout, "# to asm\n\n"); + fprintf(fout, "# C -> asm\n\n"); while (fgets(line, sizeof(line), fsyms_to)) { @@ -339,7 +351,7 @@ int main(int argc, char *argv[]) out_toasm_x86(fout, sym_noat, pp); } - fprintf(fout, "# from asm\n\n"); + fprintf(fout, "# asm -> C\n\n"); while (fgets(line, sizeof(line), fsyms_from)) {