d2r2: .debug_loclists parsing, DWARF expression -> RDI location info; first pass at baking frame base into var locations to match simpler PDB behavior; fixes to high-pc address evaluation (based on form kind)

This commit is contained in:
Ryan Fleury
2026-04-29 12:40:43 -07:00
parent 242f4e9cbd
commit 9a923e9bf9
16 changed files with 1280 additions and 95 deletions
+4 -4
View File
@@ -684,17 +684,17 @@ e_oplist_from_location(Arena *arena, RDI_Parsed *rdi, RDI_Location loc)
}break;
//- rjf: reg + off
case RDI_LocationKind_AddrRegPlusU16: goto reg_plus_off;
case RDI_LocationKind_AddrAddrRegPlusU16: need_extra_memread = 1; goto reg_plus_off;
case RDI_LocationKind_AddrRegPlusOff: goto reg_plus_off;
case RDI_LocationKind_AddrAddrRegPlusOff: need_extra_memread = 1; goto reg_plus_off;
reg_plus_off:;
{
RDI_TopLevelInfo *tli = rdi_element_from_name_idx(rdi, TopLevelInfo, 0);
Arch arch = arch_from_rdi_arch(tli->arch);
U64 arch_addr_bytesize = byte_size_from_arch(arch);
RDI_RegCode regcode = rdi_regcode_from_location(loc);
U64 reg_off = rdi_regoff_from_location(loc);
S64 reg_off = rdi_regoff_from_location(loc);
e_oplist_push_op(arena, &result, RDI_EvalOp_RegRead, e_value_u64(RDI_EncodeRegReadParam(regcode, arch_addr_bytesize, 0)));
e_oplist_push_uconst(arena, &result, reg_off);
e_oplist_push_sconst(arena, &result, reg_off);
e_oplist_push_op(arena, &result, RDI_EvalOp_Add, e_value_u64(0));
if(need_extra_memread)
{
+10 -21
View File
@@ -936,31 +936,20 @@ e_interpret(String8 bytecode)
}
}break;
case RDI_EvalOp_CallSiteValue:
{
NotImplemented;
}break;
case RDI_EvalOp_PartialValue:
{
NotImplemented;
}break;
case RDI_EvalOp_PartialValueBit:
{
NotImplemented;
}break;
case RDI_EvalOp_Swap:
{
// TODO: add support for pushing multiple values onto the stack
NotImplemented;
}break;
case RDI_EvalOp_PushCfa:
{
nval.u64 = e_interpret_ctx->cfa;
}break;
case RDI_EvalOp_CallSiteValue:
case RDI_EvalOp_PartialValue:
case RDI_EvalOp_PartialValueBit:
case RDI_EvalOp_Swap:
{
// TODO(rjf)
result.code = E_InterpretationCode_BadOp;
goto done;
}break;
}
// rjf: push
+2 -2
View File
@@ -2108,8 +2108,8 @@ e_push_irtree_and_type_from_expr(Arena *arena, E_IRTreeAndType *root_parent, E_I
mapped_bytecode_mode = E_Mode_Value;
}break;
case RDI_LocationKind_AddrBytecodeStream:
case RDI_LocationKind_AddrRegPlusU16:
case RDI_LocationKind_AddrAddrRegPlusU16:
case RDI_LocationKind_AddrRegPlusOff:
case RDI_LocationKind_AddrAddrRegPlusOff:
{
mapped_bytecode_mode = E_Mode_Offset;
}break;