mirror of
https://github.com/Ed94/raddebugger.git
synced 2026-08-06 05:48:40 +00:00
adjust eval -> space range mapping to fix a few edge cases
This commit is contained in:
+28
-25
@@ -1350,38 +1350,41 @@ e_key_wrapf(E_Key key, char *fmt, ...)
|
|||||||
////////////////////////////////
|
////////////////////////////////
|
||||||
//~ rjf: Eval Info Extraction
|
//~ rjf: Eval Info Extraction
|
||||||
|
|
||||||
internal U64
|
internal Rng1U64
|
||||||
e_base_offset_from_eval(E_Eval eval)
|
e_range_from_eval(E_Eval eval)
|
||||||
{
|
{
|
||||||
if(e_type_kind_is_pointer_or_ref(e_type_kind_from_key(e_type_key_unwrap(eval.irtree.type_key, E_TypeUnwrapFlag_AllDecorative))))
|
// rjf: choose base offset
|
||||||
|
U64 base_offset = 0;
|
||||||
{
|
{
|
||||||
eval = e_value_eval_from_eval(eval);
|
E_Eval base_off_eval = eval;
|
||||||
}
|
if(e_type_kind_is_pointer_or_ref(e_type_kind_from_key(e_type_key_unwrap(base_off_eval.irtree.type_key, E_TypeUnwrapFlag_AllDecorative))))
|
||||||
return eval.value.u64;
|
|
||||||
}
|
|
||||||
|
|
||||||
internal U64
|
|
||||||
e_range_size_from_eval(E_Eval eval)
|
|
||||||
{
|
|
||||||
U64 result = KB(16);
|
|
||||||
{
|
|
||||||
E_TypeKey type_core = e_type_key_unwrap(eval.irtree.type_key, E_TypeUnwrapFlag_AllDecorative);
|
|
||||||
E_TypeKind type_core_kind = e_type_kind_from_key(type_core);
|
|
||||||
B32 got_size = 0;
|
|
||||||
|
|
||||||
// rjf: try getting size from intrinsic type (e.g. arrays/etc.)
|
|
||||||
if(!got_size)
|
|
||||||
{
|
{
|
||||||
if(type_core_kind == E_TypeKind_Array ||
|
base_off_eval = e_value_eval_from_eval(base_off_eval);
|
||||||
type_core_kind == E_TypeKind_Struct ||
|
}
|
||||||
type_core_kind == E_TypeKind_Union ||
|
base_offset = base_off_eval.value.u64;
|
||||||
type_core_kind == E_TypeKind_Class)
|
}
|
||||||
|
|
||||||
|
// rjf: choose size
|
||||||
|
U64 size = KB(16);
|
||||||
|
{
|
||||||
|
E_TypeKey type_key = e_type_key_unwrap(eval.irtree.type_key, E_TypeUnwrapFlag_AllDecorative);
|
||||||
|
E_TypeKind type_kind = e_type_kind_from_key(type_key);
|
||||||
|
if(type_kind == E_TypeKind_Ptr)
|
||||||
|
{
|
||||||
|
E_Eval ptee_eval = e_eval_wrapf(eval, "*$");
|
||||||
|
U64 ptee_size = e_type_byte_size_from_key(ptee_eval.irtree.type_key);
|
||||||
|
if(ptee_size > 8)
|
||||||
{
|
{
|
||||||
result = e_type_byte_size_from_key(type_core);
|
size = ptee_size;
|
||||||
got_size = 1;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
size = e_type_byte_size_from_key(type_key);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Rng1U64 result = r1u64(base_offset, base_offset+size);
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1294,8 +1294,7 @@ internal E_Key e_key_wrapf(E_Key key, char *fmt, ...);
|
|||||||
////////////////////////////////
|
////////////////////////////////
|
||||||
//~ rjf: Eval Info Extraction
|
//~ rjf: Eval Info Extraction
|
||||||
|
|
||||||
internal U64 e_base_offset_from_eval(E_Eval eval);
|
internal Rng1U64 e_range_from_eval(E_Eval eval);
|
||||||
internal U64 e_range_size_from_eval(E_Eval eval);
|
|
||||||
|
|
||||||
////////////////////////////////
|
////////////////////////////////
|
||||||
//~ rjf: Debug Functions
|
//~ rjf: Debug Functions
|
||||||
|
|||||||
@@ -5640,6 +5640,18 @@ rd_view_setting_f32_from_name(String8 name)
|
|||||||
|
|
||||||
//- rjf: evaluation & tag (a view's 'call') parameter extraction
|
//- rjf: evaluation & tag (a view's 'call') parameter extraction
|
||||||
|
|
||||||
|
internal Rng1U64
|
||||||
|
rd_space_range_from_eval(E_Eval eval)
|
||||||
|
{
|
||||||
|
Rng1U64 range = e_range_from_eval(eval);
|
||||||
|
U64 size_setting = rd_view_setting_value_from_name(str8_lit("size")).u64;
|
||||||
|
if(size_setting != 0)
|
||||||
|
{
|
||||||
|
range.max = range.min + size_setting;
|
||||||
|
}
|
||||||
|
return range;
|
||||||
|
}
|
||||||
|
|
||||||
internal TXT_LangKind
|
internal TXT_LangKind
|
||||||
rd_lang_kind_from_eval(E_Eval eval)
|
rd_lang_kind_from_eval(E_Eval eval)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -934,6 +934,7 @@ internal U64 rd_view_setting_u64_from_name(String8 string);
|
|||||||
internal F32 rd_view_setting_f32_from_name(String8 string);
|
internal F32 rd_view_setting_f32_from_name(String8 string);
|
||||||
|
|
||||||
//- rjf: evaluation & tag (a view's 'call') parameter extraction
|
//- rjf: evaluation & tag (a view's 'call') parameter extraction
|
||||||
|
internal Rng1U64 rd_space_range_from_eval(E_Eval eval);
|
||||||
internal TXT_LangKind rd_lang_kind_from_eval(E_Eval eval);
|
internal TXT_LangKind rd_lang_kind_from_eval(E_Eval eval);
|
||||||
internal Arch rd_arch_from_eval(E_Eval eval);
|
internal Arch rd_arch_from_eval(E_Eval eval);
|
||||||
|
|
||||||
|
|||||||
@@ -2061,13 +2061,7 @@ RD_VIEW_UI_FUNCTION_DEF(text)
|
|||||||
if(rd_regs()->cursor.column == 0) { rd_regs()->cursor.column = 1; }
|
if(rd_regs()->cursor.column == 0) { rd_regs()->cursor.column = 1; }
|
||||||
if(rd_regs()->mark.line == 0) { rd_regs()->mark.line = 1; }
|
if(rd_regs()->mark.line == 0) { rd_regs()->mark.line = 1; }
|
||||||
if(rd_regs()->mark.column == 0) { rd_regs()->mark.column = 1; }
|
if(rd_regs()->mark.column == 0) { rd_regs()->mark.column = 1; }
|
||||||
U64 base_offset = e_base_offset_from_eval(eval);
|
Rng1U64 range = rd_space_range_from_eval(eval);
|
||||||
U64 size = rd_view_setting_value_from_name(str8_lit("size")).u64;
|
|
||||||
if(size == 0)
|
|
||||||
{
|
|
||||||
size = e_range_size_from_eval(eval);
|
|
||||||
}
|
|
||||||
Rng1U64 range = r1u64(base_offset, base_offset+size);
|
|
||||||
rd_regs()->text_key = rd_key_from_eval_space_range(eval.space, range, 1);
|
rd_regs()->text_key = rd_key_from_eval_space_range(eval.space, range, 1);
|
||||||
String8 lang = rd_view_setting_from_name(str8_lit("lang"));
|
String8 lang = rd_view_setting_from_name(str8_lit("lang"));
|
||||||
if(lang.size == 0)
|
if(lang.size == 0)
|
||||||
@@ -2346,13 +2340,7 @@ RD_VIEW_UI_FUNCTION_DEF(disasm)
|
|||||||
{
|
{
|
||||||
space = auto_space;
|
space = auto_space;
|
||||||
}
|
}
|
||||||
U64 base_offset = e_base_offset_from_eval(eval);
|
Rng1U64 range = rd_space_range_from_eval(eval);
|
||||||
U64 size = rd_view_setting_value_from_name(str8_lit("size")).u64;
|
|
||||||
if(size == 0)
|
|
||||||
{
|
|
||||||
size = e_range_size_from_eval(eval);
|
|
||||||
}
|
|
||||||
Rng1U64 range = r1u64(base_offset, base_offset+size);
|
|
||||||
Arch arch = rd_arch_from_eval(eval);
|
Arch arch = rd_arch_from_eval(eval);
|
||||||
CTRL_Entity *space_entity = rd_ctrl_entity_from_eval_space(space);
|
CTRL_Entity *space_entity = rd_ctrl_entity_from_eval_space(space);
|
||||||
CTRL_Entity *dasm_module = &ctrl_entity_nil;
|
CTRL_Entity *dasm_module = &ctrl_entity_nil;
|
||||||
@@ -2535,22 +2523,12 @@ RD_VIEW_UI_FUNCTION_DEF(memory)
|
|||||||
Vec4F32 main_tx_color_rgba = ui_color_from_name(str8_lit("text"));
|
Vec4F32 main_tx_color_rgba = ui_color_from_name(str8_lit("text"));
|
||||||
Vec4F32 main_tx_color_hsva = hsva_from_rgba(main_tx_color_rgba);
|
Vec4F32 main_tx_color_hsva = hsva_from_rgba(main_tx_color_rgba);
|
||||||
F32 main_font_size = ui_bottom_font_size();
|
F32 main_font_size = ui_bottom_font_size();
|
||||||
U64 base_offset = e_base_offset_from_eval(eval);
|
Rng1U64 view_range = rd_space_range_from_eval(eval);
|
||||||
U64 size = rd_view_setting_value_from_name(str8_lit("size")).u64;
|
|
||||||
if(size == 0)
|
|
||||||
{
|
|
||||||
size = e_range_size_from_eval(eval);
|
|
||||||
}
|
|
||||||
Rng1U64 view_range = r1u64(base_offset, base_offset+size);
|
|
||||||
if(eval.space.kind == 0)
|
if(eval.space.kind == 0)
|
||||||
{
|
{
|
||||||
eval.space = rd_eval_space_from_ctrl_entity(ctrl_entity_from_handle(&d_state->ctrl_entity_store->ctx, rd_regs()->process), RD_EvalSpaceKind_CtrlEntity);
|
eval.space = rd_eval_space_from_ctrl_entity(ctrl_entity_from_handle(&d_state->ctrl_entity_store->ctx, rd_regs()->process), RD_EvalSpaceKind_CtrlEntity);
|
||||||
view_range = rd_whole_range_from_eval_space(eval.space);
|
view_range = rd_whole_range_from_eval_space(eval.space);
|
||||||
}
|
}
|
||||||
if(eval.space.kind == RD_EvalSpaceKind_CtrlEntity && dim_1u64(view_range) == KB(16))
|
|
||||||
{
|
|
||||||
view_range = r1u64(0, 0x7FFFFFFFFFFFull);
|
|
||||||
}
|
|
||||||
U64 cursor_base_vaddr = rd_view_setting_u64_from_name(str8_lit("cursor"));
|
U64 cursor_base_vaddr = rd_view_setting_u64_from_name(str8_lit("cursor"));
|
||||||
U64 mark_base_vaddr = rd_view_setting_u64_from_name(str8_lit("mark"));
|
U64 mark_base_vaddr = rd_view_setting_u64_from_name(str8_lit("mark"));
|
||||||
U64 cursor_size = rd_view_setting_u64_from_name(str8_lit("cursor_size"));
|
U64 cursor_size = rd_view_setting_u64_from_name(str8_lit("cursor_size"));
|
||||||
@@ -3848,7 +3826,8 @@ RD_VIEW_UI_FUNCTION_DEF(bitmap)
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
U64 base_offset = e_base_offset_from_eval(eval);
|
Rng1U64 eval_range = e_range_from_eval(eval);
|
||||||
|
U64 base_offset = eval_range.min;
|
||||||
U64 expected_size = dim.x*dim.y*r_tex2d_format_bytes_per_pixel_table[fmt];
|
U64 expected_size = dim.x*dim.y*r_tex2d_format_bytes_per_pixel_table[fmt];
|
||||||
Rng1U64 offset_range = r1u64(base_offset, base_offset + expected_size);
|
Rng1U64 offset_range = r1u64(base_offset, base_offset + expected_size);
|
||||||
|
|
||||||
@@ -4361,7 +4340,8 @@ RD_VIEW_UI_FUNCTION_DEF(geo3d)
|
|||||||
//////////////////////////////
|
//////////////////////////////
|
||||||
//- rjf: evaluate & unpack expression
|
//- rjf: evaluate & unpack expression
|
||||||
//
|
//
|
||||||
U64 base_offset = e_base_offset_from_eval(eval);
|
Rng1U64 eval_range = e_range_from_eval(eval);
|
||||||
|
U64 base_offset = eval_range.min;
|
||||||
Rng1U64 idxs_range = r1u64(base_offset, base_offset+count*sizeof(U32));
|
Rng1U64 idxs_range = r1u64(base_offset, base_offset+count*sizeof(U32));
|
||||||
Rng1U64 vtxs_range = r1u64(vtx_base_off, vtx_base_off+vtx_size);
|
Rng1U64 vtxs_range = r1u64(vtx_base_off, vtx_base_off+vtx_size);
|
||||||
HS_Key idxs_key = rd_key_from_eval_space_range(eval.space, idxs_range, 0);
|
HS_Key idxs_key = rd_key_from_eval_space_range(eval.space, idxs_range, 0);
|
||||||
|
|||||||
Reference in New Issue
Block a user