Commit 2193f7c4a2

Luuk de Gram <luuk@degram.dev>
2022-04-18 13:11:37
wasm: Add support for debug info
This implements basic DWARF output when building for the wasm target. Stacktraces, however, are currently not supported.
1 parent f8d2b87
Changed files (4)
lib/std/debug.zig
@@ -114,6 +114,10 @@ pub fn detectTTYConfig() TTY.Config {
 pub fn dumpCurrentStackTrace(start_addr: ?usize) void {
     nosuspend {
         const stderr = io.getStdErr().writer();
+        if (comptime builtin.target.isWasm()) {
+            stderr.print("Unable to dump stack trace: not implemented for Wasm\n", .{}) catch return;
+            return;
+        }
         if (builtin.strip_debug_info) {
             stderr.print("Unable to dump stack trace: debug info stripped\n", .{}) catch return;
             return;
src/stage1/codegen.cpp
@@ -2645,6 +2645,9 @@ static LLVMValueRef ir_render_save_err_ret_addr(CodeGen *g, Stage1Air *executabl
         Stage1AirInstSaveErrRetAddr *save_err_ret_addr_instruction)
 {
     assert(g->have_err_ret_tracing);
+    if ((target_is_wasm(g->zig_target) && g->zig_target->os != OsEmscripten) || target_is_bpf(g->zig_target)) {
+        return nullptr;
+    }
 
     LLVMValueRef return_err_fn = get_return_err_fn(g);
     bool is_llvm_alloca;
src/stage1/target.cpp
@@ -1000,7 +1000,7 @@ ZigLLVM_EnvironmentType target_default_abi(ZigLLVM_ArchType arch, Os os) {
 }
 
 bool target_has_debug_info(const ZigTarget *target) {
-    return !target_is_wasm(target);
+    return true;
 }
 
 bool target_long_double_is_f128(const ZigTarget *target) {
src/target.zig
@@ -455,7 +455,8 @@ pub fn classifyCompilerRtLibName(target: std.Target, name: []const u8) CompilerR
 }
 
 pub fn hasDebugInfo(target: std.Target) bool {
-    return !target.cpu.arch.isWasm();
+    _ = target;
+    return true;
 }
 
 pub fn defaultCompilerRtOptimizeMode(target: std.Target) std.builtin.Mode {