| ... | @@ -2306,15 +2306,19 @@ pub fn writeDbgLineHeader(self: *Dwarf, module: *Module) !void { | ... | @@ -2306,15 +2306,19 @@ pub fn writeDbgLineHeader(self: *Dwarf, module: *Module) !void { |
| 2306 | // not including the initial length itself. | 2306 | // not including the initial length itself. |
| 2307 | const after_init_len = di_buf.items.len + init_len_size; | 2307 | const after_init_len = di_buf.items.len + init_len_size; |
| 2308 | const init_len = dbg_line_prg_end - after_init_len; | 2308 | const init_len = dbg_line_prg_end - after_init_len; |
| 2309 | if (self.bin_file.tag == .macho) { | 2309 | |
| 2310 | mem.writeIntLittle(u32, di_buf.addManyAsArrayAssumeCapacity(4), @intCast(u32, init_len)); | 2310 | switch (self.bin_file.tag) { |
| 2311 | } else switch (self.ptr_width) { | 2311 | .macho => { |
| 2312 | .p32 => { | 2312 | mem.writeIntLittle(u32, di_buf.addManyAsArrayAssumeCapacity(4), @intCast(u32, init_len)); |
| 2313 | mem.writeInt(u32, di_buf.addManyAsArrayAssumeCapacity(4), @intCast(u32, init_len), target_endian); | | |
| 2314 | }, | 2313 | }, |
| 2315 | .p64 => { | 2314 | else => switch (self.ptr_width) { |
| 2316 | di_buf.appendNTimesAssumeCapacity(0xff, 4); | 2315 | .p32 => { |
| 2317 | mem.writeInt(u64, di_buf.addManyAsArrayAssumeCapacity(8), init_len, target_endian); | 2316 | mem.writeInt(u32, di_buf.addManyAsArrayAssumeCapacity(4), @intCast(u32, init_len), target_endian); |
| | 2317 | }, |
| | 2318 | .p64 => { |
| | 2319 | di_buf.appendNTimesAssumeCapacity(0xff, 4); |
| | 2320 | mem.writeInt(u64, di_buf.addManyAsArrayAssumeCapacity(8), init_len, target_endian); |
| | 2321 | }, |
| 2318 | }, | 2322 | }, |
| 2319 | } | 2323 | } |
| 2320 | | 2324 | |
| ... | @@ -2325,7 +2329,12 @@ pub fn writeDbgLineHeader(self: *Dwarf, module: *Module) !void { | ... | @@ -2325,7 +2329,12 @@ pub fn writeDbgLineHeader(self: *Dwarf, module: *Module) !void { |
| 2325 | // Therefore we rely on the NOP jump at the beginning of the Line Number Program for | 2329 | // Therefore we rely on the NOP jump at the beginning of the Line Number Program for |
| 2326 | // padding rather than this field. | 2330 | // padding rather than this field. |
| 2327 | const before_header_len = di_buf.items.len; | 2331 | const before_header_len = di_buf.items.len; |
| 2328 | di_buf.items.len += if (self.bin_file.tag == .macho) @sizeOf(u32) else ptr_width_bytes; // We will come back and write this. | 2332 | |
| | 2333 | di_buf.items.len += switch (self.bin_file.tag) { // We will come back and write this. |
| | 2334 | .macho => @sizeOf(u32), |
| | 2335 | else => ptr_width_bytes, |
| | 2336 | }; |
| | 2337 | |
| 2329 | const after_header_len = di_buf.items.len; | 2338 | const after_header_len = di_buf.items.len; |
| 2330 | | 2339 | |
| 2331 | const opcode_base = DW.LNS.set_isa + 1; | 2340 | const opcode_base = DW.LNS.set_isa + 1; |
| ... | @@ -2374,14 +2383,18 @@ pub fn writeDbgLineHeader(self: *Dwarf, module: *Module) !void { | ... | @@ -2374,14 +2383,18 @@ pub fn writeDbgLineHeader(self: *Dwarf, module: *Module) !void { |
| 2374 | di_buf.appendAssumeCapacity(0); // file names sentinel | 2383 | di_buf.appendAssumeCapacity(0); // file names sentinel |
| 2375 | | 2384 | |
| 2376 | const header_len = di_buf.items.len - after_header_len; | 2385 | const header_len = di_buf.items.len - after_header_len; |
| 2377 | if (self.bin_file.tag == .macho) { | 2386 | |
| 2378 | mem.writeIntLittle(u32, di_buf.items[before_header_len..][0..4], @intCast(u32, header_len)); | 2387 | switch (self.bin_file.tag) { |
| 2379 | } else switch (self.ptr_width) { | 2388 | .macho => { |
| 2380 | .p32 => { | 2389 | mem.writeIntLittle(u32, di_buf.items[before_header_len..][0..4], @intCast(u32, header_len)); |
| 2381 | mem.writeInt(u32, di_buf.items[before_header_len..][0..4], @intCast(u32, header_len), target_endian); | | |
| 2382 | }, | 2390 | }, |
| 2383 | .p64 => { | 2391 | else => switch (self.ptr_width) { |
| 2384 | mem.writeInt(u64, di_buf.items[before_header_len..][0..8], header_len, target_endian); | 2392 | .p32 => { |
| | 2393 | mem.writeInt(u32, di_buf.items[before_header_len..][0..4], @intCast(u32, header_len), target_endian); |
| | 2394 | }, |
| | 2395 | .p64 => { |
| | 2396 | mem.writeInt(u64, di_buf.items[before_header_len..][0..8], header_len, target_endian); |
| | 2397 | }, |
| 2385 | }, | 2398 | }, |
| 2386 | } | 2399 | } |
| 2387 | | 2400 | |