From b6df111cfdccff8a51f9a3669a96f373cad353f4 Mon Sep 17 00:00:00 2001 From: Volodymyr Shymanskyy Date: Tue, 26 Nov 2019 06:02:16 +0200 Subject: [PATCH] Add WASI printf test --- test/wasi/README.md | 15 +++++++++++++++ test/wasi/wasi_printf.c | 8 ++++++++ test/wasi/wasi_printf.wasm | Bin 0 -> 30926 bytes 3 files changed, 23 insertions(+) create mode 100644 test/wasi/README.md create mode 100644 test/wasi/wasi_printf.c create mode 100755 test/wasi/wasi_printf.wasm diff --git a/test/wasi/README.md b/test/wasi/README.md new file mode 100644 index 0000000..a71e309 --- /dev/null +++ b/test/wasi/README.md @@ -0,0 +1,15 @@ +## Compile + +```sh +wasicc -Oz wasi_printf.c -o wasi_printf.wasm + +# Disassemble: +wasm2wat wasi_printf.wasm -o wasi_printf.wat +``` + +## Run + +```sh +../../build/wasm3 wasi_printf.wasm _start +``` + diff --git a/test/wasi/wasi_printf.c b/test/wasi/wasi_printf.c new file mode 100644 index 0000000..e0a00a6 --- /dev/null +++ b/test/wasi/wasi_printf.c @@ -0,0 +1,8 @@ +#include +#include + +int main(int args, char* argv[]) { + //puts("Hello world!"); + printf("Hell%x w%d%s!\n", 0, 0, "rld"); + return 0; +} diff --git a/test/wasi/wasi_printf.wasm b/test/wasi/wasi_printf.wasm new file mode 100755 index 0000000000000000000000000000000000000000..33727717be5482017b218c734f32750d91e9293f GIT binary patch literal 30926 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