diff --git a/Makefile b/Makefile index 05679428..9017abda 100644 --- a/Makefile +++ b/Makefile @@ -62,7 +62,7 @@ build.examples.tinygo: $(tinygo_sources) # We use zig to build C as it is easy to install and embeds a copy of zig-cc. # Note: Don't use "-Oz" as that breaks our wasi sock example. -c_sources := imports/wasi_snapshot_preview1/example/testdata/zig-cc/cat.c imports/wasi_snapshot_preview1/testdata/zig-cc/wasi.c +c_sources := imports/wasi_snapshot_preview1/example/testdata/zig-cc/cat.c imports/wasi_snapshot_preview1/testdata/zig-cc/wasi.c internal/testing/dwarftestdata/testdata/zig-cc/main.c .PHONY: build.examples.zig-cc build.examples.zig-cc: $(c_sources) @for f in $^; do \ diff --git a/dwarf_test.go b/dwarf_test.go index c0ccc6e2..7fc0236f 100644 --- a/dwarf_test.go +++ b/dwarf_test.go @@ -88,6 +88,18 @@ wasm stack trace: ._start() 0x6a: /start.zig:609:37 (inlined) /start.zig:224:5`, + }, + { + name: "cc", + bin: dwarftestdata.ZigCCWasm, + exp: `module[] function[_start] failed: wasm error: unreachable +wasm stack trace: + .a() + 0x312: /main.c:7:18 + .__original_main() i32 + 0x47c: /main.c:11:3 + ._start() + ._start.command_export()`, }, { name: "rust", diff --git a/internal/testing/dwarftestdata/data.go b/internal/testing/dwarftestdata/data.go index 87d0f4b2..e90ac60d 100644 --- a/internal/testing/dwarftestdata/data.go +++ b/internal/testing/dwarftestdata/data.go @@ -19,6 +19,9 @@ var TinyGoWasm []byte //go:embed testdata/zig/main.wasm var ZigWasm []byte +//go:embed testdata/zig-cc/main.wasm +var ZigCCWasm []byte + // RustWasm comes with huge DWARF sections, so we do not check it in directly, // but instead xz-compressed one is. var RustWasm []byte diff --git a/internal/testing/dwarftestdata/testdata/zig-cc/main.c b/internal/testing/dwarftestdata/testdata/zig-cc/main.c new file mode 100644 index 00000000..d10e64ca --- /dev/null +++ b/internal/testing/dwarftestdata/testdata/zig-cc/main.c @@ -0,0 +1,13 @@ +volatile int base = 65536; + +void a() { + char str[16]; + str[4] = 'a'; + str[8] = 'b'; + str[12 + base] = 'c'; // This traps. +} + +int main() { + a(); + return 0; +} \ No newline at end of file diff --git a/internal/testing/dwarftestdata/testdata/zig-cc/main.wasm b/internal/testing/dwarftestdata/testdata/zig-cc/main.wasm new file mode 100755 index 00000000..a3ab3c19 Binary files /dev/null and b/internal/testing/dwarftestdata/testdata/zig-cc/main.wasm differ