mirror of
https://github.com/Ed94/raddebugger.git
synced 2026-08-06 05:48:40 +00:00
always allocate byte dirty/unreadable flags in ctrl process memory cache lookup, rather than trusting caller to check
This commit is contained in:
@@ -902,6 +902,8 @@ internal CTRL_ProcessMemorySlice
|
|||||||
ctrl_query_cached_data_from_process_vaddr_range(Arena *arena, CTRL_MachineID machine_id, CTRL_Handle process, Rng1U64 range)
|
ctrl_query_cached_data_from_process_vaddr_range(Arena *arena, CTRL_MachineID machine_id, CTRL_Handle process, Rng1U64 range)
|
||||||
{
|
{
|
||||||
CTRL_ProcessMemorySlice result = {0};
|
CTRL_ProcessMemorySlice result = {0};
|
||||||
|
result.byte_bad_flags = push_array(arena, U64, (dim_1u64(range)+63)/64);
|
||||||
|
result.byte_changed_flags = push_array(arena, U64, (dim_1u64(range)+63)/64);
|
||||||
if(range.max > range.min &&
|
if(range.max > range.min &&
|
||||||
dim_1u64(range) <= MB(256) &&
|
dim_1u64(range) <= MB(256) &&
|
||||||
range.min <= 0x000FFFFFFFFFFFFFull &&
|
range.min <= 0x000FFFFFFFFFFFFFull &&
|
||||||
@@ -931,8 +933,8 @@ ctrl_query_cached_data_from_process_vaddr_range(Arena *arena, CTRL_MachineID mac
|
|||||||
|
|
||||||
//- rjf: setup output buffers
|
//- rjf: setup output buffers
|
||||||
void *read_out = push_array(arena, U8, dim_1u64(range));
|
void *read_out = push_array(arena, U8, dim_1u64(range));
|
||||||
U64 *byte_bad_flags = push_array(arena, U64, (dim_1u64(range)+63)/64);
|
U64 *byte_bad_flags = result.byte_bad_flags;
|
||||||
U64 *byte_changed_flags = push_array(arena, U64, (dim_1u64(range)+63)/64);
|
U64 *byte_changed_flags = result.byte_changed_flags;
|
||||||
|
|
||||||
//- rjf: iterate pages, fill output
|
//- rjf: iterate pages, fill output
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -987,15 +987,12 @@ df_eval_watch_view_build(DF_Window *ws, DF_Panel *panel, DF_View *view, DF_EvalW
|
|||||||
size = Min(size, 64);
|
size = Min(size, 64);
|
||||||
Rng1U64 vaddr_rng = r1u64(row->eval.offset, row->eval.offset+size);
|
Rng1U64 vaddr_rng = r1u64(row->eval.offset, row->eval.offset+size);
|
||||||
CTRL_ProcessMemorySlice slice = ctrl_query_cached_data_from_process_vaddr_range(scratch.arena, process->ctrl_machine_id, process->ctrl_handle, vaddr_rng);
|
CTRL_ProcessMemorySlice slice = ctrl_query_cached_data_from_process_vaddr_range(scratch.arena, process->ctrl_machine_id, process->ctrl_handle, vaddr_rng);
|
||||||
if(slice.byte_changed_flags != 0)
|
for(U64 idx = 0; idx < (size+63)/64; idx += 1)
|
||||||
{
|
{
|
||||||
for(U64 idx = 0; idx < (size+63)/64; idx += 1)
|
if(slice.byte_changed_flags[idx] != 0)
|
||||||
{
|
{
|
||||||
if(slice.byte_changed_flags[idx] != 0)
|
row_is_fresh = 1;
|
||||||
{
|
break;
|
||||||
row_is_fresh = 1;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}break;
|
}break;
|
||||||
|
|||||||
Reference in New Issue
Block a user