diff --git a/platforms/app/main.c b/platforms/app/main.c index 906ca88..1701cc8 100644 --- a/platforms/app/main.c +++ b/platforms/app/main.c @@ -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; diff --git a/source/m3_env.c b/source/m3_env.c index 01f60c2..25027bc 100644 --- a/source/m3_env.c +++ b/source/m3_env.c @@ -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: \n"); break; + case c_m3Type_none: fprintf (stderr, "Result: \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