Commit 72b4657053
Changed files (2)
src
link
test
behavior
src/link/Dwarf.zig
@@ -184,12 +184,14 @@ pub const DeclState = struct {
try dbg_info_buffer.append(@enumToInt(AbbrevKind.pad1));
},
.Bool => {
- try dbg_info_buffer.appendSlice(&[_]u8{
- @enumToInt(AbbrevKind.base_type),
- DW.ATE.boolean, // DW.AT.encoding , DW.FORM.data1
- 1, // DW.AT.byte_size, DW.FORM.data1
- 'b', 'o', 'o', 'l', 0, // DW.AT.name, DW.FORM.string
- });
+ try dbg_info_buffer.ensureUnusedCapacity(12);
+ dbg_info_buffer.appendAssumeCapacity(@enumToInt(AbbrevKind.base_type));
+ // DW.AT.encoding, DW.FORM.data1
+ dbg_info_buffer.appendAssumeCapacity(DW.ATE.boolean);
+ // DW.AT.byte_size, DW.FORM.udata
+ try leb128.writeULEB128(dbg_info_buffer.writer(), ty.abiSize(target));
+ // DW.AT.name, DW.FORM.string
+ try dbg_info_buffer.writer().print("{}\x00", .{ty.fmt(module)});
},
.Int => {
const info = ty.intInfo(target);
@@ -200,9 +202,9 @@ pub const DeclState = struct {
.signed => DW.ATE.signed,
.unsigned => DW.ATE.unsigned,
});
- // DW.AT.byte_size, DW.FORM.data1
- dbg_info_buffer.appendAssumeCapacity(@intCast(u8, ty.abiSize(target)));
- // DW.AT.name, DW.FORM.string
+ // DW.AT.byte_size, DW.FORM.udata
+ try leb128.writeULEB128(dbg_info_buffer.writer(), ty.abiSize(target));
+ // DW.AT.name, DW.FORM.string
try dbg_info_buffer.writer().print("{}\x00", .{ty.fmt(module)});
},
.Optional => {
@@ -211,9 +213,9 @@ pub const DeclState = struct {
dbg_info_buffer.appendAssumeCapacity(@enumToInt(AbbrevKind.base_type));
// DW.AT.encoding, DW.FORM.data1
dbg_info_buffer.appendAssumeCapacity(DW.ATE.address);
- // DW.AT.byte_size, DW.FORM.data1
- dbg_info_buffer.appendAssumeCapacity(@intCast(u8, ty.abiSize(target)));
- // DW.AT.name, DW.FORM.string
+ // DW.AT.byte_size, DW.FORM.udata
+ try leb128.writeULEB128(dbg_info_buffer.writer(), ty.abiSize(target));
+ // DW.AT.name, DW.FORM.string
try dbg_info_buffer.writer().print("{}\x00", .{ty.fmt(module)});
} else {
// Non-pointer optionals are structs: struct { .maybe = *, .val = * }
@@ -221,7 +223,7 @@ pub const DeclState = struct {
const payload_ty = ty.optionalChild(buf);
// DW.AT.structure_type
try dbg_info_buffer.append(@enumToInt(AbbrevKind.struct_type));
- // DW.AT.byte_size, DW.FORM.sdata
+ // DW.AT.byte_size, DW.FORM.udata
const abi_size = ty.abiSize(target);
try leb128.writeULEB128(dbg_info_buffer.writer(), abi_size);
// DW.AT.name, DW.FORM.string
@@ -236,7 +238,7 @@ pub const DeclState = struct {
var index = dbg_info_buffer.items.len;
try dbg_info_buffer.resize(index + 4);
try self.addTypeRelocGlobal(atom_index, Type.bool, @intCast(u32, index));
- // DW.AT.data_member_location, DW.FORM.sdata
+ // DW.AT.data_member_location, DW.FORM.udata
try dbg_info_buffer.ensureUnusedCapacity(6);
dbg_info_buffer.appendAssumeCapacity(0);
// DW.AT.member
@@ -248,7 +250,7 @@ pub const DeclState = struct {
index = dbg_info_buffer.items.len;
try dbg_info_buffer.resize(index + 4);
try self.addTypeRelocGlobal(atom_index, payload_ty, @intCast(u32, index));
- // DW.AT.data_member_location, DW.FORM.sdata
+ // DW.AT.data_member_location, DW.FORM.udata
const offset = abi_size - payload_ty.abiSize(target);
try leb128.writeULEB128(dbg_info_buffer.writer(), offset);
// DW.AT.structure_type delimit children
@@ -263,8 +265,8 @@ pub const DeclState = struct {
// DW.AT.structure_type
try dbg_info_buffer.ensureUnusedCapacity(2);
dbg_info_buffer.appendAssumeCapacity(@enumToInt(AbbrevKind.struct_type));
- // DW.AT.byte_size, DW.FORM.sdata
- dbg_info_buffer.appendAssumeCapacity(ptr_bytes * 2);
+ // DW.AT.byte_size, DW.FORM.udata
+ try leb128.writeULEB128(dbg_info_buffer.writer(), ty.abiSize(target));
// DW.AT.name, DW.FORM.string
try dbg_info_buffer.writer().print("{}\x00", .{ty.fmt(module)});
// DW.AT.member
@@ -279,7 +281,7 @@ pub const DeclState = struct {
var buf = try arena.create(Type.SlicePtrFieldTypeBuffer);
const ptr_ty = ty.slicePtrFieldType(buf);
try self.addTypeRelocGlobal(atom_index, ptr_ty, @intCast(u32, index));
- // DW.AT.data_member_location, DW.FORM.sdata
+ // DW.AT.data_member_location, DW.FORM.udata
try dbg_info_buffer.ensureUnusedCapacity(6);
dbg_info_buffer.appendAssumeCapacity(0);
// DW.AT.member
@@ -291,7 +293,7 @@ pub const DeclState = struct {
index = dbg_info_buffer.items.len;
try dbg_info_buffer.resize(index + 4);
try self.addTypeRelocGlobal(atom_index, Type.usize, @intCast(u32, index));
- // DW.AT.data_member_location, DW.FORM.sdata
+ // DW.AT.data_member_location, DW.FORM.udata
try dbg_info_buffer.ensureUnusedCapacity(2);
dbg_info_buffer.appendAssumeCapacity(ptr_bytes);
// DW.AT.structure_type delimit children
@@ -329,9 +331,8 @@ pub const DeclState = struct {
.Struct => blk: {
// DW.AT.structure_type
try dbg_info_buffer.append(@enumToInt(AbbrevKind.struct_type));
- // DW.AT.byte_size, DW.FORM.sdata
- const abi_size = ty.abiSize(target);
- try leb128.writeULEB128(dbg_info_buffer.writer(), abi_size);
+ // DW.AT.byte_size, DW.FORM.udata
+ try leb128.writeULEB128(dbg_info_buffer.writer(), ty.abiSize(target));
switch (ty.tag()) {
.tuple, .anon_struct => {
@@ -348,7 +349,7 @@ pub const DeclState = struct {
var index = dbg_info_buffer.items.len;
try dbg_info_buffer.resize(index + 4);
try self.addTypeRelocGlobal(atom_index, field, @intCast(u32, index));
- // DW.AT.data_member_location, DW.FORM.sdata
+ // DW.AT.data_member_location, DW.FORM.udata
const field_off = ty.structFieldOffset(field_index, target);
try leb128.writeULEB128(dbg_info_buffer.writer(), field_off);
}
@@ -380,7 +381,7 @@ pub const DeclState = struct {
var index = dbg_info_buffer.items.len;
try dbg_info_buffer.resize(index + 4);
try self.addTypeRelocGlobal(atom_index, field.ty, @intCast(u32, index));
- // DW.AT.data_member_location, DW.FORM.sdata
+ // DW.AT.data_member_location, DW.FORM.udata
const field_off = ty.structFieldOffset(field_index, target);
try leb128.writeULEB128(dbg_info_buffer.writer(), field_off);
}
@@ -393,9 +394,8 @@ pub const DeclState = struct {
.Enum => {
// DW.AT.enumeration_type
try dbg_info_buffer.append(@enumToInt(AbbrevKind.enum_type));
- // DW.AT.byte_size, DW.FORM.sdata
- const abi_size = ty.abiSize(target);
- try leb128.writeULEB128(dbg_info_buffer.writer(), abi_size);
+ // DW.AT.byte_size, DW.FORM.udata
+ try leb128.writeULEB128(dbg_info_buffer.writer(), ty.abiSize(target));
// DW.AT.name, DW.FORM.string
const enum_name = try ty.nameAllocArena(arena, module);
try dbg_info_buffer.ensureUnusedCapacity(enum_name.len + 1);
@@ -446,7 +446,7 @@ pub const DeclState = struct {
if (is_tagged) {
// DW.AT.structure_type
try dbg_info_buffer.append(@enumToInt(AbbrevKind.struct_type));
- // DW.AT.byte_size, DW.FORM.sdata
+ // DW.AT.byte_size, DW.FORM.udata
try leb128.writeULEB128(dbg_info_buffer.writer(), layout.abi_size);
// DW.AT.name, DW.FORM.string
try dbg_info_buffer.ensureUnusedCapacity(union_name.len + 1);
@@ -463,13 +463,13 @@ pub const DeclState = struct {
const inner_union_index = dbg_info_buffer.items.len;
try dbg_info_buffer.resize(inner_union_index + 4);
try self.addTypeRelocLocal(atom_index, @intCast(u32, inner_union_index), 5);
- // DW.AT.data_member_location, DW.FORM.sdata
+ // DW.AT.data_member_location, DW.FORM.udata
try leb128.writeULEB128(dbg_info_buffer.writer(), payload_offset);
}
// DW.AT.union_type
try dbg_info_buffer.append(@enumToInt(AbbrevKind.union_type));
- // DW.AT.byte_size, DW.FORM.sdata,
+ // DW.AT.byte_size, DW.FORM.udata,
try leb128.writeULEB128(dbg_info_buffer.writer(), layout.payload_size);
// DW.AT.name, DW.FORM.string
if (is_tagged) {
@@ -490,7 +490,7 @@ pub const DeclState = struct {
const index = dbg_info_buffer.items.len;
try dbg_info_buffer.resize(index + 4);
try self.addTypeRelocGlobal(atom_index, field.ty, @intCast(u32, index));
- // DW.AT.data_member_location, DW.FORM.sdata
+ // DW.AT.data_member_location, DW.FORM.udata
try dbg_info_buffer.append(0);
}
// DW.AT.union_type delimit children
@@ -507,7 +507,7 @@ pub const DeclState = struct {
const index = dbg_info_buffer.items.len;
try dbg_info_buffer.resize(index + 4);
try self.addTypeRelocGlobal(atom_index, union_obj.tag_ty, @intCast(u32, index));
- // DW.AT.data_member_location, DW.FORM.sdata
+ // DW.AT.data_member_location, DW.FORM.udata
try leb128.writeULEB128(dbg_info_buffer.writer(), tag_offset);
// DW.AT.structure_type delimit children
@@ -534,7 +534,7 @@ pub const DeclState = struct {
// DW.AT.structure_type
try dbg_info_buffer.append(@enumToInt(AbbrevKind.struct_type));
- // DW.AT.byte_size, DW.FORM.sdata
+ // DW.AT.byte_size, DW.FORM.udata
try leb128.writeULEB128(dbg_info_buffer.writer(), abi_size);
// DW.AT.name, DW.FORM.string
const name = try ty.nameAllocArena(arena, module);
@@ -551,7 +551,7 @@ pub const DeclState = struct {
const index = dbg_info_buffer.items.len;
try dbg_info_buffer.resize(index + 4);
try self.addTypeRelocGlobal(atom_index, payload_ty, @intCast(u32, index));
- // DW.AT.data_member_location, DW.FORM.sdata
+ // DW.AT.data_member_location, DW.FORM.udata
try leb128.writeULEB128(dbg_info_buffer.writer(), payload_off);
}
@@ -566,7 +566,7 @@ pub const DeclState = struct {
const index = dbg_info_buffer.items.len;
try dbg_info_buffer.resize(index + 4);
try self.addTypeRelocGlobal(atom_index, error_ty, @intCast(u32, index));
- // DW.AT.data_member_location, DW.FORM.sdata
+ // DW.AT.data_member_location, DW.FORM.udata
try leb128.writeULEB128(dbg_info_buffer.writer(), error_off);
}
@@ -647,8 +647,8 @@ pub const DeclState = struct {
try dbg_info.ensureUnusedCapacity(5 + name_with_null.len);
const index = dbg_info.items.len;
- try dbg_info.resize(index + 4); // dw.at.type, dw.form.ref4
- try self.addTypeRelocGlobal(atom_index, ty, @intCast(u32, index)); // DW.AT.type, DW.FORM.ref4
+ try dbg_info.resize(index + 4); // dw.at.type, dw.form.ref4
+ try self.addTypeRelocGlobal(atom_index, ty, @intCast(u32, index)); // DW.AT.type, DW.FORM.ref4
dbg_info.appendSliceAssumeCapacity(name_with_null); // DW.AT.name, DW.FORM.string
}
@@ -790,7 +790,7 @@ pub const DeclState = struct {
try dbg_info.ensureUnusedCapacity(5 + name_with_null.len);
const index = dbg_info.items.len;
- try dbg_info.resize(index + 4); // dw.at.type, dw.form.ref4
+ try dbg_info.resize(index + 4); // dw.at.type, dw.form.ref4
try self.addTypeRelocGlobal(atom_index, child_ty, @intCast(u32, index));
dbg_info.appendSliceAssumeCapacity(name_with_null); // DW.AT.name, DW.FORM.string
}
@@ -993,13 +993,13 @@ pub fn initDeclState(self: *Dwarf, mod: *Module, decl_index: Module.Decl.Index)
// "relocations" and have to be in this fixed place so that functions can be
// moved in virtual address space.
assert(dbg_info_low_pc_reloc_index == dbg_info_buffer.items.len);
- dbg_info_buffer.items.len += ptr_width_bytes; // DW.AT.low_pc, DW.FORM.addr
+ dbg_info_buffer.items.len += ptr_width_bytes; // DW.AT.low_pc, DW.FORM.addr
assert(self.getRelocDbgInfoSubprogramHighPC() == dbg_info_buffer.items.len);
- dbg_info_buffer.items.len += 4; // DW.AT.high_pc, DW.FORM.data4
+ dbg_info_buffer.items.len += 4; // DW.AT.high_pc, DW.FORM.data4
//
if (fn_ret_has_bits) {
try decl_state.addTypeRelocGlobal(di_atom_index, fn_ret_type, @intCast(u32, dbg_info_buffer.items.len));
- dbg_info_buffer.items.len += 4; // DW.AT.type, DW.FORM.ref4
+ dbg_info_buffer.items.len += 4; // DW.AT.type, DW.FORM.ref4
}
dbg_info_buffer.appendSliceAssumeCapacity(decl_name_with_null); // DW.AT.name, DW.FORM.string
@@ -1619,7 +1619,7 @@ pub fn writeDbgAbbrev(self: *Dwarf) !void {
DW.AT.encoding,
DW.FORM.data1,
DW.AT.byte_size,
- DW.FORM.data1,
+ DW.FORM.udata,
DW.AT.name,
DW.FORM.string,
0,
@@ -1635,7 +1635,7 @@ pub fn writeDbgAbbrev(self: *Dwarf) !void {
DW.TAG.structure_type,
DW.CHILDREN.yes, // header
DW.AT.byte_size,
- DW.FORM.sdata,
+ DW.FORM.udata,
DW.AT.name,
DW.FORM.string,
0,
@@ -1648,14 +1648,14 @@ pub fn writeDbgAbbrev(self: *Dwarf) !void {
DW.AT.type,
DW.FORM.ref4,
DW.AT.data_member_location,
- DW.FORM.sdata,
+ DW.FORM.udata,
0,
0, // table sentinel
@enumToInt(AbbrevKind.enum_type),
DW.TAG.enumeration_type,
DW.CHILDREN.yes, // header
DW.AT.byte_size,
- DW.FORM.sdata,
+ DW.FORM.udata,
DW.AT.name,
DW.FORM.string,
0,
@@ -1673,7 +1673,7 @@ pub fn writeDbgAbbrev(self: *Dwarf) !void {
DW.TAG.union_type,
DW.CHILDREN.yes, // header
DW.AT.byte_size,
- DW.FORM.sdata,
+ DW.FORM.udata,
DW.AT.name,
DW.FORM.string,
0,
@@ -2628,7 +2628,7 @@ fn addDbgInfoErrorSet(
// DW.AT.enumeration_type
try dbg_info_buffer.append(@enumToInt(AbbrevKind.enum_type));
- // DW.AT.byte_size, DW.FORM.sdata
+ // DW.AT.byte_size, DW.FORM.udata
const abi_size = Type.anyerror.abiSize(target);
try leb128.writeULEB128(dbg_info_buffer.writer(), abi_size);
// DW.AT.name, DW.FORM.string
test/behavior/int_comparison_elision.zig
@@ -15,7 +15,6 @@ test "int comparison elision" {
// TODO: support int types > 128 bits wide in other backends
if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
- if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO