bugfixes in new demon layer; adjust retry mechanism in process memory cache query; ui fixes

This commit is contained in:
Ryan Fleury
2024-03-12 15:49:36 -07:00
parent 8639faabdd
commit 871419de39
5 changed files with 36 additions and 12 deletions
+24 -2
View File
@@ -970,6 +970,7 @@ ctrl_stored_hash_from_process_vaddr_range(CTRL_MachineID machine_id, DMN_Handle
} }
//- rjf: not good -> create range node if necessary //- rjf: not good -> create range node if necessary
U64 last_time_requested_us = 0;
if(!is_good) if(!is_good)
{ {
OS_MutexScopeW(process_stripe->rw_mutex) OS_MutexScopeW(process_stripe->rw_mutex)
@@ -985,6 +986,7 @@ ctrl_stored_hash_from_process_vaddr_range(CTRL_MachineID machine_id, DMN_Handle
{ {
if(MemoryMatchStruct(&range_n->vaddr_range, &range) && range_n->zero_terminated == zero_terminated) if(MemoryMatchStruct(&range_n->vaddr_range, &range) && range_n->zero_terminated == zero_terminated)
{ {
last_time_requested_us = range_n->last_time_requested_us;
range_node_exists = 1; range_node_exists = 1;
break; break;
} }
@@ -1009,9 +1011,29 @@ ctrl_stored_hash_from_process_vaddr_range(CTRL_MachineID machine_id, DMN_Handle
} }
//- rjf: not good, or is stale -> submit hash request //- rjf: not good, or is stale -> submit hash request
if(!is_good || is_stale) if((!is_good || is_stale) && os_now_microseconds() >= last_time_requested_us+10000)
{ {
ctrl_u2ms_enqueue_req(machine_id, process, range, zero_terminated, endt_us); ctrl_u2ms_enqueue_req(machine_id, process, range, zero_terminated, endt_us);
OS_MutexScopeW(process_stripe->rw_mutex)
{
for(CTRL_ProcessMemoryCacheNode *n = process_slot->first; n != 0; n = n->next)
{
if(n->machine_id == machine_id && ctrl_handle_match(n->process, process))
{
U64 range_slot_idx = range_hash%n->range_hash_slots_count;
CTRL_ProcessMemoryRangeHashSlot *range_slot = &n->range_hash_slots[range_slot_idx];
B32 range_node_exists = 0;
for(CTRL_ProcessMemoryRangeHashNode *range_n = range_slot->first; range_n != 0; range_n = range_n->next)
{
if(MemoryMatchStruct(&range_n->vaddr_range, &range) && range_n->zero_terminated == zero_terminated)
{
range_n->last_time_requested_us = os_now_microseconds();
break;
}
}
}
}
}
} }
//- rjf: out of time? -> exit //- rjf: out of time? -> exit
@@ -3576,7 +3598,7 @@ ctrl_mem_stream_thread__entry_point(void *p)
if(got_task && memgen_idx != preexisting_memgen_idx) if(got_task && memgen_idx != preexisting_memgen_idx)
{ {
range_size = dim_1u64(vaddr_range_clamped); range_size = dim_1u64(vaddr_range_clamped);
U64 arena_size = AlignPow2(range_size + ARENA_HEADER_SIZE, KB(64)); U64 arena_size = AlignPow2(range_size + ARENA_HEADER_SIZE, os_page_size());
range_arena = arena_alloc__sized(range_size+ARENA_HEADER_SIZE, range_size+ARENA_HEADER_SIZE); range_arena = arena_alloc__sized(range_size+ARENA_HEADER_SIZE, range_size+ARENA_HEADER_SIZE);
if(range_arena == 0) if(range_arena == 0)
{ {
+1
View File
@@ -377,6 +377,7 @@ struct CTRL_ProcessMemoryRangeHashNode
Rng1U64 vaddr_range_clamped; Rng1U64 vaddr_range_clamped;
U128 hash; U128 hash;
U64 memgen_idx; U64 memgen_idx;
U64 last_time_requested_us;
B32 is_taken; B32 is_taken;
}; };
+3 -3
View File
@@ -1198,7 +1198,7 @@ dmn_run(Arena *arena, DMN_RunCtrls *ctrls)
{ {
//- rjf: scan all processes //- rjf: scan all processes
for(DMN_W32_Entity *process = dmn_w32_shared->entities_base->first; for(DMN_W32_Entity *process = dmn_w32_shared->entities_base->first;
process != 0; process != &dmn_w32_entity_nil;
process = process->next) process = process->next)
{ {
if(process->kind != DMN_W32_EntityKind_Process) {continue;} if(process->kind != DMN_W32_EntityKind_Process) {continue;}
@@ -1345,7 +1345,7 @@ dmn_run(Arena *arena, DMN_RunCtrls *ctrls)
DEBUG_EVENT evt = {0}; DEBUG_EVENT evt = {0};
B32 evt_good = 0; B32 evt_good = 0;
{ {
B32 resume_good = 0; B32 resume_good = 1;
if(dmn_w32_shared->resume_needed) if(dmn_w32_shared->resume_needed)
{ {
dmn_w32_shared->resume_needed = 0; dmn_w32_shared->resume_needed = 0;
@@ -1987,7 +1987,7 @@ dmn_run(Arena *arena, DMN_RunCtrls *ctrls)
{ {
if(process->kind != DMN_W32_EntityKind_Process) { continue; } if(process->kind != DMN_W32_EntityKind_Process) { continue; }
for(DMN_W32_Entity *thread = process->first; for(DMN_W32_Entity *thread = process->first;
thread != 0; thread != &dmn_w32_entity_nil;
thread = thread->next) thread = thread->next)
{ {
if(thread->kind != DMN_W32_EntityKind_Thread) { continue; } if(thread->kind != DMN_W32_EntityKind_Thread) { continue; }
+6 -6
View File
@@ -2828,7 +2828,7 @@ df_trap_net_from_thread__step_over_inst(Arena *arena, DF_Entity *thread)
String8 machine_code = {0}; String8 machine_code = {0};
{ {
Rng1U64 rng = r1u64(ip_vaddr, ip_vaddr+max_instruction_size_from_arch(arch)); Rng1U64 rng = r1u64(ip_vaddr, ip_vaddr+max_instruction_size_from_arch(arch));
CTRL_ProcessMemorySlice machine_code_slice = ctrl_query_cached_data_from_process_vaddr_range(scratch.arena, process->ctrl_machine_id, process->ctrl_handle, rng, max_U64); CTRL_ProcessMemorySlice machine_code_slice = ctrl_query_cached_data_from_process_vaddr_range(scratch.arena, process->ctrl_machine_id, process->ctrl_handle, rng, os_now_microseconds()+5000);
machine_code = machine_code_slice.data; machine_code = machine_code_slice.data;
} }
@@ -2895,7 +2895,7 @@ df_trap_net_from_thread__step_over_line(Arena *arena, DF_Entity *thread)
String8 machine_code = {0}; String8 machine_code = {0};
if(good_line_info) if(good_line_info)
{ {
CTRL_ProcessMemorySlice machine_code_slice = ctrl_query_cached_data_from_process_vaddr_range(scratch.arena, process->ctrl_machine_id, process->ctrl_handle, line_vaddr_rng, max_U64); CTRL_ProcessMemorySlice machine_code_slice = ctrl_query_cached_data_from_process_vaddr_range(scratch.arena, process->ctrl_machine_id, process->ctrl_handle, line_vaddr_rng, os_now_microseconds()+5000);
machine_code = machine_code_slice.data; machine_code = machine_code_slice.data;
} }
@@ -3020,7 +3020,7 @@ df_trap_net_from_thread__step_into_line(Arena *arena, DF_Entity *thread)
String8 machine_code = {0}; String8 machine_code = {0};
if(good_line_info) if(good_line_info)
{ {
CTRL_ProcessMemorySlice machine_code_slice = ctrl_query_cached_data_from_process_vaddr_range(scratch.arena, process->ctrl_machine_id, process->ctrl_handle, line_vaddr_rng, max_U64); CTRL_ProcessMemorySlice machine_code_slice = ctrl_query_cached_data_from_process_vaddr_range(scratch.arena, process->ctrl_machine_id, process->ctrl_handle, line_vaddr_rng, os_now_microseconds()+5000);
machine_code = machine_code_slice.data; machine_code = machine_code_slice.data;
} }
@@ -3579,7 +3579,7 @@ df_tls_base_vaddr_from_process_root_rip(DF_Entity *process, U64 root_vaddr, U64
//- rjf: read module's TLS index //- rjf: read module's TLS index
U64 tls_index = 0; U64 tls_index = 0;
{ {
CTRL_ProcessMemorySlice tls_index_slice = ctrl_query_cached_data_from_process_vaddr_range(scratch.arena, process->ctrl_machine_id, process->ctrl_handle, tls_vaddr_range, max_U64); CTRL_ProcessMemorySlice tls_index_slice = ctrl_query_cached_data_from_process_vaddr_range(scratch.arena, process->ctrl_machine_id, process->ctrl_handle, tls_vaddr_range, os_now_microseconds()+5000);
if(tls_index_slice.data.size >= addr_size) if(tls_index_slice.data.size >= addr_size)
{ {
tls_index = *(U64 *)tls_index_slice.data.str; tls_index = *(U64 *)tls_index_slice.data.str;
@@ -3592,13 +3592,13 @@ df_tls_base_vaddr_from_process_root_rip(DF_Entity *process, U64 root_vaddr, U64
U64 thread_info_addr = root_vaddr; U64 thread_info_addr = root_vaddr;
U64 tls_addr_off = tls_index*addr_size; U64 tls_addr_off = tls_index*addr_size;
U64 tls_addr_array = 0; U64 tls_addr_array = 0;
CTRL_ProcessMemorySlice tls_addr_array_slice = ctrl_query_cached_data_from_process_vaddr_range(scratch.arena, process->ctrl_machine_id, process->ctrl_handle, r1u64(thread_info_addr, thread_info_addr+addr_size), 0); CTRL_ProcessMemorySlice tls_addr_array_slice = ctrl_query_cached_data_from_process_vaddr_range(scratch.arena, process->ctrl_machine_id, process->ctrl_handle, r1u64(thread_info_addr, thread_info_addr+addr_size), os_now_microseconds()+5000);
String8 tls_addr_array_data = tls_addr_array_slice.data; String8 tls_addr_array_data = tls_addr_array_slice.data;
if(tls_addr_array_data.size >= 8) if(tls_addr_array_data.size >= 8)
{ {
MemoryCopy(&tls_addr_array, tls_addr_array_data.str, sizeof(U64)); MemoryCopy(&tls_addr_array, tls_addr_array_data.str, sizeof(U64));
} }
CTRL_ProcessMemorySlice result_slice = ctrl_query_cached_data_from_process_vaddr_range(scratch.arena, process->ctrl_machine_id, process->ctrl_handle, r1u64(tls_addr_array + tls_addr_off, tls_addr_array + tls_addr_off + addr_size), 0); CTRL_ProcessMemorySlice result_slice = ctrl_query_cached_data_from_process_vaddr_range(scratch.arena, process->ctrl_machine_id, process->ctrl_handle, r1u64(tls_addr_array + tls_addr_off, tls_addr_array + tls_addr_off + addr_size), os_now_microseconds()+5000);
String8 result_data = result_slice.data; String8 result_data = result_slice.data;
if(result_data.size >= 8) if(result_data.size >= 8)
{ {
+2 -1
View File
@@ -2635,7 +2635,8 @@ ui_signal_from_box(UI_Box *box)
//- rjf: mouse is over this box's rect, no other hot key? -> set hot key, mark hovering //- rjf: mouse is over this box's rect, no other hot key? -> set hot key, mark hovering
// //
{ {
if(contains_2f32(rect, ui_state->mouse) && if(box->flags & UI_BoxFlag_MouseClickable &&
contains_2f32(rect, ui_state->mouse) &&
!contains_2f32(blacklist_rect, ui_state->mouse) && !contains_2f32(blacklist_rect, ui_state->mouse) &&
(ui_key_match(ui_state->hot_box_key, ui_key_zero()) || ui_key_match(ui_state->hot_box_key, box->key)) && (ui_key_match(ui_state->hot_box_key, ui_key_zero()) || ui_key_match(ui_state->hot_box_key, box->key)) &&
(ui_key_match(ui_state->active_box_key[UI_MouseButtonKind_Left], ui_key_zero()) || ui_key_match(ui_state->active_box_key[UI_MouseButtonKind_Left], box->key)) && (ui_key_match(ui_state->active_box_key[UI_MouseButtonKind_Left], ui_key_zero()) || ui_key_match(ui_state->active_box_key[UI_MouseButtonKind_Left], box->key)) &&