| ... | ... | @@ -113,11 +113,14 @@ pub fn detectTTYConfig() TTY.Config { |
| 113 | 113 | /// TODO multithreaded awareness |
| 114 | 114 | pub fn dumpCurrentStackTrace(start_addr: ?usize) void { |
| 115 | 115 | nosuspend { |
| 116 | | const stderr = io.getStdErr().writer(); |
| 117 | 116 | if (comptime builtin.target.isWasm()) { |
| 118 | | stderr.print("Unable to dump stack trace: not implemented for Wasm\n", .{}) catch return; |
| 117 | if (native_os == .wasi) { |
| 118 | const stderr = io.getStdErr().writer(); |
| 119 | stderr.print("Unable to dump stack trace: not implemented for Wasm\n", .{}) catch return; |
| 120 | } |
| 119 | 121 | return; |
| 120 | 122 | } |
| 123 | const stderr = io.getStdErr().writer(); |
| 121 | 124 | if (builtin.strip_debug_info) { |
| 122 | 125 | stderr.print("Unable to dump stack trace: debug info stripped\n", .{}) catch return; |
| 123 | 126 | return; |
| ... | ... | @@ -138,6 +141,13 @@ pub fn dumpCurrentStackTrace(start_addr: ?usize) void { |
| 138 | 141 | /// TODO multithreaded awareness |
| 139 | 142 | pub fn dumpStackTraceFromBase(bp: usize, ip: usize) void { |
| 140 | 143 | nosuspend { |
| 144 | if (comptime builtin.target.isWasm()) { |
| 145 | if (native_os == .wasi) { |
| 146 | const stderr = io.getStdErr().writer(); |
| 147 | stderr.print("Unable to dump stack trace: not implemented for Wasm\n", .{}) catch return; |
| 148 | } |
| 149 | return; |
| 150 | } |
| 141 | 151 | const stderr = io.getStdErr().writer(); |
| 142 | 152 | if (builtin.strip_debug_info) { |
| 143 | 153 | stderr.print("Unable to dump stack trace: debug info stripped\n", .{}) catch return; |
| ... | ... | @@ -208,6 +218,13 @@ pub fn captureStackTrace(first_address: ?usize, stack_trace: *std.builtin.StackT |
| 208 | 218 | /// TODO multithreaded awareness |
| 209 | 219 | pub fn dumpStackTrace(stack_trace: std.builtin.StackTrace) void { |
| 210 | 220 | nosuspend { |
| 221 | if (comptime builtin.target.isWasm()) { |
| 222 | if (native_os == .wasi) { |
| 223 | const stderr = io.getStdErr().writer(); |
| 224 | stderr.print("Unable to dump stack trace: not implemented for Wasm\n", .{}) catch return; |
| 225 | } |
| 226 | return; |
| 227 | } |
| 211 | 228 | const stderr = io.getStdErr().writer(); |
| 212 | 229 | if (builtin.strip_debug_info) { |
| 213 | 230 | stderr.print("Unable to dump stack trace: debug info stripped\n", .{}) catch return; |
| ... | ... | @@ -1138,6 +1155,8 @@ pub const DebugInfo = struct { |
| 1138 | 1155 | return self.lookupModuleWin32(address); |
| 1139 | 1156 | } else if (native_os == .haiku) { |
| 1140 | 1157 | return self.lookupModuleHaiku(address); |
| 1158 | } else if (comptime builtin.target.isWasm()) { |
| 1159 | return self.lookupModuleWasm(address); |
| 1141 | 1160 | } else { |
| 1142 | 1161 | return self.lookupModuleDl(address); |
| 1143 | 1162 | } |
| ... | ... | @@ -1353,6 +1372,12 @@ pub const DebugInfo = struct { |
| 1353 | 1372 | _ = address; |
| 1354 | 1373 | @panic("TODO implement lookup module for Haiku"); |
| 1355 | 1374 | } |
| 1375 | |
| 1376 | fn lookupModuleWasm(self: *DebugInfo, address: usize) !*ModuleDebugInfo { |
| 1377 | _ = self; |
| 1378 | _ = address; |
| 1379 | @panic("TODO implement lookup module for Wasm"); |
| 1380 | } |
| 1356 | 1381 | }; |
| 1357 | 1382 | |
| 1358 | 1383 | pub const ModuleDebugInfo = switch (native_os) { |
| ... | ... | @@ -1632,6 +1657,13 @@ pub const ModuleDebugInfo = switch (native_os) { |
| 1632 | 1657 | return getSymbolFromDwarf(relocated_address, &self.dwarf); |
| 1633 | 1658 | } |
| 1634 | 1659 | }, |
| 1660 | .wasi => struct { |
| 1661 | pub fn getSymbolAtAddress(self: *@This(), address: usize) !SymbolInfo { |
| 1662 | _ = self; |
| 1663 | _ = address; |
| 1664 | return SymbolInfo{}; |
| 1665 | } |
| 1666 | }, |
| 1635 | 1667 | else => DW.DwarfInfo, |
| 1636 | 1668 | }; |
| 1637 | 1669 | |