From c8ee0baaf8454bb3de143d9f8c7b261dd9447ff3 Mon Sep 17 00:00:00 2001 From: Nuno Cruces Date: Mon, 19 Jun 2023 23:04:02 +0100 Subject: [PATCH] compiler: test traps report correct line numbers (#1528) Signed-off-by: Nuno Cruces --- Makefile | 2 +- dwarf_test.go | 12 ++++++++++++ internal/testing/dwarftestdata/data.go | 3 +++ .../testing/dwarftestdata/testdata/zig-cc/main.c | 13 +++++++++++++ .../dwarftestdata/testdata/zig-cc/main.wasm | Bin 0 -> 2493 bytes 5 files changed, 29 insertions(+), 1 deletion(-) create mode 100644 internal/testing/dwarftestdata/testdata/zig-cc/main.c create mode 100755 internal/testing/dwarftestdata/testdata/zig-cc/main.wasm 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 0000000000000000000000000000000000000000..a3ab3c1904708a83bc4c5aa1e57a2352baf9d437 GIT binary patch literal 2493 zcmcImTX$2}5#Dp8qpL5n4H)8Fz5&}nz!JV+AlM2RVF;KQNCLSWj-(@5!nzzC31cV0 z4v+w$O+phwLqhw~zVt8TB`^I6U43r*+=o1N^`V_D*;(ycdFey7&e^kP_BXS?J^N_Z zDBCNMQi|Gq*JwjsQ}WP;(NDWpZLeT?WxMJvSL#-^=G-VatHa@Ht&*{vn}xbkzDQVH zi4+;+H>pZQrjJxtAWR#S+}!*@MT0#?pyZS)wKYQpEU#|Y>M9)hT{zrFvddiT{^sVU z+Ni@aOZJ)%B`J$P<``-H&r^1guQ@q)`Q zVmJEmVjsVh++g4(z-7ixu*-V|wGVr-&*grh+TWxqyAB}4gBalb7{vY*A4vN6AVN6k z^2@S%2ru(t9O5Ay#?UE_;{f6=CnVMpByhy#VTm=|iuD)8BjPzSqm-?%i+ozt1yRpn0cRHYtPprj-g9^j=UhII(>ROseY_~CxqwAn zaQSu2<8_yp1a%QhxajgFp?YaMHJ35PZ{RY&i8t_Oir-2G`3k0R#pSEQ>1|x)cknj9 zi+AwuDSi)c;XRiviFFMYuDNVWEV~u!uZq*+nbxUMoI&P*A)oZ7;%u^w9c1AYIfopw zr#Ub5mXXJ@#|4R1L;*#YuS=}!tynQ$L5@pU;WA1nFK|U*Ra8)Q*%g?(o#`5C$Q9X> z9qZ!J5P1W2+^F%YWcns@IHTt5Ab1%Z;5FGYrIL=;ExC*KcW=h zCfvepa`_Gk&AWtE+$E1cCV_rJxXJejBJa^6-zN$2fY9Ji2@i-L5@hm_&hsxc`j;C0 z8A0S{w7{Q}9O4UttbHNj9}(^oJ|{e)KK>O!o{z=+CE*U?OPPJ8@s9~#5gv>BHOaxh zrdEO!KOuPhYr+%aZwNB^Mz}xKF5eQK6229e@3hNzTP}Z7{7iiCjO2zoqh~1ibANak z{mm*M2lK&zZ^CGc-P1)v41OsLrWnm42M}oC;O~qERE%O~G}=z8RmJ>L<&^q8MdMi~ z-N;*oa<1}N%7)nWNDpOfQ?pG?DSe{tpCR1Tq`bN`Diu?{W1=+uOuuQ%{6{hS|E`SR zHZ;l?Fdj9R$$v|96}%|eGcsvH#x*3OBZNMcA^b>&nDU221Sqnq?Lnmm+qY=e>~h}m z^d?IZMMrwp+*u6z_k^~Ab~-KPow{hCqsR1h#CrQWy6AGRQpT9_bu9GE?wN@mjT*b9 zE*B-GRB?z77qV-6LGal(D61a4@d^6QRQiQ6jw-W{Ec`VIn$W zGGCLD~Y<})eGf(BD-qWa$3pS zb-QV8PSy+gp-e`pl3ggrGul;{8#*;R%t$1(90=J1#viDCz&P7J5codeTMy+1ed}T( zEzZ)Q*%tWTj08e)-SXt)GAH>Ds6j? z`rl5T*gCkaEGxORl)PeHT(~-KUAl5%-m+9?MZOf=ki80(GKRuw1WKy_rNJ zU#KrP((z2Cl#n!PsFp+NN~JFR?JDe1d%~F-&rLg->GAaN`e-G)oRzjl z(+PHy5~wsQnd?@y(oA$XBzGFupOSh&x(CY2Mb$hbq|?!`^A7n=Oi!ye&ByUPCp(m0 NBeR*;tN*`z{u@-W9v=Vz literal 0 HcmV?d00001