From 40885a3f59cbe710fe0605866303eb90e984f425 Mon Sep 17 00:00:00 2001 From: Ryan Fleury Date: Mon, 18 May 2026 20:01:15 -0700 Subject: [PATCH] fix unmapped address visualization when reading is impossible + stop it from terminating rest of useful visualization --- src/dbg_engine/dbg_engine_ctrl.c | 1 + src/eval_visualization/eval_visualization_core.c | 13 ++++--------- src/eval_visualization/eval_visualization_core.h | 1 + src/font_cache/font_cache.h | 4 ++-- src/font_provider/font_provider.h | 4 ++-- src/raddbg/raddbg_core.c | 4 ++++ 6 files changed, 14 insertions(+), 13 deletions(-) diff --git a/src/dbg_engine/dbg_engine_ctrl.c b/src/dbg_engine/dbg_engine_ctrl.c index b6c38679..7fd180da 100644 --- a/src/dbg_engine/dbg_engine_ctrl.c +++ b/src/dbg_engine/dbg_engine_ctrl.c @@ -5272,6 +5272,7 @@ d_ctrl_thread__open_crash_dump(DMN_CtrlCtx *ctrl_ctx, D_Msg *msg) String8 module_name_raw_data = str8_prefix(str8_skip(data, off), module_name_size); String16 module_name_16 = str16((U16 *)module_name_raw_data.str, module_name_raw_data.size / sizeof(U16)); module_name = str8_from_16(scratch.arena, module_name_16); + module_name = path_normalized_from_string(scratch.arena, module_name); } // rjf: open module diff --git a/src/eval_visualization/eval_visualization_core.c b/src/eval_visualization/eval_visualization_core.c index 66e9273d..3b0794b5 100644 --- a/src/eval_visualization/eval_visualization_core.c +++ b/src/eval_visualization/eval_visualization_core.c @@ -1849,25 +1849,20 @@ ev_string_iter_next(Arena *arena, EV_StringIter *it, String8 *out_string) //- rjf: step 0: do pre-prefix pointer value if requested case 0: { - if(!(params->flags & EV_StringFlag_DisableAddresses) && - (!ptr_data->addr_is_good || params->flags & EV_StringFlag_AddressesBeforeContent)) + if(!(params->flags & EV_StringFlag_DisableAddresses) && params->flags & EV_StringFlag_AddressesBeforeContent) { Temp scratch = scratch_begin(&arena, 1); String8 ptr_value_string = str8_from_u64(scratch.arena, ptr_data->value_eval.value.u64, ptr_data->value_eval.value.u64 != 0 ? 16 : 10, 0, 0); - if(ptr_data->value_eval.value.u64 != 0 && !ptr_data->addr_is_good && params->flags & EV_StringFlag_ReadOnlyDisplayRules) + if(params->flags & EV_StringFlag_DisplayAddressUnmappedStatus && ptr_data->value_eval.value.u64 != 0 && !ptr_data->addr_is_good && params->flags & EV_StringFlag_ReadOnlyDisplayRules) { ptr_value_string = str8f(scratch.arena, "%S (unmapped)", ptr_value_string); } *out_string = str8_copy(arena, ptr_value_string); ptr_data->did_pre_prefix_ptr = 1; - need_pop = !ptr_data->addr_is_good; scratch_end(scratch); } - else - { - need_pop = 0; - } + need_pop = 0; }break; //- rjf: step 1 -> try "prefix content", which we want to print before the pointer value, @@ -2134,7 +2129,7 @@ ev_string_iter_next(Arena *arena, EV_StringIter *it, String8 *out_string) { Temp scratch = scratch_begin(&arena, 1); String8 ptr_value_string = str8_from_u64(scratch.arena, ptr_data->value_eval.value.u64, ptr_data->value_eval.value.u64 != 0 ? 16 : 10, 0, 0); - if(params->flags & EV_StringFlag_ReadOnlyDisplayRules && ptr_data->value_eval.value.u64 != 0 && !ptr_data->addr_is_good) + if(params->flags & EV_StringFlag_DisplayAddressUnmappedStatus && params->flags & EV_StringFlag_ReadOnlyDisplayRules && ptr_data->value_eval.value.u64 != 0 && !ptr_data->addr_is_good) { ptr_value_string = str8f(scratch.arena, "%S (unmapped)", ptr_value_string); } diff --git a/src/eval_visualization/eval_visualization_core.h b/src/eval_visualization/eval_visualization_core.h index 0d9a788b..4a7067af 100644 --- a/src/eval_visualization/eval_visualization_core.h +++ b/src/eval_visualization/eval_visualization_core.h @@ -234,6 +234,7 @@ enum EV_StringFlag_DisableChars = (1<<4), EV_StringFlag_DisableStringQuotes = (1<<5), EV_StringFlag_AddressesBeforeContent = (1<<6), + EV_StringFlag_DisplayAddressUnmappedStatus = (1<<7), }; typedef struct EV_StringParams EV_StringParams; diff --git a/src/font_cache/font_cache.h b/src/font_cache/font_cache.h index 647cfaf4..a79f2abc 100644 --- a/src/font_cache/font_cache.h +++ b/src/font_cache/font_cache.h @@ -10,8 +10,8 @@ typedef U32 FNT_RasterFlags; enum { - FNT_RasterFlag_Smooth = (1<<0), - FNT_RasterFlag_Hinted = (1<<1), + FNT_RasterFlag_Smooth = (1<<0), + FNT_RasterFlag_Hinted = (1<<1), }; //////////////////////////////// diff --git a/src/font_provider/font_provider.h b/src/font_provider/font_provider.h index 3f010552..5b57c7e7 100644 --- a/src/font_provider/font_provider.h +++ b/src/font_provider/font_provider.h @@ -12,8 +12,8 @@ typedef U32 FP_RasterFlags; enum { - FP_RasterFlag_Smooth = (1<<0), - FP_RasterFlag_Hinted = (1<<1), + FP_RasterFlag_Smooth = (1<<0), + FP_RasterFlag_Hinted = (1<<1), }; typedef struct FP_Handle FP_Handle; diff --git a/src/raddbg/raddbg_core.c b/src/raddbg/raddbg_core.c index cf14a2ef..3b559d9e 100644 --- a/src/raddbg/raddbg_core.c +++ b/src/raddbg/raddbg_core.c @@ -12302,6 +12302,10 @@ rd_frame(void) { rd_state->eval_viz_base_string_flags |= EV_StringFlag_AddressesBeforeContent; } + if(!d_user_state->ctrl_is_running) + { + rd_state->eval_viz_base_string_flags |= EV_StringFlag_DisplayAddressUnmappedStatus; + } //////////////////////////// //- rjf: autosave if needed