+static void check_sym(FILE *fhdr, const char *name)
+{
+ const struct parsed_proto *pp;
+ char buf[256];
+ int i, l;
+
+ pp = proto_parse(fhdr, name, 1);
+ if (pp == NULL) {
+ if (IS_START(name, "sub_"))
+ aerr("sub_ sym missing proto: '%s'\n", name);
+ return;
+ }
+
+ if (!pp->is_func && !pp->is_fptr)
+ return;
+ if (pp->argc_reg == 0)
+ return;
+ if (pp->argc_reg == 1 && pp->argc_stack == 0
+ && IS(pp->arg[0].reg, "ecx"))
+ {
+ return;
+ }
+ if (pp->argc_reg == 2
+ && IS(pp->arg[0].reg, "ecx")
+ && IS(pp->arg[1].reg, "edx"))
+ {
+ return;
+ }
+ snprintf(buf, sizeof(buf), "%s %s(",
+ pp->ret_type.name, name);
+ l = strlen(buf);
+
+ for (i = 0; i < pp->argc_reg; i++) {
+ snprintf(buf + l, sizeof(buf) - l, "%s%s",
+ i == 0 ? "" : ", ", pp->arg[i].reg);
+ l = strlen(buf);
+ }
+ if (pp->argc_stack > 0) {
+ snprintf(buf + l, sizeof(buf) - l, ", {%d stack}", pp->argc_stack);
+ l = strlen(buf);
+ }
+ snprintf(buf + l, sizeof(buf) - l, ")");
+
+ aerr("unhandled reg call: %s\n", buf);
+}
+
+static int cmpstringp(const void *p1, const void *p2)
+{
+ return strcmp(*(char * const *)p1, *(char * const *)p2);
+}
+