From b67d7f729b7c25af9372ad99d3f4af464cabf673 Mon Sep 17 00:00:00 2001 From: Ryan Fleury Date: Fri, 27 Jun 2025 22:59:10 -0700 Subject: [PATCH] do not require eval cache for breakpoint touched-symbols parse/check; reintroduce memory read retry loop - necessary in some cases --- src/ctrl/ctrl_core.c | 28 +++++++++++++++++++++++++--- 1 file changed, 25 insertions(+), 3 deletions(-) diff --git a/src/ctrl/ctrl_core.c b/src/ctrl/ctrl_core.c index 53afdd25..52695c74 100644 --- a/src/ctrl/ctrl_core.c +++ b/src/ctrl/ctrl_core.c @@ -3708,8 +3708,8 @@ ctrl_thread__entry_point(void *p) { continue; } - E_Parse addr_parse = e_parse_from_string(n->v.string); - E_Parse cnd_parse = e_parse_from_string(n->v.condition); + E_Parse addr_parse = e_push_parse_from_string(scratch.arena, n->v.string); + E_Parse cnd_parse = e_push_parse_from_string(scratch.arena, n->v.condition); E_Expr *exprs[] = {addr_parse.expr, cnd_parse.expr}; for EachElement(idx, exprs) { @@ -6824,7 +6824,29 @@ ASYNC_WORK_DEF(ctrl_mem_stream_work) else { range_base = push_array_no_zero(range_arena, U8, range_size); - U64 bytes_read = dmn_process_read(process.dmn_handle, vaddr_range_clamped, range_base); + U64 bytes_read = 0; + U64 retry_count = 0; + U64 retry_limit = range_size > page_size ? 64 : 0; + for(Rng1U64 vaddr_range_clamped_retry = vaddr_range_clamped; + retry_count <= retry_limit; + retry_count += 1) + { + bytes_read = dmn_process_read(process.dmn_handle, vaddr_range_clamped_retry, range_base); + if(bytes_read == 0 && vaddr_range_clamped_retry.max > vaddr_range_clamped_retry.min) + { + U64 diff = (vaddr_range_clamped_retry.max-vaddr_range_clamped_retry.min)/2; + vaddr_range_clamped_retry.max -= diff; + vaddr_range_clamped_retry.max = AlignDownPow2(vaddr_range_clamped_retry.max, page_size); + if(diff == 0) + { + break; + } + } + else + { + break; + } + } if(bytes_read == 0) { arena_release(range_arena);