mirror of
https://github.com/Ed94/raddebugger.git
synced 2026-08-11 08:08:08 +00:00
fix flipped interpretation of scope address ranges in dwarf - address class implies opl, not size
This commit is contained in:
+6
-1
@@ -1137,13 +1137,18 @@ rb_thread_entry_point(void *p)
|
|||||||
RDI_Scope *root_scope = rdi_element_from_name_idx(rdi, Scopes, proc->root_scope_idx);
|
RDI_Scope *root_scope = rdi_element_from_name_idx(rdi, Scopes, proc->root_scope_idx);
|
||||||
if(root_scope->voff_range_opl > root_scope->voff_range_first)
|
if(root_scope->voff_range_opl > root_scope->voff_range_first)
|
||||||
{
|
{
|
||||||
|
|
||||||
// rjf: dump function record
|
// rjf: dump function record
|
||||||
RDIM_Rng1U64 voff_range =
|
RDIM_Rng1U64 voff_range =
|
||||||
{
|
{
|
||||||
*rdi_element_from_name_idx(rdi, ScopeVOffData, root_scope->voff_range_first),
|
*rdi_element_from_name_idx(rdi, ScopeVOffData, root_scope->voff_range_first),
|
||||||
*rdi_element_from_name_idx(rdi, ScopeVOffData, root_scope->voff_range_opl - 1),
|
*rdi_element_from_name_idx(rdi, ScopeVOffData, root_scope->voff_range_opl - 1),
|
||||||
};
|
};
|
||||||
str8_list_pushf(arena, out, "FUNC %I64x %I64x %I64x %S\n", voff_range.min, voff_range.max-voff_range.min, 0ull, str8_from_rdi_string_idx(rdi, proc->name_string_idx));
|
{
|
||||||
|
Temp scratch = scratch_begin(0, 0);
|
||||||
|
str8_list_pushf(arena, out, "FUNC %I64x %I64x %I64x %S\n", voff_range.min, voff_range.max-voff_range.min, 0ull, fully_qualified_str8_from_rdi_symbol(scratch.arena, rdi, proc));
|
||||||
|
scratch_end(scratch);
|
||||||
|
}
|
||||||
|
|
||||||
// rjf: dump function lines
|
// rjf: dump function lines
|
||||||
U64 unit_vmap_count = 0;
|
U64 unit_vmap_count = 0;
|
||||||
|
|||||||
@@ -3080,11 +3080,11 @@ d2r_convert(Arena *arena, D2R_ConvertParams *params)
|
|||||||
U64 voff_opl = 0;
|
U64 voff_opl = 0;
|
||||||
if(dw_attrib_class_from_form_kind(unit_parse_ctx->version, unit_parse_ctx->exts, hipc_attrib->val.kind) & (1<<DW_AttribClass_Address))
|
if(dw_attrib_class_from_form_kind(unit_parse_ctx->version, unit_parse_ctx->exts, hipc_attrib->val.kind) & (1<<DW_AttribClass_Address))
|
||||||
{
|
{
|
||||||
voff_opl = voff_base + hipc_attrib->val.u128.u64[0];
|
voff_opl = hipc_attrib->val.addr;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
voff_opl = hipc_attrib->val.addr;
|
voff_opl = voff_base + hipc_attrib->val.u128.u64[0];
|
||||||
}
|
}
|
||||||
rdim_rng1u64_list_push(arena, &ranges, (RDIM_Rng1U64){voff_base, voff_opl});
|
rdim_rng1u64_list_push(arena, &ranges, (RDIM_Rng1U64){voff_base, voff_opl});
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user