mirror of
https://github.com/Ed94/raddebugger.git
synced 2026-10-08 17:05:43 +00:00
upgrade eval space reads with staleness/bad/change info, to expand process memory cache reading abilities to all evaluation spaces; unmapped address visualization (both memory view & single line eval)
This commit is contained in:
@@ -736,7 +736,7 @@ rd_eval_space_gen(E_Space space)
|
||||
}
|
||||
|
||||
internal B32
|
||||
rd_eval_space_read(E_Space space, void *out, Rng1U64 range)
|
||||
rd_eval_space_read(E_Space space, void *out, E_SpaceRangeInfo *out_range_info, Rng1U64 range)
|
||||
{
|
||||
Temp scratch = scratch_begin(0, 0);
|
||||
B32 result = 0;
|
||||
@@ -744,7 +744,7 @@ rd_eval_space_read(E_Space space, void *out, Rng1U64 range)
|
||||
{
|
||||
default:
|
||||
{
|
||||
result = d_ctrl_eval_space_read(space, out, range);
|
||||
result = d_ctrl_eval_space_read(space, out, out_range_info, range);
|
||||
}break;
|
||||
|
||||
//- rjf: interior control entity reads (inside process address space or thread register block)
|
||||
@@ -762,6 +762,20 @@ rd_eval_space_read(E_Space space, void *out, Rng1U64 range)
|
||||
{
|
||||
result = 1;
|
||||
MemoryCopy(out, data.str, data.size);
|
||||
if(out_range_info != 0 && out_range_info->byte_bad_flags)
|
||||
{
|
||||
MemoryCopy(out_range_info->byte_bad_flags, slice.byte_bad_flags, sizeof(U64) * (dim_1u64(range)+63)/64);
|
||||
}
|
||||
if(out_range_info != 0 && out_range_info->byte_changed_flags)
|
||||
{
|
||||
MemoryCopy(out_range_info->byte_changed_flags, slice.byte_changed_flags, sizeof(U64) * ((dim_1u64(range)+63)/64));
|
||||
}
|
||||
if(out_range_info != 0)
|
||||
{
|
||||
out_range_info->flags |= E_SpaceRangeFlag_Stale*!!slice.stale;
|
||||
out_range_info->flags |= E_SpaceRangeFlag_AnyByteChanged*!!slice.any_byte_changed;
|
||||
out_range_info->flags |= E_SpaceRangeFlag_AnyByteBad*!!slice.any_byte_bad;
|
||||
}
|
||||
}
|
||||
}break;
|
||||
case D_EntityKind_Thread:
|
||||
|
||||
@@ -658,7 +658,7 @@ internal String8 rd_cmd_name_from_eval(E_Eval eval);
|
||||
|
||||
//- rjf: eval space reads/writes
|
||||
internal U64 rd_eval_space_gen(E_Space space);
|
||||
internal B32 rd_eval_space_read(E_Space space, void *out, Rng1U64 range);
|
||||
internal B32 rd_eval_space_read(E_Space space, void *out, E_SpaceRangeInfo *out_range_info, Rng1U64 range);
|
||||
internal B32 rd_eval_space_write(E_Space space, void *in, Rng1U64 range);
|
||||
|
||||
//- rjf: asynchronous streamed reads -> hashes from spaces
|
||||
|
||||
@@ -4,9 +4,6 @@
|
||||
////////////////////////////////
|
||||
//~ rjf: post-0.9.26 TODO notes
|
||||
//
|
||||
// [ ] single-line bad address visualization
|
||||
// [ ] memory view show unmapped memory as non-zeros
|
||||
//
|
||||
// [ ] "autos" collection, which can be evaluated
|
||||
// [ ] show "autos" inline in source code near thread?
|
||||
// [ ] memory_size(...) view for quickly evaluating memory sizes
|
||||
@@ -28,7 +25,6 @@
|
||||
// [ ] no selected thread -> causing evaluation failures, e.g. with go-to-definition
|
||||
//
|
||||
//- evaluation space coverage pass
|
||||
// [ ] eval space reads/writes -> needs staleness/badness info - replace ctrl layer, to apply to all spaces
|
||||
// [ ] need concrete ways of referring into a space at any offset - e.g. `process.memory + 0x1234`, `file:"foo".data + 0x1234`, `thread.regs + 0x80`, etc.
|
||||
// [ ] memory view needs to take advantage of above when peeking; ensure peeking works on files etc.
|
||||
// [ ] need to eliminate accelerators from evaluation context, and build them on the fly instead -
|
||||
@@ -273,6 +269,7 @@
|
||||
// by default go to "untitled" in default user path
|
||||
// [x] memory view mutation controls
|
||||
// [x] step-over/step-into doesn't step successfully in many cases, just causes a continue
|
||||
// [x] eval space reads/writes -> needs staleness/badness info - replace ctrl layer, to apply to all spaces
|
||||
|
||||
////////////////////////////////
|
||||
//~ rjf: Build Options
|
||||
|
||||
@@ -2869,7 +2869,7 @@ RD_VIEW_UI_FUNCTION_DEF(memory)
|
||||
String8 data = {0};
|
||||
data.size = dim_1u64(range);
|
||||
data.str = push_array(scratch.arena, U8, data.size);
|
||||
if(!e_space_read(eval.space, data.str, range))
|
||||
if(!e_space_read(eval.space, data.str, 0, range))
|
||||
{
|
||||
log_user_errorf("Could not successfully read memory.");
|
||||
}
|
||||
@@ -3224,17 +3224,8 @@ RD_VIEW_UI_FUNCTION_DEF(memory)
|
||||
U64 *visible_memory_change_flags = push_array(scratch.arena, U64, (visible_memory_size+63)/64);
|
||||
U64 *visible_memory_bad_flags = push_array(scratch.arena, U64, (visible_memory_size+63)/64);
|
||||
{
|
||||
e_space_read(eval.space, visible_memory, viz_range_bytes);
|
||||
}
|
||||
if(eval.space.kind == D_EvalSpaceKind_Entity)
|
||||
{
|
||||
D_Entity *entity = rd_ctrl_entity_from_eval_space(eval.space);
|
||||
if(entity->kind == D_EntityKind_Process)
|
||||
{
|
||||
D_ProcessMemorySlice slice = d_process_memory_slice_from_vaddr_range(scratch.arena, entity->handle, viz_range_bytes, 0, 0);
|
||||
visible_memory_change_flags = slice.byte_changed_flags;
|
||||
visible_memory_bad_flags = slice.byte_bad_flags;
|
||||
}
|
||||
E_SpaceRangeInfo range_info = {visible_memory_bad_flags, visible_memory_change_flags};
|
||||
e_space_read(eval.space, visible_memory, &range_info, viz_range_bytes);
|
||||
}
|
||||
|
||||
//////////////////////////////
|
||||
|
||||
Reference in New Issue
Block a user