Include wasm filename as argv[0], move result prints to stderr

extensions
Volodymyr Shymanskyy 5 years ago
parent 2ee0433eab
commit 927377f44c

@ -55,9 +55,6 @@ M3Result repl_call (IM3Runtime runtime, const char* name, int argc, const char*
if (!strcmp(name, "main") || !strcmp(name, "_main")) {
return "passing arguments to libc main() not implemented";
}
// else if (!strcmp(name, "_start")) {
// return "passing arguments to wasi _start() not implemented";
// }
}
result = m3_CallWithArgs (func, argc, argv);
@ -176,7 +173,12 @@ int main (int i_argc, const char* i_argv[])
if (result) FATAL("m3_LinkLibC: %s", result);
if (argFunc and not argRepl) {
result = repl_call(runtime, argFunc, i_argc, i_argv);
if (!strcmp(argFunc, "_start")) {
// When passing args to WASI, include wasm filename as argv[0]
result = repl_call(runtime, argFunc, i_argc+1, i_argv-1);
} else {
result = repl_call(runtime, argFunc, i_argc, i_argv);
}
if (result) FATAL("repl_call: %s", result);
}
}
@ -209,24 +211,23 @@ int main (int i_argc, const char* i_argv[])
}
if (result) {
printf ("Error: %s", result);
fprintf (stderr, "Error: %s", result);
M3ErrorInfo info = m3_GetErrorInfo (runtime);
printf (" (%s)\n", info.message);
fprintf (stderr, " (%s)\n", info.message);
}
}
_onfatal:
if (result) {
printf ("Error: %s", result);
fprintf (stderr, "Error: %s", result);
if (runtime)
{
M3ErrorInfo info = m3_GetErrorInfo (runtime);
printf (" (%s)", info.message);
fprintf (stderr, " (%s)", info.message);
}
fprintf (stderr, "\n");
}
printf ("\n");
m3_FreeEnvironment (env);
return 0;

@ -584,30 +584,30 @@ _ ((M3Result)Call (i_function->compiled, stack, linearMemory, d_m3OpDefaul
#if d_m3LogOutput
switch (ftype->returnType) {
case c_m3Type_none: printf("Result: <Empty Stack>\n"); break;
case c_m3Type_none: fprintf (stderr, "Result: <Empty Stack>\n"); break;
#ifdef USE_HUMAN_FRIENDLY_ARGS
case c_m3Type_i32: printf("Result: %" PRIi32 "\n", *(i32*)(stack)); break;
case c_m3Type_i64: printf("Result: %" PRIi64 "\n", *(i64*)(stack)); break;
case c_m3Type_f32: printf("Result: %f\n", *(f32*)(stack)); break;
case c_m3Type_f64: printf("Result: %lf\n", *(f64*)(stack)); break;
case c_m3Type_i32: fprintf (stderr, "Result: %" PRIi32 "\n", *(i32*)(stack)); break;
case c_m3Type_i64: fprintf (stderr, "Result: %" PRIi64 "\n", *(i64*)(stack)); break;
case c_m3Type_f32: fprintf (stderr, "Result: %f\n", *(f32*)(stack)); break;
case c_m3Type_f64: fprintf (stderr, "Result: %lf\n", *(f64*)(stack)); break;
#else
case c_m3Type_i32: printf("Result: %u\n", *(u32*)(stack)); break;
case c_m3Type_i32: fprintf (stderr, "Result: %u\n", *(u32*)(stack)); break;
case c_m3Type_f32: {
union { u32 u; f32 f; } union32;
union32.f = * (f32 *)(stack);
printf("Result: %u\n", union32.u );
fprintf (stderr, "Result: %u\n", union32.u );
break;
}
case c_m3Type_i64:
case c_m3Type_f64:
printf("Result: %" PRIu64 "\n", *(u64*)(stack)); break;
fprintf (stderr, "Result: %" PRIu64 "\n", *(u64*)(stack)); break;
#endif // USE_HUMAN_FRIENDLY_ARGS
default: _throw("unknown return type");
}
#if d_m3LogNativeStack
size_t stackUsed = m3StackGetMax();
printf("Native stack used: %d\n", stackUsed);
fprintf (stderr, "Native stack used: %d\n", stackUsed);
#endif // d_m3LogNativeStack
#endif // d_m3LogOutput

Loading…
Cancel
Save