| ... | @@ -861,7 +861,9 @@ pub fn commitDeclState( | ... | @@ -861,7 +861,9 @@ pub fn commitDeclState( |
| 861 | }, | 861 | }, |
| 862 | .wasm => { | 862 | .wasm => { |
| 863 | const wasm_file = file.cast(File.Wasm).?; | 863 | const wasm_file = file.cast(File.Wasm).?; |
| 864 | writeDbgLineNopsBuffered(wasm_file.debug_line.items, src_fn.off, 0, &.{}, src_fn.len); | 864 | const segment_index = wasm_file.debug_line_index.?; |
| | 865 | const debug_line = wasm_file.atoms.get(segment_index).?.code; |
| | 866 | writeDbgLineNopsBuffered(debug_line.items, src_fn.off, 0, &.{}, src_fn.len); |
| 865 | }, | 867 | }, |
| 866 | else => unreachable, | 868 | else => unreachable, |
| 867 | } | 869 | } |
| ... | @@ -972,9 +974,9 @@ pub fn commitDeclState( | ... | @@ -972,9 +974,9 @@ pub fn commitDeclState( |
| 972 | }, | 974 | }, |
| 973 | .wasm => { | 975 | .wasm => { |
| 974 | const wasm_file = file.cast(File.Wasm).?; | 976 | const wasm_file = file.cast(File.Wasm).?; |
| 975 | const segment_index = try wasm_file.getDebugLineIndex(); | 977 | const segment_index = try wasm_file.getOrSetDebugIndex(&wasm_file.debug_line_index); |
| 976 | const segment = &wasm_file.segments.items[segment_index]; | 978 | const segment = &wasm_file.segments.items[segment_index]; |
| 977 | const debug_line = &wasm_file.debug_line; | 979 | const debug_line = &wasm_file.atoms.get(segment_index).?.code; |
| 978 | if (needed_size != segment.size) { | 980 | if (needed_size != segment.size) { |
| 979 | log.debug(" needed size does not equal allocated size: {d}", .{needed_size}); | 981 | log.debug(" needed size does not equal allocated size: {d}", .{needed_size}); |
| 980 | if (needed_size > segment.size) { | 982 | if (needed_size > segment.size) { |
| ... | @@ -1146,10 +1148,11 @@ fn updateDeclDebugInfoAllocation(self: *Dwarf, file: *File, atom: *Atom, len: u3 | ... | @@ -1146,10 +1148,11 @@ fn updateDeclDebugInfoAllocation(self: *Dwarf, file: *File, atom: *Atom, len: u3 |
| 1146 | }, | 1148 | }, |
| 1147 | .wasm => { | 1149 | .wasm => { |
| 1148 | const wasm_file = file.cast(File.Wasm).?; | 1150 | const wasm_file = file.cast(File.Wasm).?; |
| 1149 | const segment_index = try wasm_file.getDebugInfoIndex(); | 1151 | const segment_index = try wasm_file.getOrSetDebugIndex(&wasm_file.debug_info_index); |
| 1150 | const segment = &wasm_file.segments.items[segment_index]; | 1152 | const segment = &wasm_file.segments.items[segment_index]; |
| | 1153 | const debug_info = &wasm_file.atoms.get(segment_index).?.code; |
| 1151 | const offset = segment.offset + atom.off; | 1154 | const offset = segment.offset + atom.off; |
| 1152 | try writeDbgInfoNopsToArrayList(gpa, &wasm_file.debug_info, offset, 0, &.{0}, atom.len, false); | 1155 | try writeDbgInfoNopsToArrayList(gpa, debug_info, offset, 0, &.{0}, atom.len, false); |
| 1153 | }, | 1156 | }, |
| 1154 | else => unreachable, | 1157 | else => unreachable, |
| 1155 | } | 1158 | } |
| ... | @@ -1276,9 +1279,9 @@ fn writeDeclDebugInfo(self: *Dwarf, file: *File, atom: *Atom, dbg_info_buf: []co | ... | @@ -1276,9 +1279,9 @@ fn writeDeclDebugInfo(self: *Dwarf, file: *File, atom: *Atom, dbg_info_buf: []co |
| 1276 | }, | 1279 | }, |
| 1277 | .wasm => { | 1280 | .wasm => { |
| 1278 | const wasm_file = file.cast(File.Wasm).?; | 1281 | const wasm_file = file.cast(File.Wasm).?; |
| 1279 | const segment_index = try wasm_file.getDebugInfoIndex(); | 1282 | const segment_index = try wasm_file.getOrSetDebugIndex(&wasm_file.debug_info_index); |
| 1280 | const segment = &wasm_file.segments.items[segment_index]; | 1283 | const segment = &wasm_file.segments.items[segment_index]; |
| 1281 | const debug_info = &wasm_file.debug_info; | 1284 | const debug_info = &wasm_file.atoms.get(segment_index).?.code; |
| 1282 | if (needed_size != segment.size) { | 1285 | if (needed_size != segment.size) { |
| 1283 | log.debug(" needed size does not equal allocated size: {d}", .{needed_size}); | 1286 | log.debug(" needed size does not equal allocated size: {d}", .{needed_size}); |
| 1284 | if (needed_size > segment.size) { | 1287 | if (needed_size > segment.size) { |
| ... | @@ -1337,10 +1340,10 @@ pub fn updateDeclLineNumber(self: *Dwarf, file: *File, decl: *const Module.Decl) | ... | @@ -1337,10 +1340,10 @@ pub fn updateDeclLineNumber(self: *Dwarf, file: *File, decl: *const Module.Decl) |
| 1337 | }, | 1340 | }, |
| 1338 | .wasm => { | 1341 | .wasm => { |
| 1339 | const wasm_file = file.cast(File.Wasm).?; | 1342 | const wasm_file = file.cast(File.Wasm).?; |
| 1340 | const segment_index = wasm_file.getDebugLineIndex() catch unreachable; | 1343 | const segment_index = wasm_file.debug_line_index.?; |
| 1341 | const segment = wasm_file.segments.items[segment_index]; | 1344 | const segment = wasm_file.segments.items[segment_index]; |
| 1342 | const offset = segment.offset + decl.fn_link.wasm.src_fn.off + self.getRelocDbgLineOff(); | 1345 | const offset = segment.offset + decl.fn_link.wasm.src_fn.off + self.getRelocDbgLineOff(); |
| 1343 | mem.copy(u8, wasm_file.debug_line.items[offset..], &data); | 1346 | mem.copy(u8, wasm_file.atoms.get(segment_index).?.code.items[offset..], &data); |
| 1344 | }, | 1347 | }, |
| 1345 | else => unreachable, | 1348 | else => unreachable, |
| 1346 | } | 1349 | } |
| ... | @@ -1576,8 +1579,10 @@ pub fn writeDbgAbbrev(self: *Dwarf, file: *File) !void { | ... | @@ -1576,8 +1579,10 @@ pub fn writeDbgAbbrev(self: *Dwarf, file: *File) !void { |
| 1576 | }, | 1579 | }, |
| 1577 | .wasm => { | 1580 | .wasm => { |
| 1578 | const wasm_file = file.cast(File.Wasm).?; | 1581 | const wasm_file = file.cast(File.Wasm).?; |
| 1579 | try wasm_file.debug_abbrev.resize(wasm_file.base.allocator, needed_size); | 1582 | const segment_index = try wasm_file.getOrSetDebugIndex(&wasm_file.debug_abbrev_index); |
| 1580 | mem.copy(u8, wasm_file.debug_abbrev.items, &abbrev_buf); | 1583 | const debug_abbrev = &wasm_file.atoms.get(segment_index).?.code; |
| | 1584 | try debug_abbrev.resize(wasm_file.base.allocator, needed_size); |
| | 1585 | mem.copy(u8, debug_abbrev.items, &abbrev_buf); |
| 1581 | }, | 1586 | }, |
| 1582 | else => unreachable, | 1587 | else => unreachable, |
| 1583 | } | 1588 | } |
| ... | @@ -1687,7 +1692,9 @@ pub fn writeDbgInfoHeader(self: *Dwarf, file: *File, module: *Module, low_pc: u6 | ... | @@ -1687,7 +1692,9 @@ pub fn writeDbgInfoHeader(self: *Dwarf, file: *File, module: *Module, low_pc: u6 |
| 1687 | }, | 1692 | }, |
| 1688 | .wasm => { | 1693 | .wasm => { |
| 1689 | const wasm_file = file.cast(File.Wasm).?; | 1694 | const wasm_file = file.cast(File.Wasm).?; |
| 1690 | try writeDbgInfoNopsToArrayList(self.allocator, &wasm_file.debug_info, 0, 0, di_buf.items, jmp_amt, false); | 1695 | const segment_index = wasm_file.debug_info_index.?; |
| | 1696 | const debug_info = &wasm_file.atoms.get(segment_index).?.code; |
| | 1697 | try writeDbgInfoNopsToArrayList(self.allocator, debug_info, 0, 0, di_buf.items, jmp_amt, false); |
| 1691 | }, | 1698 | }, |
| 1692 | else => unreachable, | 1699 | else => unreachable, |
| 1693 | } | 1700 | } |
| ... | @@ -2016,8 +2023,10 @@ pub fn writeDbgAranges(self: *Dwarf, file: *File, addr: u64, size: u64) !void { | ... | @@ -2016,8 +2023,10 @@ pub fn writeDbgAranges(self: *Dwarf, file: *File, addr: u64, size: u64) !void { |
| 2016 | }, | 2023 | }, |
| 2017 | .wasm => { | 2024 | .wasm => { |
| 2018 | const wasm_file = file.cast(File.Wasm).?; | 2025 | const wasm_file = file.cast(File.Wasm).?; |
| 2019 | try wasm_file.debug_aranges.resize(wasm_file.base.allocator, needed_size); | 2026 | const segment_index = try wasm_file.getOrSetDebugIndex(&wasm_file.debug_ranges_index); |
| 2020 | mem.copy(u8, wasm_file.debug_aranges.items, di_buf.items); | 2027 | const debug_ranges = &wasm_file.atoms.get(segment_index).?.code; |
| | 2028 | try debug_ranges.resize(wasm_file.base.allocator, needed_size); |
| | 2029 | mem.copy(u8, debug_ranges.items, di_buf.items); |
| 2021 | }, | 2030 | }, |
| 2022 | else => unreachable, | 2031 | else => unreachable, |
| 2023 | } | 2032 | } |
| ... | @@ -2139,7 +2148,9 @@ pub fn writeDbgLineHeader(self: *Dwarf, file: *File, module: *Module) !void { | ... | @@ -2139,7 +2148,9 @@ pub fn writeDbgLineHeader(self: *Dwarf, file: *File, module: *Module) !void { |
| 2139 | }, | 2148 | }, |
| 2140 | .wasm => { | 2149 | .wasm => { |
| 2141 | const wasm_file = file.cast(File.Wasm).?; | 2150 | const wasm_file = file.cast(File.Wasm).?; |
| 2142 | writeDbgLineNopsBuffered(wasm_file.debug_line.items, 0, 0, di_buf.items, jmp_amt); | 2151 | const segment_index = wasm_file.debug_line_index.?; |
| | 2152 | const debug_line = wasm_file.atoms.get(segment_index).?.code; |
| | 2153 | writeDbgLineNopsBuffered(debug_line.items, 0, 0, di_buf.items, jmp_amt); |
| 2143 | }, | 2154 | }, |
| 2144 | else => unreachable, | 2155 | else => unreachable, |
| 2145 | } | 2156 | } |
| ... | @@ -2287,7 +2298,9 @@ pub fn flushModule(self: *Dwarf, file: *File, module: *Module) !void { | ... | @@ -2287,7 +2298,9 @@ pub fn flushModule(self: *Dwarf, file: *File, module: *Module) !void { |
| 2287 | }, | 2298 | }, |
| 2288 | .wasm => { | 2299 | .wasm => { |
| 2289 | const wasm_file = file.cast(File.Wasm).?; | 2300 | const wasm_file = file.cast(File.Wasm).?; |
| 2290 | mem.copy(u8, wasm_file.debug_info.items[reloc.atom.off + reloc.offset ..], &buf); | 2301 | const segment_index = wasm_file.debug_info_index.?; |
| | 2302 | const debug_info = wasm_file.atoms.get(segment_index).?.code; |
| | 2303 | mem.copy(u8, debug_info.items[reloc.atom.off + reloc.offset ..], &buf); |
| 2291 | }, | 2304 | }, |
| 2292 | else => unreachable, | 2305 | else => unreachable, |
| 2293 | } | 2306 | } |