mirror of
https://github.com/Ed94/raddebugger.git
synced 2026-08-06 22:08:41 +00: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;
|
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
|
//- rjf: pid => info extraction
|
||||||
|
|
||||||
internal String8
|
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);
|
DMN_Event *e = dmn_event_list_push(dmn_lnx_state->deferred_events_arena, &dmn_lnx_state->deferred_events);
|
||||||
e->kind = DMN_EventKind_CreateProcess;
|
e->kind = DMN_EventKind_CreateProcess;
|
||||||
e->process = dmn_lnx_handle_from_entity(process);
|
e->process = dmn_lnx_handle_from_entity(process);
|
||||||
|
e->arch = process->arch;
|
||||||
|
e->code = pid;
|
||||||
}
|
}
|
||||||
|
|
||||||
// rjf: build thread
|
// rjf: build thread
|
||||||
@@ -666,6 +695,8 @@ dmn_ctrl_launch(DMN_CtrlCtx *ctx, OS_ProcessLaunchParams *params)
|
|||||||
e->kind = DMN_EventKind_CreateThread;
|
e->kind = DMN_EventKind_CreateThread;
|
||||||
e->process = dmn_lnx_handle_from_entity(process);
|
e->process = dmn_lnx_handle_from_entity(process);
|
||||||
e->thread = dmn_lnx_handle_from_entity(thread);
|
e->thread = dmn_lnx_handle_from_entity(thread);
|
||||||
|
e->arch = thread->arch;
|
||||||
|
e->code = thread->id;
|
||||||
}
|
}
|
||||||
main_thread = thread;
|
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->module = dmn_lnx_handle_from_entity(module);
|
||||||
e->address = n->v.vaddr_range.min;
|
e->address = n->v.vaddr_range.min;
|
||||||
e->size = dim_1u64(n->v.vaddr_range);
|
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->kind = DMN_EventKind_HandshakeComplete;
|
||||||
e->process = dmn_lnx_handle_from_entity(process);
|
e->process = dmn_lnx_handle_from_entity(process);
|
||||||
e->thread = dmn_lnx_handle_from_entity(main_thread);
|
e->thread = dmn_lnx_handle_from_entity(main_thread);
|
||||||
|
e->arch = process->arch;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}break;
|
}break;
|
||||||
@@ -753,6 +786,22 @@ internal DMN_EventList
|
|||||||
dmn_ctrl_run(Arena *arena, DMN_CtrlCtx *ctx, DMN_RunCtrls *ctrls)
|
dmn_ctrl_run(Arena *arena, DMN_CtrlCtx *ctx, DMN_RunCtrls *ctrls)
|
||||||
{
|
{
|
||||||
DMN_EventList evts = {0};
|
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;
|
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);
|
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_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))
|
#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
|
//- rjf: pid => info extraction
|
||||||
internal String8 dmn_lnx_exe_path_from_pid(Arena *arena, pid_t pid);
|
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];
|
vaddr = params->line_vaddrs[cursor->line - params->line_num_range.min];
|
||||||
lines = params->line_infos[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,
|
rd_cmd(RD_CmdKind_PushQuery,
|
||||||
.expr = txt_pt_match(*cursor, *mark) ? str8_lit("query:text_pt_commands") : str8_lit("query:text_range_commands"),
|
.expr = txt_pt_match(*cursor, *mark) ? str8_lit("query:text_pt_commands") : str8_lit("query:text_range_commands"),
|
||||||
.do_implicit_root = 1,
|
.do_implicit_root = 1,
|
||||||
|
|||||||
Reference in New Issue
Block a user