fix builds

This commit is contained in:
Ryan Fleury
2026-04-23 14:45:13 -07:00
parent 2623141fd4
commit 602cf68980
3 changed files with 93 additions and 1 deletions
+2
View File
@@ -289,6 +289,7 @@
#include "rdi_from_elf/rdi_from_elf.h"
#include "rdi_from_pdb/rdi_from_pdb.h"
#include "rdi_from_dwarf/rdi_from_dwarf.h"
#include "rdi_from_dwarf/rdi_from_dwarf_2.h"
#include "radbin/radbin.h"
#include "regs/regs.h"
#include "regs/rdi/regs_rdi.h"
@@ -343,6 +344,7 @@
#include "rdi_from_elf/rdi_from_elf.c"
#include "rdi_from_pdb/rdi_from_pdb.c"
#include "rdi_from_dwarf/rdi_from_dwarf.c"
#include "rdi_from_dwarf/rdi_from_dwarf_2.c"
#include "radbin/radbin.c"
#include "regs/regs.c"
#include "regs/rdi/regs_rdi.c"
+89 -1
View File
@@ -466,13 +466,16 @@ d2r2_convert(Arena *arena, D2R2_ConvertParams *params)
}
//- rjf: run the line opcode program
B32 emit_line = 0;
for(U64 off = 0, next_off = 0; off < unit_line_table_data.size; off = next_off)
{
next_off = unit_line_table_data.size;
//- rjf: read next opcode
U64 op_read_off = off;
U8 opcode = 0;
str8_deserial_read_struct(unit_line_table_data, off, &opcode);
str8_deserial_read_struct(unit_line_table_data, op_read_off, &opcode);
op_read_off += 1;
//- rjf: apply "special opcodes" (DWARF v5 6.2.5.1)
if(opcode >= line_table_header->opcode_base)
@@ -488,6 +491,91 @@ d2r2_convert(Arena *arena, D2R2_ConvertParams *params)
vm_regs.prologue_end = 0;
vm_regs.epilogue_begin = 0;
vm_regs.discriminator = 0;
emit_line = 1;
}
//- rjf: apply standard opcode
else
{
U64 op_advance = 0;
switch(opcode)
{
//- rjf: line emissions
case DW_StdOpcode_Copy:
{
emit_line = 1;
vm_regs.discriminator = 0;
vm_regs.basic_block = 0;
vm_regs.prologue_end = 0;
vm_regs.epilogue_begin = 0;
}break;
//- rjf: PC advances
case DW_StdOpcode_AdvancePc:
{
op_read_off += str8_deserial_read_uleb128(unit_line_table_data, op_read_off, &op_advance);
}goto advance_pc;
case DW_StdOpcode_ConstAddPc:
{
op_advance = (0xffu - line_table_header->opcode_base) / line_table_header->line_range;
}goto advance_pc;
advance_pc:;
{
U64 op_index = vm_regs.vliw_op_index + op_advance;
vm_regs.address += line_table_header->min_inst_length * (op_index / line_table_header->max_ops_per_inst);
vm_regs.vliw_op_index = op_index % line_table_header->max_ops_per_inst;
}break;
//- rjf: fixed PC advances
case DW_StdOpcode_FixedAdvancePc:
{
U16 fixed_advance = 0;
str8_deserial_read_struct(unit_line_table_data, op_read_off, &fixed_advance);
op_read_off += sizeof(U16);
vm_regs.address += fixed_advance;
vm_regs.vliw_op_index = 0;
}break;
//- rjf: line number advance
case DW_StdOpcode_AdvanceLine:
{
S64 advance = 0;
op_read_off += str8_deserial_read_sleb128(unit_line_table_data, op_read_off, &advance);
vm_regs.line += advance;
}break;
//- rjf: set file
case DW_StdOpcode_SetFile:
{
op_read_off += str8_deserial_read_uleb128(unit_line_table_data, op_read_off, &vm_regs.file_index);
}break;
//- rjf: set column
case DW_StdOpcode_SetColumn:
{
op_read_off += str8_deserial_read_uleb128(unit_line_table_data, op_read_off, &vm_regs.column);
}break;
//- rjf: negate statment
case DW_StdOpcode_NegateStmt:
{
vm_regs.is_stmt = !vm_regs.is_stmt;
}break;
//- rjf: flag sets
case DW_StdOpcode_SetBasicBlock:
{
vm_regs.basic_block = 1;
}break;
case DW_StdOpcode_SetPrologueEnd:
{
vm_regs.prologue_end = 1;
}break;
case DW_StdOpcode_SetEpilogueBegin:
{
vm_regs.epilogue_begin = 1;
}break;
}
}
}
}
+2
View File
@@ -58,6 +58,7 @@
#include "rdi_from_elf/rdi_from_elf.h"
#include "rdi_from_pdb/rdi_from_pdb.h"
#include "rdi_from_dwarf/rdi_from_dwarf.h"
#include "rdi_from_dwarf/rdi_from_dwarf_2.h"
#include "obj/obj.h"
#include "radbin/radbin.h"
#include "regs/regs.h"
@@ -130,6 +131,7 @@
#include "rdi_from_elf/rdi_from_elf.c"
#include "rdi_from_pdb/rdi_from_pdb.c"
#include "rdi_from_dwarf/rdi_from_dwarf.c"
#include "rdi_from_dwarf/rdi_from_dwarf_2.c"
#include "obj/obj.c"
#include "radbin/radbin.c"
#include "regs/regs.c"