mirror of
https://github.com/Ed94/raddebugger.git
synced 2026-06-23 04:04:59 -07:00
demon/linux: launch event info coverage, module path strings, pipe deferred debug info events first on dmn_ctrl_run
This commit is contained in:
@@ -50,6 +50,33 @@ dmn_lnx_write(int memory_fd, Rng1U64 range, void *src)
|
||||
return result;
|
||||
}
|
||||
|
||||
internal String8
|
||||
dmn_lnx_read_string(Arena *arena, int memory_fd, U64 base_vaddr)
|
||||
{
|
||||
String8 result = {0};
|
||||
U64 string_size = 0;
|
||||
for(U64 vaddr = base_vaddr; string_size < 4096; vaddr += 1, string_size += 1)
|
||||
{
|
||||
char byte = 0;
|
||||
if(pread(memory_fd, &byte, sizeof(byte), vaddr) == 0)
|
||||
{
|
||||
break;
|
||||
}
|
||||
if(byte == '\0' || byte == '\n')
|
||||
{
|
||||
break;
|
||||
}
|
||||
}
|
||||
if(string_size != 0)
|
||||
{
|
||||
char *buf = push_array_no_zero(arena, char, string_size+1);
|
||||
pread(memory_fd, buf, string_size, base_vaddr);
|
||||
buf[string_size] = '\0';
|
||||
result = str8((U8 *)buf, string_size);
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
//- rjf: pid => info extraction
|
||||
|
||||
internal String8
|
||||
@@ -654,6 +681,8 @@ dmn_ctrl_launch(DMN_CtrlCtx *ctx, OS_ProcessLaunchParams *params)
|
||||
DMN_Event *e = dmn_event_list_push(dmn_lnx_state->deferred_events_arena, &dmn_lnx_state->deferred_events);
|
||||
e->kind = DMN_EventKind_CreateProcess;
|
||||
e->process = dmn_lnx_handle_from_entity(process);
|
||||
e->arch = process->arch;
|
||||
e->code = pid;
|
||||
}
|
||||
|
||||
// rjf: build thread
|
||||
@@ -666,6 +695,8 @@ dmn_ctrl_launch(DMN_CtrlCtx *ctx, OS_ProcessLaunchParams *params)
|
||||
e->kind = DMN_EventKind_CreateThread;
|
||||
e->process = dmn_lnx_handle_from_entity(process);
|
||||
e->thread = dmn_lnx_handle_from_entity(thread);
|
||||
e->arch = thread->arch;
|
||||
e->code = thread->id;
|
||||
}
|
||||
main_thread = thread;
|
||||
}
|
||||
@@ -684,6 +715,7 @@ dmn_ctrl_launch(DMN_CtrlCtx *ctx, OS_ProcessLaunchParams *params)
|
||||
e->module = dmn_lnx_handle_from_entity(module);
|
||||
e->address = n->v.vaddr_range.min;
|
||||
e->size = dim_1u64(n->v.vaddr_range);
|
||||
e->string = dmn_lnx_read_string(dmn_lnx_state->deferred_events_arena, process->fd, n->v.name);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -693,6 +725,7 @@ dmn_ctrl_launch(DMN_CtrlCtx *ctx, OS_ProcessLaunchParams *params)
|
||||
e->kind = DMN_EventKind_HandshakeComplete;
|
||||
e->process = dmn_lnx_handle_from_entity(process);
|
||||
e->thread = dmn_lnx_handle_from_entity(main_thread);
|
||||
e->arch = process->arch;
|
||||
}
|
||||
}
|
||||
}break;
|
||||
@@ -753,6 +786,22 @@ internal DMN_EventList
|
||||
dmn_ctrl_run(Arena *arena, DMN_CtrlCtx *ctx, DMN_RunCtrls *ctrls)
|
||||
{
|
||||
DMN_EventList evts = {0};
|
||||
{
|
||||
////////////////////////////
|
||||
//- rjf: push any deferred events
|
||||
//
|
||||
{
|
||||
for(DMN_EventNode *n = dmn_lnx_state->deferred_events.first; n != 0; n = n->next)
|
||||
{
|
||||
DMN_Event *e_src = &n->v;
|
||||
DMN_Event *e_dst = dmn_event_list_push(arena, &evts);
|
||||
MemoryCopyStruct(e_dst, e_src);
|
||||
e_dst->string = str8_copy(arena, e_dst->string);
|
||||
}
|
||||
MemoryZeroStruct(&dmn_lnx_state->deferred_events);
|
||||
arena_clear(dmn_lnx_state->deferred_events_arena);
|
||||
}
|
||||
}
|
||||
return evts;
|
||||
}
|
||||
|
||||
|
||||
@@ -116,6 +116,7 @@ internal U64 dmn_lnx_read(int memory_fd, Rng1U64 range, void *dst);
|
||||
internal B32 dmn_lnx_write(int memory_fd, Rng1U64 range, void *src);
|
||||
#define dmn_lnx_read_struct(fd, vaddr, ptr) dmn_lnx_read((fd), r1u64((vaddr), (vaddr)+sizeof(*(ptr))), (ptr))
|
||||
#define dmn_lnx_write_struct(fd, vaddr, ptr) dmn_lnx_write((fd), r1u64((vaddr), (vaddr)+sizeof(*(ptr))), (ptr))
|
||||
internal String8 dmn_lnx_read_string(Arena *arena, int memory_fd, U64 base_vaddr);
|
||||
|
||||
//- rjf: pid => info extraction
|
||||
internal String8 dmn_lnx_exe_path_from_pid(Arena *arena, pid_t pid);
|
||||
|
||||
@@ -2315,6 +2315,7 @@ rd_code_slice(RD_CodeSliceParams *params, TxtPt *cursor, TxtPt *mark, S64 *prefe
|
||||
vaddr = params->line_vaddrs[cursor->line - params->line_num_range.min];
|
||||
lines = params->line_infos[cursor->line - params->line_num_range.min];
|
||||
}
|
||||
rd_cmd(RD_CmdKind_FocusPanel);
|
||||
rd_cmd(RD_CmdKind_PushQuery,
|
||||
.expr = txt_pt_match(*cursor, *mark) ? str8_lit("query:text_pt_commands") : str8_lit("query:text_range_commands"),
|
||||
.do_implicit_root = 1,
|
||||
|
||||
Reference in New Issue
Block a user