authorgravatar for kubkon@jakubkonka.comJakub Konka <kubkon@jakubkonka.com> 2024-03-25 23:47:42+01:00
committergravatar for kubkon@jakubkonka.comJakub Konka <kubkon@jakubkonka.com> 2024-03-25 23:48:39+01:00
logae1b2bfcada1ee3ab9656de6af997fbb673ecd24
treed2b1f31cc52a4a9763e588d5455aa7ffe7e4fc25
parent69e9fe4ede8ccc3a8792304ec76039fd57ba070a

dwarf+codegen: use appendNTimes instead of writer().writeByteNTimes


2 files changed, 31 insertions(+), 33 deletions(-)

src/codegen.zig+1-1
......@@ -517,7 +517,7 @@ pub fn generateSymbol(
517517 const abi_size = math.cast(usize, typed_value.ty.abiSize(mod)) orelse
518518 return error.Overflow;
519519 const current_pos = code.items.len;
520 try code.writer().writeByteNTimes(0, abi_size);
520 try code.appendNTimes(0, abi_size);
521521 var bits: u16 = 0;
522522
523523 for (struct_type.field_types.get(ip), 0..) |field_ty, index| {
src/link/Dwarf.zig+30-32
......@@ -187,17 +187,16 @@ pub const DeclState = struct {
187187 // DW.AT.name, DW.FORM.string
188188 try dbg_info_buffer.writer().print("{}\x00", .{ty.fmt(mod)});
189189 // DW.AT.member
190 try dbg_info_buffer.ensureUnusedCapacity(7);
190 try dbg_info_buffer.ensureUnusedCapacity(21);
191191 dbg_info_buffer.appendAssumeCapacity(@intFromEnum(AbbrevCode.struct_member));
192192 // DW.AT.name, DW.FORM.string
193193 dbg_info_buffer.appendSliceAssumeCapacity("maybe");
194194 dbg_info_buffer.appendAssumeCapacity(0);
195195 // DW.AT.type, DW.FORM.ref4
196196 var index = dbg_info_buffer.items.len;
197 try dbg_info_buffer.writer().writeByteNTimes(0, 4);
197 dbg_info_buffer.appendNTimesAssumeCapacity(0, 4);
198198 try self.addTypeRelocGlobal(atom_index, Type.bool, @intCast(index));
199199 // DW.AT.data_member_location, DW.FORM.udata
200 try dbg_info_buffer.ensureUnusedCapacity(6);
201200 dbg_info_buffer.appendAssumeCapacity(0);
202201 // DW.AT.member
203202 dbg_info_buffer.appendAssumeCapacity(@intFromEnum(AbbrevCode.struct_member));
......@@ -206,7 +205,7 @@ pub const DeclState = struct {
206205 dbg_info_buffer.appendAssumeCapacity(0);
207206 // DW.AT.type, DW.FORM.ref4
208207 index = dbg_info_buffer.items.len;
209 try dbg_info_buffer.writer().writeByteNTimes(0, 4);
208 dbg_info_buffer.appendNTimesAssumeCapacity(0, 4);
210209 try self.addTypeRelocGlobal(atom_index, payload_ty, @intCast(index));
211210 // DW.AT.data_member_location, DW.FORM.udata
212211 const offset = abi_size - payload_ty.abiSize(mod);
......@@ -228,18 +227,17 @@ pub const DeclState = struct {
228227 // DW.AT.name, DW.FORM.string
229228 try dbg_info_buffer.writer().print("{}\x00", .{ty.fmt(mod)});
230229 // DW.AT.member
231 try dbg_info_buffer.ensureUnusedCapacity(5);
230 try dbg_info_buffer.ensureUnusedCapacity(21);
232231 dbg_info_buffer.appendAssumeCapacity(@intFromEnum(AbbrevCode.struct_member));
233232 // DW.AT.name, DW.FORM.string
234233 dbg_info_buffer.appendSliceAssumeCapacity("ptr");
235234 dbg_info_buffer.appendAssumeCapacity(0);
236235 // DW.AT.type, DW.FORM.ref4
237236 var index = dbg_info_buffer.items.len;
238 try dbg_info_buffer.writer().writeByteNTimes(0, 4);
237 dbg_info_buffer.appendNTimesAssumeCapacity(0, 4);
239238 const ptr_ty = ty.slicePtrFieldType(mod);
240239 try self.addTypeRelocGlobal(atom_index, ptr_ty, @intCast(index));
241240 // DW.AT.data_member_location, DW.FORM.udata
242 try dbg_info_buffer.ensureUnusedCapacity(6);
243241 dbg_info_buffer.appendAssumeCapacity(0);
244242 // DW.AT.member
245243 dbg_info_buffer.appendAssumeCapacity(@intFromEnum(AbbrevCode.struct_member));
......@@ -248,19 +246,18 @@ pub const DeclState = struct {
248246 dbg_info_buffer.appendAssumeCapacity(0);
249247 // DW.AT.type, DW.FORM.ref4
250248 index = dbg_info_buffer.items.len;
251 try dbg_info_buffer.writer().writeByteNTimes(0, 4);
249 dbg_info_buffer.appendNTimesAssumeCapacity(0, 4);
252250 try self.addTypeRelocGlobal(atom_index, Type.usize, @intCast(index));
253251 // DW.AT.data_member_location, DW.FORM.udata
254 try dbg_info_buffer.ensureUnusedCapacity(2);
255252 dbg_info_buffer.appendAssumeCapacity(ptr_bytes);
256253 // DW.AT.structure_type delimit children
257254 dbg_info_buffer.appendAssumeCapacity(0);
258255 } else {
259 try dbg_info_buffer.ensureUnusedCapacity(5);
256 try dbg_info_buffer.ensureUnusedCapacity(9);
260257 dbg_info_buffer.appendAssumeCapacity(@intFromEnum(AbbrevCode.ptr_type));
261258 // DW.AT.type, DW.FORM.ref4
262259 const index = dbg_info_buffer.items.len;
263 try dbg_info_buffer.writer().writeByteNTimes(0, 4);
260 dbg_info_buffer.appendNTimesAssumeCapacity(0, 4);
264261 try self.addTypeRelocGlobal(atom_index, ty.childType(mod), @intCast(index));
265262 }
266263 },
......@@ -271,13 +268,14 @@ pub const DeclState = struct {
271268 try dbg_info_buffer.writer().print("{}\x00", .{ty.fmt(mod)});
272269 // DW.AT.type, DW.FORM.ref4
273270 var index = dbg_info_buffer.items.len;
274 try dbg_info_buffer.writer().writeByteNTimes(0, 4);
271 try dbg_info_buffer.ensureUnusedCapacity(9);
272 dbg_info_buffer.appendNTimesAssumeCapacity(0, 4);
275273 try self.addTypeRelocGlobal(atom_index, ty.childType(mod), @intCast(index));
276274 // DW.AT.subrange_type
277 try dbg_info_buffer.append(@intFromEnum(AbbrevCode.array_dim));
275 dbg_info_buffer.appendAssumeCapacity(@intFromEnum(AbbrevCode.array_dim));
278276 // DW.AT.type, DW.FORM.ref4
279277 index = dbg_info_buffer.items.len;
280 try dbg_info_buffer.writer().writeByteNTimes(0, 4);
278 dbg_info_buffer.appendNTimesAssumeCapacity(0, 4);
281279 try self.addTypeRelocGlobal(atom_index, Type.usize, @intCast(index));
282280 // DW.AT.count, DW.FORM.udata
283281 const len = ty.arrayLenIncludingSentinel(mod);
......@@ -304,7 +302,7 @@ pub const DeclState = struct {
304302 try dbg_info_buffer.writer().print("{d}\x00", .{field_index});
305303 // DW.AT.type, DW.FORM.ref4
306304 const index = dbg_info_buffer.items.len;
307 try dbg_info_buffer.writer().writeByteNTimes(0, 4);
305 try dbg_info_buffer.appendNTimes(0, 4);
308306 try self.addTypeRelocGlobal(atom_index, Type.fromInterned(field_ty), @intCast(index));
309307 // DW.AT.data_member_location, DW.FORM.udata
310308 const field_off = ty.structFieldOffset(field_index, mod);
......@@ -331,7 +329,7 @@ pub const DeclState = struct {
331329 try dbg_info_buffer.writer().print("{d}\x00", .{field_index});
332330 // DW.AT.type, DW.FORM.ref4
333331 const index = dbg_info_buffer.items.len;
334 try dbg_info_buffer.writer().writeByteNTimes(0, 4);
332 try dbg_info_buffer.appendNTimes(0, 4);
335333 try self.addTypeRelocGlobal(atom_index, Type.fromInterned(field_ty), @intCast(index));
336334 // DW.AT.data_member_location, DW.FORM.udata
337335 try leb128.writeULEB128(dbg_info_buffer.writer(), field_off);
......@@ -352,7 +350,7 @@ pub const DeclState = struct {
352350 dbg_info_buffer.appendAssumeCapacity(0);
353351 // DW.AT.type, DW.FORM.ref4
354352 const index = dbg_info_buffer.items.len;
355 try dbg_info_buffer.writer().writeByteNTimes(0, 4);
353 try dbg_info_buffer.appendNTimes(0, 4);
356354 try self.addTypeRelocGlobal(atom_index, Type.fromInterned(field_ty), @intCast(index));
357355 // DW.AT.data_member_location, DW.FORM.udata
358356 try leb128.writeULEB128(dbg_info_buffer.writer(), field_off);
......@@ -418,14 +416,14 @@ pub const DeclState = struct {
418416 try dbg_info_buffer.append(0);
419417
420418 // DW.AT.member
421 try dbg_info_buffer.ensureUnusedCapacity(9);
419 try dbg_info_buffer.ensureUnusedCapacity(13);
422420 dbg_info_buffer.appendAssumeCapacity(@intFromEnum(AbbrevCode.struct_member));
423421 // DW.AT.name, DW.FORM.string
424422 dbg_info_buffer.appendSliceAssumeCapacity("payload");
425423 dbg_info_buffer.appendAssumeCapacity(0);
426424 // DW.AT.type, DW.FORM.ref4
427425 const inner_union_index = dbg_info_buffer.items.len;
428 try dbg_info_buffer.writer().writeByteNTimes(0, 4);
426 dbg_info_buffer.appendNTimesAssumeCapacity(0, 4);
429427 try self.addTypeRelocLocal(atom_index, @intCast(inner_union_index), 5);
430428 // DW.AT.data_member_location, DW.FORM.udata
431429 try leb128.writeULEB128(dbg_info_buffer.writer(), payload_offset);
......@@ -452,7 +450,7 @@ pub const DeclState = struct {
452450 try dbg_info_buffer.append(0);
453451 // DW.AT.type, DW.FORM.ref4
454452 const index = dbg_info_buffer.items.len;
455 try dbg_info_buffer.writer().writeByteNTimes(0, 4);
453 try dbg_info_buffer.appendNTimes(0, 4);
456454 try self.addTypeRelocGlobal(atom_index, Type.fromInterned(field_ty), @intCast(index));
457455 // DW.AT.data_member_location, DW.FORM.udata
458456 try dbg_info_buffer.append(0);
......@@ -462,14 +460,14 @@ pub const DeclState = struct {
462460
463461 if (is_tagged) {
464462 // DW.AT.member
465 try dbg_info_buffer.ensureUnusedCapacity(5);
463 try dbg_info_buffer.ensureUnusedCapacity(9);
466464 dbg_info_buffer.appendAssumeCapacity(@intFromEnum(AbbrevCode.struct_member));
467465 // DW.AT.name, DW.FORM.string
468466 dbg_info_buffer.appendSliceAssumeCapacity("tag");
469467 dbg_info_buffer.appendAssumeCapacity(0);
470468 // DW.AT.type, DW.FORM.ref4
471469 const index = dbg_info_buffer.items.len;
472 try dbg_info_buffer.writer().writeByteNTimes(0, 4);
470 dbg_info_buffer.appendNTimesAssumeCapacity(0, 4);
473471 try self.addTypeRelocGlobal(atom_index, Type.fromInterned(union_obj.enum_tag_ty), @intCast(index));
474472 // DW.AT.data_member_location, DW.FORM.udata
475473 try leb128.writeULEB128(dbg_info_buffer.writer(), tag_offset);
......@@ -498,14 +496,14 @@ pub const DeclState = struct {
498496
499497 if (!payload_ty.isNoReturn(mod)) {
500498 // DW.AT.member
501 try dbg_info_buffer.ensureUnusedCapacity(7);
499 try dbg_info_buffer.ensureUnusedCapacity(11);
502500 dbg_info_buffer.appendAssumeCapacity(@intFromEnum(AbbrevCode.struct_member));
503501 // DW.AT.name, DW.FORM.string
504502 dbg_info_buffer.appendSliceAssumeCapacity("value");
505503 dbg_info_buffer.appendAssumeCapacity(0);
506504 // DW.AT.type, DW.FORM.ref4
507505 const index = dbg_info_buffer.items.len;
508 try dbg_info_buffer.writer().writeByteNTimes(0, 4);
506 dbg_info_buffer.appendNTimesAssumeCapacity(0, 4);
509507 try self.addTypeRelocGlobal(atom_index, payload_ty, @intCast(index));
510508 // DW.AT.data_member_location, DW.FORM.udata
511509 try leb128.writeULEB128(dbg_info_buffer.writer(), payload_off);
......@@ -513,14 +511,14 @@ pub const DeclState = struct {
513511
514512 {
515513 // DW.AT.member
516 try dbg_info_buffer.ensureUnusedCapacity(5);
514 try dbg_info_buffer.ensureUnusedCapacity(9);
517515 dbg_info_buffer.appendAssumeCapacity(@intFromEnum(AbbrevCode.struct_member));
518516 // DW.AT.name, DW.FORM.string
519517 dbg_info_buffer.appendSliceAssumeCapacity("err");
520518 dbg_info_buffer.appendAssumeCapacity(0);
521519 // DW.AT.type, DW.FORM.ref4
522520 const index = dbg_info_buffer.items.len;
523 try dbg_info_buffer.writer().writeByteNTimes(0, 4);
521 dbg_info_buffer.appendNTimesAssumeCapacity(0, 4);
524522 try self.addTypeRelocGlobal(atom_index, error_ty, @intCast(index));
525523 // DW.AT.data_member_location, DW.FORM.udata
526524 try leb128.writeULEB128(dbg_info_buffer.writer(), error_off);
......@@ -661,7 +659,7 @@ pub const DeclState = struct {
661659
662660 try dbg_info.ensureUnusedCapacity(5 + name_with_null.len);
663661 const index = dbg_info.items.len;
664 try dbg_info.writer().writeByteNTimes(0, 4);
662 dbg_info.appendNTimesAssumeCapacity(0, 4);
665663 try self.addTypeRelocGlobal(atom_index, ty, @intCast(index)); // DW.AT.type, DW.FORM.ref4
666664 dbg_info.appendSliceAssumeCapacity(name_with_null); // DW.AT.name, DW.FORM.string
667665 }
......@@ -877,7 +875,7 @@ pub const DeclState = struct {
877875
878876 try dbg_info.ensureUnusedCapacity(5 + name_with_null.len);
879877 const index = dbg_info.items.len;
880 try dbg_info.writer().writeByteNTimes(0, 4); // dw.at.type, dw.form.ref4
878 dbg_info.appendNTimesAssumeCapacity(0, 4); // dw.at.type, dw.form.ref4
881879 try self.addTypeRelocGlobal(atom_index, child_ty, @intCast(index));
882880 dbg_info.appendSliceAssumeCapacity(name_with_null); // DW.AT.name, DW.FORM.string
883881 }
......@@ -1133,7 +1131,7 @@ pub fn initDeclState(self: *Dwarf, mod: *Module, decl_index: InternPool.DeclInde
11331131 });
11341132 // This is the "relocatable" vaddr, corresponding to `code_buffer` index `0`.
11351133 assert(dbg_line_vaddr_reloc_index == dbg_line_buffer.items.len);
1136 dbg_line_buffer.writer().writeByteNTimes(0, ptr_width_bytes) catch unreachable;
1134 dbg_line_buffer.appendNTimesAssumeCapacity(0, ptr_width_bytes);
11371135
11381136 dbg_line_buffer.appendAssumeCapacity(DW.LNS.advance_line);
11391137 // This is the "relocatable" relative line offset from the previous function's end curly
......@@ -1171,12 +1169,12 @@ pub fn initDeclState(self: *Dwarf, mod: *Module, decl_index: InternPool.DeclInde
11711169 // "relocations" and have to be in this fixed place so that functions can be
11721170 // moved in virtual address space.
11731171 assert(dbg_info_low_pc_reloc_index == dbg_info_buffer.items.len);
1174 dbg_info_buffer.writer().writeByteNTimes(0, ptr_width_bytes) catch unreachable; // DW.AT.low_pc, DW.FORM.addr
1172 dbg_info_buffer.appendNTimesAssumeCapacity(0, ptr_width_bytes); // DW.AT.low_pc, DW.FORM.addr
11751173 assert(self.getRelocDbgInfoSubprogramHighPC() == dbg_info_buffer.items.len);
1176 dbg_info_buffer.writer().writeByteNTimes(0, 4) catch unreachable; // DW.AT.high_pc, DW.FORM.data4
1174 dbg_info_buffer.appendNTimesAssumeCapacity(0, 4); // DW.AT.high_pc, DW.FORM.data4
11771175 if (fn_ret_has_bits) {
11781176 try decl_state.addTypeRelocGlobal(di_atom_index, fn_ret_type, @intCast(dbg_info_buffer.items.len));
1179 dbg_info_buffer.writer().writeByteNTimes(0, 4) catch unreachable; // DW.AT.type, DW.FORM.ref4
1177 dbg_info_buffer.appendNTimesAssumeCapacity(0, 4); // DW.AT.type, DW.FORM.ref4
11801178 }
11811179 dbg_info_buffer.appendSliceAssumeCapacity(
11821180 decl_name_slice[0 .. decl_name_slice.len + 1],