sock: fix sends, raddbg_core: send ipc results through socket, back to endpoint from which ipc command(s) originated

This commit is contained in:
Ryan Fleury committed 2026-09-30 08:57:11 -07:00
1 parent d2140ace3d
commit 82aaccd945
3 files changed
+66 -51

No files matched your search

+49 -46
View File
@@ -13748,11 +13748,12 @@ rd_frame(void)
}break;
case RD_CmdKind_State:
{
str8_list_pushf(rd_state->cmd_output_arena, &rd_state->cmd_outputs, "state:\n{\n");
str8_list_pushf(rd_state->cmd_output_arena, &rd_state->cmd_outputs, " running: %i\n", d_ctrl_targets_running());
str8_list_pushf(rd_state->cmd_output_arena, &rd_state->cmd_outputs, " run_gen: %I64u\n", d_run_gen());
str8_list_pushf(rd_state->cmd_output_arena, &rd_state->cmd_outputs, " stop_count: %I64u\n", d_stop_count());
str8_list_pushf(rd_state->cmd_output_arena, &rd_state->cmd_outputs, " ip: 0x%I64x\n", d_ctrl_last_stop_event().rip_vaddr);
String8List state_parts = {0};
str8_list_pushf(scratch.arena, &state_parts, "state:\n{\n");
str8_list_pushf(scratch.arena, &state_parts, " running: %i\n", d_ctrl_targets_running());
str8_list_pushf(scratch.arena, &state_parts, " run_gen: %I64u\n", d_run_gen());
str8_list_pushf(scratch.arena, &state_parts, " stop_count: %I64u\n", d_stop_count());
str8_list_pushf(scratch.arena, &state_parts, " ip: 0x%I64x\n", d_ctrl_last_stop_event().rip_vaddr);
{
Access *access = access_open();
D_Event evt = d_ctrl_last_stop_event();
@@ -13766,28 +13767,28 @@ rd_frame(void)
RDI_Symbol *procedure = rdi_procedure_from_voff(rdi, voff);
String8 name = fully_qualified_str8_from_rdi_symbol(scratch.arena, rdi, procedure);
name = escaped_from_raw_str8(scratch.arena, name);
str8_list_pushf(rd_state->cmd_output_arena, &rd_state->cmd_outputs, " ip_module: \"%S\"\n", str8_skip_last_slash(module->string));
str8_list_pushf(rd_state->cmd_output_arena, &rd_state->cmd_outputs, " ip_voff: 0x%I64x\n", voff);
str8_list_pushf(rd_state->cmd_output_arena, &rd_state->cmd_outputs, " ip_voff_symbol: \"%S\"\n", name);
str8_list_pushf(scratch.arena, &state_parts, " ip_module: \"%S\"\n", str8_skip_last_slash(module->string));
str8_list_pushf(scratch.arena, &state_parts, " ip_voff: 0x%I64x\n", voff);
str8_list_pushf(scratch.arena, &state_parts, " ip_voff_symbol: \"%S\"\n", name);
access_close(access);
}
{
D_Event evt = d_ctrl_last_stop_event();
DR_FStrList explanation_fstrs = rd_stop_explanation_fstrs_from_ctrl_event(scratch.arena, &evt);
String8 explanation_string = dr_string_from_fstrs(scratch.arena, &explanation_fstrs);
str8_list_pushf(rd_state->cmd_output_arena, &rd_state->cmd_outputs, " stop_event:\n {\n");
str8_list_pushf(rd_state->cmd_output_arena, &rd_state->cmd_outputs, " arch: %S\n", string_from_arch(evt.arch));
str8_list_pushf(rd_state->cmd_output_arena, &rd_state->cmd_outputs, " vaddr_range: [0x%I64x, 0x%I64x)\n", evt.vaddr_rng.min, evt.vaddr_rng.max);
str8_list_pushf(rd_state->cmd_output_arena, &rd_state->cmd_outputs, " ip_vaddr: 0x%I64x\n", evt.rip_vaddr);
str8_list_pushf(rd_state->cmd_output_arena, &rd_state->cmd_outputs, " stack_base: 0x%I64x\n", evt.stack_base);
str8_list_pushf(rd_state->cmd_output_arena, &rd_state->cmd_outputs, " tls_root: 0x%I64x\n", evt.tls_root);
str8_list_pushf(rd_state->cmd_output_arena, &rd_state->cmd_outputs, " tls_index: 0x%I64x\n", evt.tls_index);
str8_list_pushf(rd_state->cmd_output_arena, &rd_state->cmd_outputs, " timestamp: 0x%I64x\n", evt.timestamp);
str8_list_pushf(rd_state->cmd_output_arena, &rd_state->cmd_outputs, " exception_code: 0x%I64x\n", (U64)evt.exception_code);
str8_list_pushf(rd_state->cmd_output_arena, &rd_state->cmd_outputs, " bp_flags: 0x%I64x\n", (U64)evt.bp_flags);
str8_list_pushf(rd_state->cmd_output_arena, &rd_state->cmd_outputs, " string: \"%S\"\n", escaped_from_raw_str8(scratch.arena, evt.string));
str8_list_pushf(rd_state->cmd_output_arena, &rd_state->cmd_outputs, " explanation: \"%S\"\n", escaped_from_raw_str8(scratch.arena, explanation_string));
str8_list_pushf(rd_state->cmd_output_arena, &rd_state->cmd_outputs, " }\n");
str8_list_pushf(scratch.arena, &state_parts, " stop_event:\n {\n");
str8_list_pushf(scratch.arena, &state_parts, " arch: %S\n", string_from_arch(evt.arch));
str8_list_pushf(scratch.arena, &state_parts, " vaddr_range: [0x%I64x, 0x%I64x)\n", evt.vaddr_rng.min, evt.vaddr_rng.max);
str8_list_pushf(scratch.arena, &state_parts, " ip_vaddr: 0x%I64x\n", evt.rip_vaddr);
str8_list_pushf(scratch.arena, &state_parts, " stack_base: 0x%I64x\n", evt.stack_base);
str8_list_pushf(scratch.arena, &state_parts, " tls_root: 0x%I64x\n", evt.tls_root);
str8_list_pushf(scratch.arena, &state_parts, " tls_index: 0x%I64x\n", evt.tls_index);
str8_list_pushf(scratch.arena, &state_parts, " timestamp: 0x%I64x\n", evt.timestamp);
str8_list_pushf(scratch.arena, &state_parts, " exception_code: 0x%I64x\n", (U64)evt.exception_code);
str8_list_pushf(scratch.arena, &state_parts, " bp_flags: 0x%I64x\n", (U64)evt.bp_flags);
str8_list_pushf(scratch.arena, &state_parts, " string: \"%S\"\n", escaped_from_raw_str8(scratch.arena, evt.string));
str8_list_pushf(scratch.arena, &state_parts, " explanation: \"%S\"\n", escaped_from_raw_str8(scratch.arena, explanation_string));
str8_list_pushf(scratch.arena, &state_parts, " }\n");
}
{
Access *access = access_open();
@@ -13800,12 +13801,12 @@ rd_frame(void)
DI_Key dbgi_key = d_dbgi_key_from_module(module);
RDI_Parsed *rdi = di_rdi_from_key(access, dbgi_key, 0, 0);
E_String2NumMap *locals_map = e_push_locals_map_from_rdi_voff(scratch.arena, rdi, voff);
str8_list_pushf(rd_state->cmd_output_arena, &rd_state->cmd_outputs, " locals:\n {\n");
str8_list_pushf(scratch.arena, &state_parts, " locals:\n {\n");
for(E_String2NumMapNode *n = locals_map->first; n != 0; n = n->order_next)
{
str8_list_pushf(rd_state->cmd_output_arena, &rd_state->cmd_outputs, " %S\n", n->string);
str8_list_pushf(scratch.arena, &state_parts, " %S\n", n->string);
}
str8_list_pushf(rd_state->cmd_output_arena, &rd_state->cmd_outputs, " }\n");
str8_list_pushf(scratch.arena, &state_parts, " }\n");
access_close(access);
}
{
@@ -13819,48 +13820,50 @@ rd_frame(void)
String8 dbgi_path = dbg_path->string;
DI_Key dbgi_key = d_dbgi_key_from_debug_info_path(dbg_path);
D_LineList lines = d_lines_from_dbgi_key_path_voff(scratch.arena, dbgi_key, dbgi_path, voff);
str8_list_pushf(rd_state->cmd_output_arena, &rd_state->cmd_outputs, " lines:\n {\n");
str8_list_pushf(scratch.arena, &state_parts, " lines:\n {\n");
for EachNode(n, D_LineNode, lines.first)
{
D_Line line = n->v;
String8 line_file_name = str8_skip_last_slash(line.file_path);
str8_list_pushf(rd_state->cmd_output_arena, &rd_state->cmd_outputs, " {\n");
str8_list_pushf(rd_state->cmd_output_arena, &rd_state->cmd_outputs, " file_name: \"%S\"\n", line_file_name);
str8_list_pushf(rd_state->cmd_output_arena, &rd_state->cmd_outputs, " line_num: %I64d\n", line.pt.line);
str8_list_pushf(rd_state->cmd_output_arena, &rd_state->cmd_outputs, " column_num: %I64d\n", line.pt.column);
str8_list_pushf(rd_state->cmd_output_arena, &rd_state->cmd_outputs, " voff_range: [0x%I64x, 0x%I64x)\n", line.voff_range.min, line.voff_range.max);
str8_list_pushf(rd_state->cmd_output_arena, &rd_state->cmd_outputs, " }\n");
str8_list_pushf(scratch.arena, &state_parts, " {\n");
str8_list_pushf(scratch.arena, &state_parts, " file_name: \"%S\"\n", line_file_name);
str8_list_pushf(scratch.arena, &state_parts, " line_num: %I64d\n", line.pt.line);
str8_list_pushf(scratch.arena, &state_parts, " column_num: %I64d\n", line.pt.column);
str8_list_pushf(scratch.arena, &state_parts, " voff_range: [0x%I64x, 0x%I64x)\n", line.voff_range.min, line.voff_range.max);
str8_list_pushf(scratch.arena, &state_parts, " }\n");
}
str8_list_pushf(rd_state->cmd_output_arena, &rd_state->cmd_outputs, " }\n");
str8_list_pushf(scratch.arena, &state_parts, " }\n");
}
{
str8_list_pushf(rd_state->cmd_output_arena, &rd_state->cmd_outputs, " threads:\n {\n");
str8_list_pushf(scratch.arena, &state_parts, " threads:\n {\n");
D_EntityArray threads = d_entity_array_from_kind(D_EntityKind_Thread);
for EachIndex(idx, threads.count)
{
D_Entity *thread = threads.v[idx];
str8_list_pushf(rd_state->cmd_output_arena, &rd_state->cmd_outputs, " {\n");
str8_list_pushf(rd_state->cmd_output_arena, &rd_state->cmd_outputs, " name: \"%S\"\n", escaped_from_raw_str8(scratch.arena, thread->string));
str8_list_pushf(rd_state->cmd_output_arena, &rd_state->cmd_outputs, " id: %I64u\n", thread->id);
str8_list_pushf(rd_state->cmd_output_arena, &rd_state->cmd_outputs, " ip: 0x%I64x\n", d_query_cached_rip_from_thread(thread));
str8_list_pushf(rd_state->cmd_output_arena, &rd_state->cmd_outputs, " }\n");
str8_list_pushf(scratch.arena, &state_parts, " {\n");
str8_list_pushf(scratch.arena, &state_parts, " name: \"%S\"\n", escaped_from_raw_str8(scratch.arena, thread->string));
str8_list_pushf(scratch.arena, &state_parts, " id: %I64u\n", thread->id);
str8_list_pushf(scratch.arena, &state_parts, " ip: 0x%I64x\n", d_query_cached_rip_from_thread(thread));
str8_list_pushf(scratch.arena, &state_parts, " }\n");
}
str8_list_pushf(rd_state->cmd_output_arena, &rd_state->cmd_outputs, " }\n");
str8_list_pushf(scratch.arena, &state_parts, " }\n");
}
{
str8_list_pushf(rd_state->cmd_output_arena, &rd_state->cmd_outputs, " modules:\n {\n");
str8_list_pushf(scratch.arena, &state_parts, " modules:\n {\n");
D_EntityArray modules = d_entity_array_from_kind(D_EntityKind_Module);
for EachIndex(idx, modules.count)
{
D_Entity *module = modules.v[idx];
str8_list_pushf(rd_state->cmd_output_arena, &rd_state->cmd_outputs, " {\n");
str8_list_pushf(rd_state->cmd_output_arena, &rd_state->cmd_outputs, " name: \"%S\"\n", escaped_from_raw_str8(scratch.arena, module->string));
str8_list_pushf(rd_state->cmd_output_arena, &rd_state->cmd_outputs, " vaddr_range: [0x%I64x, 0x%I64x)\n", module->vaddr_range.min, module->vaddr_range.max);
str8_list_pushf(rd_state->cmd_output_arena, &rd_state->cmd_outputs, " }\n");
str8_list_pushf(scratch.arena, &state_parts, " {\n");
str8_list_pushf(scratch.arena, &state_parts, " name: \"%S\"\n", escaped_from_raw_str8(scratch.arena, module->string));
str8_list_pushf(scratch.arena, &state_parts, " vaddr_range: [0x%I64x, 0x%I64x)\n", module->vaddr_range.min, module->vaddr_range.max);
str8_list_pushf(scratch.arena, &state_parts, " }\n");
}
str8_list_pushf(rd_state->cmd_output_arena, &rd_state->cmd_outputs, " }\n");
str8_list_pushf(scratch.arena, &state_parts, " }\n");
}
str8_list_pushf(rd_state->cmd_output_arena, &rd_state->cmd_outputs, "}\n");
str8_list_pushf(scratch.arena, &state_parts, "}\n");
String8 state = str8_list_join(rd_state->cmd_output_arena, &state_parts, 0);
str8_list_push(rd_state->cmd_output_arena, &rd_state->cmd_outputs, state);
}break;
case RD_CmdKind_Eval:
{
+13 -3
View File
@@ -843,12 +843,12 @@ entry_point(CmdLine *cmd_line)
}
//- rjf: receive socket data, run as IPC messages
SOCK_Protocol ipc_protocol = SOCK_Protocol_TCP;
SOCK_Endpoint ipc_endpoint = {0};
{
Temp scratch = scratch_begin(0, 0);
SOCK_Protocol protocol = SOCK_Protocol_TCP;
SOCK_Endpoint endpoint = {0};
String8 msg = {0};
if(sock_recv(scratch.arena, icp_sock_session, &protocol, &endpoint, &msg, 0))
if(sock_recv(scratch.arena, icp_sock_session, &ipc_protocol, &ipc_endpoint, &msg, 0))
{
String8List cmd_parts_of_msg = str8_split(scratch.arena, msg, (U8 *)";", 1, 0);
RD_WindowState *dst_ws = rd_state->first_window_state;
@@ -916,6 +916,7 @@ entry_point(CmdLine *cmd_line)
}
//- rjf: gather command outputs & write them
#if 0
if(ipc_command_frame)
{
if(ipc_main2sender_shared_memory_base != 0 &&
@@ -932,6 +933,15 @@ entry_point(CmdLine *cmd_line)
semaphore_drop(ipc_main2sender_lock_semaphore);
}
}
#endif
//- rjf: gather command outputs & send them back back to sender
if(ipc_command_frame)
{
StringJoin join = {s(""), s("\0"), s("")};
String8 msg = str8_list_join(scratch.arena, &rd_state->cmd_outputs, &join);
sock_send(icp_sock_session, ipc_protocol, ipc_endpoint, msg, now_time_us()+5000000);
}
}
}
+4 -2
View File
@@ -165,7 +165,7 @@ sock_async_tick(void)
struct SendTask
{
SendTask *next;
SOCK_Session session;
W32_SOCK_Session *session;
SOCK_Endpoint endpoint;
String8 data;
};
@@ -193,10 +193,12 @@ sock_async_tick(void)
SOCK_Endpoint endpoint = {0};
endpoint.address_u64[0] = header[2];
endpoint.address_u64[1] = header[3];
endpoint.port = port;
U64 data_size = header[4];
U8 *data = push_array(scratch.arena, U8, data_size);
guarded_ring_read_or_wait(&g, data_size, data, max_U64);
SendTask *t = push_array(scratch.arena, SendTask, 1);
t->session = s;
t->endpoint = endpoint;
t->data = str8(data, data_size);
switch(protocol)
@@ -223,7 +225,7 @@ sock_async_tick(void)
//
for(SendTask *t = first_tcp_send; t != 0; t = t->next)
{
W32_SOCK_Session *session = (W32_SOCK_Session *)t->session.u64[0];
W32_SOCK_Session *session = t->session;
U64 hash = u64_hash_from_str8(str8_struct(&t->endpoint));
U64 slot_idx = hash%session->connection_slots_count;
W32_SOCK_ConnectionSlot *slot = &session->connection_slots[slot_idx];