module info block
This commit is contained in:
parent
d366a911a1
commit
95c3570871
@ -3643,6 +3643,8 @@ const Bitcode = struct {
|
|||||||
if (attribute_groups.len > 0) {
|
if (attribute_groups.len > 0) {
|
||||||
writer.enter_subblock(.parameter_attribute, 3);
|
writer.enter_subblock(.parameter_attribute, 3);
|
||||||
|
|
||||||
|
const start = writer.buffer.length * 4;
|
||||||
|
|
||||||
var records = std.BoundedArray(u64, 4096){};
|
var records = std.BoundedArray(u64, 4096){};
|
||||||
for (attribute_lists) |attribute_list| {
|
for (attribute_lists) |attribute_list| {
|
||||||
for (attribute_list.attribute_groups) |attribute_group_index| {
|
for (attribute_list.attribute_groups) |attribute_group_index| {
|
||||||
@ -3657,16 +3659,24 @@ const Bitcode = struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
writer.exit_block();
|
writer.exit_block();
|
||||||
|
|
||||||
|
const end = writer.buffer.length * 4;
|
||||||
|
const expected = debug_main_bitcode[start..end];
|
||||||
|
const have = writer.get_byte_slice()[start..end];
|
||||||
|
std.debug.print("Start: {}\n", .{start});
|
||||||
|
std.testing.expectEqualSlices(u8, expected, have) catch unreachable;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fn write_module_info(writer: *Writer) void {
|
fn write_module_info(writer: *Writer) void {
|
||||||
const target_triple = "x86_64-pc-linux-gnu";
|
const start = writer.buffer.length * 4;
|
||||||
|
_ = start; // autofix
|
||||||
|
const target_triple = "x86_64-unknown-linux-gnu";
|
||||||
writer.write_string_record(@intFromEnum(ModuleCode.triple), target_triple,
|
writer.write_string_record(@intFromEnum(ModuleCode.triple), target_triple,
|
||||||
// TODO in LLVM code
|
// TODO in LLVM code
|
||||||
0);
|
0);
|
||||||
|
|
||||||
const data_layout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128";
|
const data_layout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-f80:128-n8:16:32:64-S128";
|
||||||
writer.write_string_record(@intFromEnum(ModuleCode.data_layout), data_layout,
|
writer.write_string_record(@intFromEnum(ModuleCode.data_layout), data_layout,
|
||||||
// TODO in LLVM code
|
// TODO in LLVM code
|
||||||
0);
|
0);
|
||||||
@ -3684,7 +3694,7 @@ const Bitcode = struct {
|
|||||||
|
|
||||||
var values = std.BoundedArray(u32, 64){};
|
var values = std.BoundedArray(u32, 64){};
|
||||||
{
|
{
|
||||||
const source_filename = "llvm-link";
|
const source_filename = "main.c";
|
||||||
const source_string_encoding = get_string_encoding(source_filename);
|
const source_string_encoding = get_string_encoding(source_filename);
|
||||||
const abbreviation = writer.abbreviation_buffer.append(.{});
|
const abbreviation = writer.abbreviation_buffer.append(.{});
|
||||||
abbreviation.add_literal(@intFromEnum(ModuleCode.source_filename));
|
abbreviation.add_literal(@intFromEnum(ModuleCode.source_filename));
|
||||||
@ -3707,7 +3717,11 @@ const Bitcode = struct {
|
|||||||
// TODO: global variables
|
// TODO: global variables
|
||||||
|
|
||||||
for (dummy_functions) |function| {
|
for (dummy_functions) |function| {
|
||||||
|
std.debug.print("====\nFUNCTION START\n====\n", .{});
|
||||||
|
defer std.debug.print("====\nFUNCTION END\n====\n", .{});
|
||||||
|
// const loop_start = writer.buffer.length * 4;
|
||||||
const offset = writer.strtab_content.length;
|
const offset = writer.strtab_content.length;
|
||||||
|
std.debug.print("Offset: {}\n", .{offset});
|
||||||
writer.strtab_content.append_slice(function.name);
|
writer.strtab_content.append_slice(function.name);
|
||||||
values.appendAssumeCapacity(offset);
|
values.appendAssumeCapacity(offset);
|
||||||
values.appendAssumeCapacity(@intCast(function.name.len));
|
values.appendAssumeCapacity(@intCast(function.name.len));
|
||||||
@ -3721,7 +3735,7 @@ const Bitcode = struct {
|
|||||||
values.appendAssumeCapacity(@intFromEnum(function.visibility));
|
values.appendAssumeCapacity(@intFromEnum(function.visibility));
|
||||||
values.appendAssumeCapacity(@intFromBool(function.gc));
|
values.appendAssumeCapacity(@intFromBool(function.gc));
|
||||||
values.appendAssumeCapacity(@intFromEnum(function.unnamed_address));
|
values.appendAssumeCapacity(@intFromEnum(function.unnamed_address));
|
||||||
// TODO:
|
values.appendAssumeCapacity(@intFromEnum(function.dll_storage_class));
|
||||||
values.appendAssumeCapacity(function.prologued_data);
|
values.appendAssumeCapacity(function.prologued_data);
|
||||||
values.appendAssumeCapacity(function.comdat);
|
values.appendAssumeCapacity(function.comdat);
|
||||||
values.appendAssumeCapacity(function.prefix_data);
|
values.appendAssumeCapacity(function.prefix_data);
|
||||||
@ -3731,8 +3745,15 @@ const Bitcode = struct {
|
|||||||
values.appendAssumeCapacity(function.partition_offset);
|
values.appendAssumeCapacity(function.partition_offset);
|
||||||
values.appendAssumeCapacity(function.partition_len);
|
values.appendAssumeCapacity(function.partition_len);
|
||||||
|
|
||||||
|
assert(writer.current_codesize != 8);
|
||||||
writer.emit_record(@TypeOf(values.constSlice()[0]), @intFromEnum(ModuleCode.function), values.constSlice(), 0);
|
writer.emit_record(@TypeOf(values.constSlice()[0]), @intFromEnum(ModuleCode.function), values.constSlice(), 0);
|
||||||
values.resize(0) catch unreachable;
|
values.resize(0) catch unreachable;
|
||||||
|
|
||||||
|
// const loop_end = writer.buffer.length * 4;
|
||||||
|
// const expected = debug_main_bitcode[loop_start..loop_end];
|
||||||
|
// const have = writer.get_byte_slice()[loop_start..loop_end];
|
||||||
|
// std.debug.print("Start: {}\n", .{loop_start});
|
||||||
|
// std.testing.expectEqualSlices(u8, expected, have) catch unreachable;
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO: global aliases
|
// TODO: global aliases
|
||||||
@ -3740,6 +3761,12 @@ const Bitcode = struct {
|
|||||||
// TODO: global ifunc
|
// TODO: global ifunc
|
||||||
|
|
||||||
writer.write_value_symbol_table_forward_declaration();
|
writer.write_value_symbol_table_forward_declaration();
|
||||||
|
//
|
||||||
|
// const end = writer.buffer.length * 4;
|
||||||
|
// const expected = debug_main_bitcode[start..end];
|
||||||
|
// const have = writer.get_byte_slice()[start..end];
|
||||||
|
// std.debug.print("Start: {}\n", .{start});
|
||||||
|
// std.testing.expectEqualSlices(u8, expected, have) catch unreachable;
|
||||||
}
|
}
|
||||||
|
|
||||||
const DummyFunction = struct{
|
const DummyFunction = struct{
|
||||||
@ -3772,7 +3799,7 @@ const Bitcode = struct {
|
|||||||
.calling_convention = .C,
|
.calling_convention = .C,
|
||||||
.is_declaration = false,
|
.is_declaration = false,
|
||||||
.linkage = .external,
|
.linkage = .external,
|
||||||
.attribute_list_id = 0,
|
.attribute_list_id = 1,
|
||||||
.alignment = 0,
|
.alignment = 0,
|
||||||
.section = 0,
|
.section = 0,
|
||||||
.visibility = .default,
|
.visibility = .default,
|
||||||
@ -3784,7 +3811,7 @@ const Bitcode = struct {
|
|||||||
.personality = 0,
|
.personality = 0,
|
||||||
.dso_local = true,
|
.dso_local = true,
|
||||||
.address_space = 0,
|
.address_space = 0,
|
||||||
.partition_offset = 0,
|
.partition_offset = 4,
|
||||||
.partition_len = 0,
|
.partition_len = 0,
|
||||||
},
|
},
|
||||||
.{
|
.{
|
||||||
@ -3793,7 +3820,7 @@ const Bitcode = struct {
|
|||||||
.calling_convention = .C,
|
.calling_convention = .C,
|
||||||
.is_declaration = true,
|
.is_declaration = true,
|
||||||
.linkage = .external,
|
.linkage = .external,
|
||||||
.attribute_list_id = 1,
|
.attribute_list_id = 2,
|
||||||
.alignment = 0,
|
.alignment = 0,
|
||||||
.section = 0,
|
.section = 0,
|
||||||
.visibility = .default,
|
.visibility = .default,
|
||||||
@ -3805,7 +3832,7 @@ const Bitcode = struct {
|
|||||||
.personality = 0,
|
.personality = 0,
|
||||||
.dso_local = false,
|
.dso_local = false,
|
||||||
.address_space = 0,
|
.address_space = 0,
|
||||||
.partition_offset = 0,
|
.partition_offset = 4,
|
||||||
.partition_len = 0,
|
.partition_len = 0,
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
@ -3900,7 +3927,7 @@ const Bitcode = struct {
|
|||||||
|
|
||||||
fn write_raw(writer: *Writer, value: u32) void {
|
fn write_raw(writer: *Writer, value: u32) void {
|
||||||
std.debug.print("[{}-{}] Flushing buffer 0x{x}\n", .{writer.buffer.length, writer.buffer.length * 4, value});
|
std.debug.print("[{}-{}] Flushing buffer 0x{x}\n", .{writer.buffer.length, writer.buffer.length * 4, value});
|
||||||
// if (writer.buffer.length == (220) / 4 - 1) @breakpoint();
|
// if (writer.buffer.length == (712) / 4 - 1) @breakpoint();
|
||||||
// if (writer.buffer.length == (152 + 32) / 4) @breakpoint();
|
// if (writer.buffer.length == (152 + 32) / 4) @breakpoint();
|
||||||
_ = writer.buffer.append(value);
|
_ = writer.buffer.append(value);
|
||||||
}
|
}
|
||||||
@ -4025,6 +4052,7 @@ const Bitcode = struct {
|
|||||||
|
|
||||||
writer.buffer.slice()[last.start_size_index] = size32;
|
writer.buffer.slice()[last.start_size_index] = size32;
|
||||||
|
|
||||||
|
std.debug.print("\n\n\n[EXIT BLOCK] Current code size: {}. Previous code size: {}. Swapping...\n\n\n", .{writer.current_codesize, last.previous_code_size});
|
||||||
writer.current_codesize = last.previous_code_size;
|
writer.current_codesize = last.previous_code_size;
|
||||||
writer.current_abbreviations = last.previous_abbreviations;
|
writer.current_abbreviations = last.previous_abbreviations;
|
||||||
writer.block_scope.length -= 1;
|
writer.block_scope.length -= 1;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user