From 85a07be1acb2a47501f0d71aa603437d070d6698 Mon Sep 17 00:00:00 2001 From: Ryan Fleury Date: Tue, 17 Sep 2024 15:43:39 -0700 Subject: [PATCH] generate meta tables for meta evaluations; use to table-drive ctrl msg serialization, deserialization, meta eval type info generation, and info <-> serialized eval path --- project.4coder | 2 +- src/ctrl/ctrl.mdesk | 58 ++++++++++ src/ctrl/ctrl_core.c | 128 +++++++++++++++------ src/ctrl/ctrl_core.h | 20 ---- src/ctrl/generated/ctrl.meta.c | 60 ++++++++++ src/ctrl/generated/ctrl.meta.h | 38 ++++++ src/dbg_engine/dbg_engine.mdesk | 1 + src/dbg_engine/dbg_engine_core.c | 5 + src/dbg_engine/dbg_engine_core.h | 1 + src/dbg_engine/generated/dbg_engine.meta.h | 1 + src/raddbg/generated/raddbg.meta.c | 3 +- src/raddbg/generated/raddbg.meta.h | 1 + src/raddbg/raddbg_core.c | 6 + 13 files changed, 267 insertions(+), 57 deletions(-) diff --git a/project.4coder b/project.4coder index 394b4247..767c54a9 100644 --- a/project.4coder +++ b/project.4coder @@ -48,7 +48,7 @@ commands = //- rjf: fkey command slots (change locally but do not commit) .f1 = { .win = "build raddbg telemetry", .linux = "", .out = "*compilation*", .footer_panel = true, .save_dirty_files = true, .cursor_at_end = false, }, .f2 = { .win = "build rdi_from_pdb", .linux = "", .out = "*compilation*", .footer_panel = true, .save_dirty_files = true, .cursor_at_end = false, }, - .f3 = { .win = "pushd build && raddbg.exe --user:local_dev.raddbg_user --project:local_dev.raddbg_project && popd", .linux = "", .out = "*compilation*", .footer_panel = true, .save_dirty_files = true, .cursor_at_end = false, }, + .f3 = { .win = "pushd build && raddbg.exe --user:local_dev.raddbg_user --project:local_dev.raddbg_project --auto_step && popd",.linux = "", .out = "*compilation*", .footer_panel = true, .save_dirty_files = true, .cursor_at_end = false, }, //- rjf: local target builds .build_raddbg = { .win = "build raddbg", .linux = "", .out = "*compilation*", .footer_panel = true, .save_dirty_files = true, .cursor_at_end = false, }, diff --git a/src/ctrl/ctrl.mdesk b/src/ctrl/ctrl.mdesk index cf9f33ec..b34f3a8f 100644 --- a/src/ctrl/ctrl.mdesk +++ b/src/ctrl/ctrl.mdesk @@ -1,6 +1,64 @@ // Copyright (c) 2024 Epic Games Tools // Licensed under the MIT license (https://opensource.org/license/mit/) +//////////////////////////////// +//~ rjf: Meta Evaluation Type Information + +@table(name info_type eval_type dynamic) +CTRL_MetaEvalMemberTable: +{ + {enabled S32 S32 } + {frozen S32 S32 } + {hit_count U64 U64 } + {id U64 U64 } + {color U32 U32 } + {label String8 U64 x } + {location String8 U64 x } + {condition String8 U64 x } +} + +@enum CTRL_MetaEvalDynamicKind: +{ + Null, + String8, + COUNT +} + +@struct CTRL_MetaEvalInfo: +{ + @expand(CTRL_MetaEvalMemberTable a) `$(a.info_type) $(a.name)` +} + +@struct CTRL_MetaEval: +{ + @expand(CTRL_MetaEvalMemberTable a) `$(a.eval_type) $(a.name)` +} + +@data(String8) ctrl_meta_eval_member_name_table: +{ + @expand(CTRL_MetaEvalMemberTable a) `str8_lit_comp("$(a.name)")` +} + +@data(Rng1U64) ctrl_meta_eval_info_member_range_table: +{ + @expand(CTRL_MetaEvalMemberTable a) `{OffsetOf(CTRL_MetaEvalInfo, $(a.name)), OffsetOf(CTRL_MetaEvalInfo, $(a.name)) + sizeof($(a.info_type))}` +} + +@data(Rng1U64) ctrl_meta_eval_member_range_table: +{ + @expand(CTRL_MetaEvalMemberTable a) `{OffsetOf(CTRL_MetaEval, $(a.name)), OffsetOf(CTRL_MetaEval, $(a.name)) + sizeof($(a.eval_type))}` +} + +@data(E_TypeKind) ctrl_meta_eval_member_type_kind_table: +{ + @expand(CTRL_MetaEvalMemberTable a) `E_TypeKind_$(a.eval_type)` +} + +@data(CTRL_MetaEvalDynamicKind) ctrl_meta_eval_member_dynamic_kind_table: +{ + @expand(CTRL_MetaEvalMemberTable a) `$(a.dynamic == 'x' -> 'CTRL_MetaEvalDynamicKind_'..a.info_type)$(a.dynamic == '' -> 'CTRL_MetaEvalDynamicKind_Null')` +} + //////////////////////////////// //~ rjf: Entity Kinds diff --git a/src/ctrl/ctrl_core.c b/src/ctrl/ctrl_core.c index 380db628..29d97ef2 100644 --- a/src/ctrl/ctrl_core.c +++ b/src/ctrl/ctrl_core.c @@ -193,14 +193,26 @@ ctrl_meta_eval_from_info(Arena *arena, CTRL_MetaEvalInfo *info) { CTRL_MetaEval *eval = push_array(arena, CTRL_MetaEval, 1); { - String8 label_string = push_str8_copy(arena, info->label); - String8 loc_string = push_str8_copy(arena, info->location); - String8 cnd_string = push_str8_copy(arena, info->condition); - eval->enabled = info->enabled; - eval->hit_count = info->hit_count; - eval->label_off = (U64)((U8 *)label_string.str - (U8 *)eval); - eval->location_off = (U64)((U8 *)loc_string.str - (U8 *)eval); - eval->condition_off= (U64)((U8 *)cnd_string.str - (U8 *)eval); + for(U64 idx = 0; idx < ArrayCount(ctrl_meta_eval_info_member_range_table); idx += 1) + { + switch(ctrl_meta_eval_member_dynamic_kind_table[idx]) + { + default: + case CTRL_MetaEvalDynamicKind_Null: + { + MemoryCopy((U8 *)eval + ctrl_meta_eval_member_range_table[idx].min, + (U8 *)info + ctrl_meta_eval_info_member_range_table[idx].min, + dim_1u64(ctrl_meta_eval_member_range_table[idx])); + }break; + case CTRL_MetaEvalDynamicKind_String8: + { + String8 string = *(String8 *)((U8 *)info + ctrl_meta_eval_info_member_range_table[idx].min); + String8 string_copy = push_str8_copy(arena, string); + U64 off = (string_copy.str - (U8 *)eval); + MemoryCopy((U8 *)eval + ctrl_meta_eval_member_range_table[idx].min, &off, sizeof(U64)); + }break; + } + } } return eval; } @@ -214,9 +226,19 @@ ctrl_meta_eval_info_array_copy(Arena *arena, CTRL_MetaEvalInfoArray *src) MemoryCopy(dst.v, src->v, sizeof(dst.v[0])*dst.count); for(U64 idx = 0; idx < dst.count; idx += 1) { - dst.v[idx].label = push_str8_copy(arena, dst.v[idx].label); - dst.v[idx].location = push_str8_copy(arena, dst.v[idx].location); - dst.v[idx].condition= push_str8_copy(arena, dst.v[idx].condition); + for(U64 member_idx = 0; member_idx < ArrayCount(ctrl_meta_eval_info_member_range_table); member_idx += 1) + { + switch(ctrl_meta_eval_member_dynamic_kind_table[member_idx]) + { + default:{}break; + case CTRL_MetaEvalDynamicKind_String8: + { + String8 string = *(String8 *)((U8 *)(&dst.v[idx]) + ctrl_meta_eval_info_member_range_table[member_idx].min); + String8 string_copy = push_str8_copy(arena, string); + MemoryCopy((U8 *)(&dst.v[idx]) + ctrl_meta_eval_info_member_range_table[member_idx].min, &string_copy, sizeof(String8)); + }break; + } + } } return dst; } @@ -364,14 +386,23 @@ ctrl_serialized_string_from_msg_list(Arena *arena, CTRL_MsgList *msgs) for(U64 idx = 0; idx < msg->meta_eval_infos.count; idx += 1) { CTRL_MetaEvalInfo *mei = &msg->meta_eval_infos.v[idx]; - str8_serial_push_struct(scratch.arena, &msgs_srlzed, &mei->enabled); - str8_serial_push_struct(scratch.arena, &msgs_srlzed, &mei->hit_count); - str8_serial_push_struct(scratch.arena, &msgs_srlzed, &mei->label.size); - str8_serial_push_string(scratch.arena, &msgs_srlzed, mei->label); - str8_serial_push_struct(scratch.arena, &msgs_srlzed, &mei->location.size); - str8_serial_push_string(scratch.arena, &msgs_srlzed, mei->location); - str8_serial_push_struct(scratch.arena, &msgs_srlzed, &mei->condition.size); - str8_serial_push_string(scratch.arena, &msgs_srlzed, mei->condition); + for(U64 member_idx = 0; member_idx < ArrayCount(ctrl_meta_eval_info_member_range_table); member_idx += 1) + { + switch(ctrl_meta_eval_member_dynamic_kind_table[member_idx]) + { + default: + case CTRL_MetaEvalDynamicKind_Null: + { + str8_serial_push_string(scratch.arena, &msgs_srlzed, str8((U8 *)mei + ctrl_meta_eval_info_member_range_table[member_idx].min, dim_1u64(ctrl_meta_eval_info_member_range_table[member_idx]))); + }break; + case CTRL_MetaEvalDynamicKind_String8: + { + String8 string = *(String8 *)((U8 *)mei + ctrl_meta_eval_info_member_range_table[member_idx].min); + str8_serial_push_struct(scratch.arena, &msgs_srlzed, &string.size); + str8_serial_push_string(scratch.arena, &msgs_srlzed, string); + }break; + } + } } } } @@ -491,17 +522,26 @@ ctrl_msg_list_from_serialized_string(Arena *arena, String8 string) for(U64 idx = 0; idx < msg->meta_eval_infos.count; idx += 1) { CTRL_MetaEvalInfo *mei = &msg->meta_eval_infos.v[idx]; - read_off += str8_deserial_read_struct(string, read_off, &mei->enabled); - read_off += str8_deserial_read_struct(string, read_off, &mei->hit_count); - read_off += str8_deserial_read_struct(string, read_off, &mei->label.size); - mei->label.str = push_array_no_zero(arena, U8, mei->label.size); - read_off += str8_deserial_read(string, read_off, mei->label.str, mei->label.size, 1); - read_off += str8_deserial_read_struct(string, read_off, &mei->location.size); - mei->location.str = push_array_no_zero(arena, U8, mei->location.size); - read_off += str8_deserial_read(string, read_off, mei->location.str, mei->location.size, 1); - read_off += str8_deserial_read_struct(string, read_off, &mei->condition.size); - mei->condition.str = push_array_no_zero(arena, U8, mei->condition.size); - read_off += str8_deserial_read(string, read_off, mei->condition.str, mei->condition.size, 1); + for(U64 member_idx = 0; member_idx < ArrayCount(ctrl_meta_eval_info_member_range_table); member_idx += 1) + { + switch(ctrl_meta_eval_member_dynamic_kind_table[member_idx]) + { + default: + case CTRL_MetaEvalDynamicKind_Null: + { + U64 size = dim_1u64(ctrl_meta_eval_info_member_range_table[member_idx]); + read_off += str8_deserial_read(string, read_off, (U8 *)mei + ctrl_meta_eval_info_member_range_table[member_idx].min, size, size); + }break; + case CTRL_MetaEvalDynamicKind_String8: + { + String8 str = {0}; + read_off += str8_deserial_read_struct(string, read_off, &str.size); + str.str = push_array_no_zero(arena, U8, str.size); + read_off += str8_deserial_read(string, read_off, str.str, str.size, 1); + MemoryCopy((U8 *)mei + ctrl_meta_eval_info_member_range_table[member_idx].min, &str, sizeof(str)); + }break; + } + } } } } @@ -1145,6 +1185,11 @@ ctrl_entity_store_apply_events(CTRL_EntityStore *store, CTRL_EventList *list) { CTRL_Entity *process = ctrl_entity_from_handle(store, event->parent); CTRL_Entity *thread = ctrl_entity_alloc(store, process, CTRL_EntityKind_Thread, event->arch, event->entity, (U64)event->entity_id); + CTRL_Entity *first_thread = ctrl_entity_child_from_kind(process, CTRL_EntityKind_Thread); + if(first_thread == thread) + { + ctrl_entity_equip_string(store, thread, str8_lit("main_thread")); + } thread->stack_base = event->stack_base; ctrl_query_cached_rip_from_thread(store, event->entity); }break; @@ -1183,6 +1228,11 @@ ctrl_entity_store_apply_events(CTRL_EntityStore *store, CTRL_EventList *list) ctrl_entity_equip_string(store, module, event->string); module->timestamp = event->timestamp; module->vaddr_range = event->vaddr_rng; + CTRL_Entity *first_module = ctrl_entity_child_from_kind(process, CTRL_EntityKind_Module); + if(first_module == module) + { + ctrl_entity_equip_string(store, process, str8_skip_last_slash(event->string)); + } scratch_end(scratch); }break; case CTRL_EventKind_EndModule: @@ -1214,11 +1264,19 @@ ctrl_meta_eval_type_key(void) Temp scratch = scratch_begin(0, 0); E_MemberList members = {0}; { - e_member_list_push_new(scratch.arena, &members, .name = str8_lit("enabled"), .off = 0, .type_key = e_type_key_basic(E_TypeKind_S64)); - e_member_list_push_new(scratch.arena, &members, .name = str8_lit("hit_count"),.off = 0+8, .type_key = e_type_key_basic(E_TypeKind_U64)); - e_member_list_push_new(scratch.arena, &members, .name = str8_lit("label"), .off = 0+8+8, .type_key = e_type_key_cons_ptr(arch_from_context(), e_type_key_basic(E_TypeKind_Char8))); - e_member_list_push_new(scratch.arena, &members, .name = str8_lit("location"), .off = 0+8+8+8, .type_key = e_type_key_cons_ptr(arch_from_context(), e_type_key_basic(E_TypeKind_Char8))); - e_member_list_push_new(scratch.arena, &members, .name = str8_lit("condition"),.off = 0+8+8+8+8,.type_key = e_type_key_cons_ptr(arch_from_context(), e_type_key_basic(E_TypeKind_Char8))); + for(U64 idx = 0; idx < ArrayCount(ctrl_meta_eval_member_range_table); idx += 1) + { + E_TypeKey member_type_key = e_type_key_basic(ctrl_meta_eval_member_type_kind_table[idx]); + switch(ctrl_meta_eval_member_dynamic_kind_table[idx]) + { + default:{}break; + case CTRL_MetaEvalDynamicKind_String8: + { + member_type_key = e_type_key_cons_ptr(arch_from_context(), e_type_key_basic(E_TypeKind_Char8)); + }break; + } + e_member_list_push_new(scratch.arena, &members, .name = ctrl_meta_eval_member_name_table[idx], .off = ctrl_meta_eval_member_range_table[idx].min, .type_key = member_type_key); + } } E_MemberArray members_array = e_member_array_from_list(scratch.arena, &members); E_TypeKey meta_eval_type_key = e_type_key_cons(.arch = arch_from_context(), diff --git a/src/ctrl/ctrl_core.h b/src/ctrl/ctrl_core.h index 3ba73370..8809e808 100644 --- a/src/ctrl/ctrl_core.h +++ b/src/ctrl/ctrl_core.h @@ -256,16 +256,6 @@ struct CTRL_UserBreakpointList //////////////////////////////// //~ rjf: Meta Evaluation Types -typedef struct CTRL_MetaEvalInfo CTRL_MetaEvalInfo; -struct CTRL_MetaEvalInfo -{ - B64 enabled; - U64 hit_count; - String8 label; - String8 location; - String8 condition; -}; - typedef struct CTRL_MetaEvalInfoArray CTRL_MetaEvalInfoArray; struct CTRL_MetaEvalInfoArray { @@ -273,16 +263,6 @@ struct CTRL_MetaEvalInfoArray U64 count; }; -typedef struct CTRL_MetaEval CTRL_MetaEval; -struct CTRL_MetaEval -{ - B64 enabled; - U64 hit_count; - U64 label_off; - U64 location_off; - U64 condition_off; -}; - typedef struct CTRL_MetaEvalArray CTRL_MetaEvalArray; struct CTRL_MetaEvalArray { diff --git a/src/ctrl/generated/ctrl.meta.c b/src/ctrl/generated/ctrl.meta.c index 26bc0c99..2fe79dd1 100644 --- a/src/ctrl/generated/ctrl.meta.c +++ b/src/ctrl/generated/ctrl.meta.c @@ -4,6 +4,66 @@ //- GENERATED CODE C_LINKAGE_BEGIN +String8 ctrl_meta_eval_member_name_table[8] = +{ +str8_lit_comp("enabled"), +str8_lit_comp("frozen"), +str8_lit_comp("hit_count"), +str8_lit_comp("id"), +str8_lit_comp("color"), +str8_lit_comp("label"), +str8_lit_comp("location"), +str8_lit_comp("condition"), +}; + +Rng1U64 ctrl_meta_eval_info_member_range_table[8] = +{ +{OffsetOf(CTRL_MetaEvalInfo, enabled), OffsetOf(CTRL_MetaEvalInfo, enabled) + sizeof(S32)}, +{OffsetOf(CTRL_MetaEvalInfo, frozen), OffsetOf(CTRL_MetaEvalInfo, frozen) + sizeof(S32)}, +{OffsetOf(CTRL_MetaEvalInfo, hit_count), OffsetOf(CTRL_MetaEvalInfo, hit_count) + sizeof(U64)}, +{OffsetOf(CTRL_MetaEvalInfo, id), OffsetOf(CTRL_MetaEvalInfo, id) + sizeof(U64)}, +{OffsetOf(CTRL_MetaEvalInfo, color), OffsetOf(CTRL_MetaEvalInfo, color) + sizeof(U32)}, +{OffsetOf(CTRL_MetaEvalInfo, label), OffsetOf(CTRL_MetaEvalInfo, label) + sizeof(String8)}, +{OffsetOf(CTRL_MetaEvalInfo, location), OffsetOf(CTRL_MetaEvalInfo, location) + sizeof(String8)}, +{OffsetOf(CTRL_MetaEvalInfo, condition), OffsetOf(CTRL_MetaEvalInfo, condition) + sizeof(String8)}, +}; + +Rng1U64 ctrl_meta_eval_member_range_table[8] = +{ +{OffsetOf(CTRL_MetaEval, enabled), OffsetOf(CTRL_MetaEval, enabled) + sizeof(S32)}, +{OffsetOf(CTRL_MetaEval, frozen), OffsetOf(CTRL_MetaEval, frozen) + sizeof(S32)}, +{OffsetOf(CTRL_MetaEval, hit_count), OffsetOf(CTRL_MetaEval, hit_count) + sizeof(U64)}, +{OffsetOf(CTRL_MetaEval, id), OffsetOf(CTRL_MetaEval, id) + sizeof(U64)}, +{OffsetOf(CTRL_MetaEval, color), OffsetOf(CTRL_MetaEval, color) + sizeof(U32)}, +{OffsetOf(CTRL_MetaEval, label), OffsetOf(CTRL_MetaEval, label) + sizeof(U64)}, +{OffsetOf(CTRL_MetaEval, location), OffsetOf(CTRL_MetaEval, location) + sizeof(U64)}, +{OffsetOf(CTRL_MetaEval, condition), OffsetOf(CTRL_MetaEval, condition) + sizeof(U64)}, +}; + +E_TypeKind ctrl_meta_eval_member_type_kind_table[8] = +{ +E_TypeKind_S32, +E_TypeKind_S32, +E_TypeKind_U64, +E_TypeKind_U64, +E_TypeKind_U32, +E_TypeKind_U64, +E_TypeKind_U64, +E_TypeKind_U64, +}; + +CTRL_MetaEvalDynamicKind ctrl_meta_eval_member_dynamic_kind_table[8] = +{ +CTRL_MetaEvalDynamicKind_Null, +CTRL_MetaEvalDynamicKind_Null, +CTRL_MetaEvalDynamicKind_Null, +CTRL_MetaEvalDynamicKind_Null, +CTRL_MetaEvalDynamicKind_Null, +CTRL_MetaEvalDynamicKind_String8, +CTRL_MetaEvalDynamicKind_String8, +CTRL_MetaEvalDynamicKind_String8, +}; + String8 ctrl_entity_kind_display_string_table[8] = { {0}, diff --git a/src/ctrl/generated/ctrl.meta.h b/src/ctrl/generated/ctrl.meta.h index b5f03424..7ada03fb 100644 --- a/src/ctrl/generated/ctrl.meta.h +++ b/src/ctrl/generated/ctrl.meta.h @@ -6,6 +6,13 @@ #ifndef CTRL_META_H #define CTRL_META_H +typedef enum CTRL_MetaEvalDynamicKind +{ +CTRL_MetaEvalDynamicKind_Null, +CTRL_MetaEvalDynamicKind_String8, +CTRL_MetaEvalDynamicKind_COUNT, +} CTRL_MetaEvalDynamicKind; + typedef enum CTRL_EntityKind { CTRL_EntityKind_Null, @@ -62,7 +69,38 @@ CTRL_ExceptionCodeKind_Win32DirectXDebugLayer, CTRL_ExceptionCodeKind_COUNT, } CTRL_ExceptionCodeKind; +typedef struct CTRL_MetaEvalInfo CTRL_MetaEvalInfo; +struct CTRL_MetaEvalInfo +{ +S32 enabled; +S32 frozen; +U64 hit_count; +U64 id; +U32 color; +String8 label; +String8 location; +String8 condition; +}; + +typedef struct CTRL_MetaEval CTRL_MetaEval; +struct CTRL_MetaEval +{ +S32 enabled; +S32 frozen; +U64 hit_count; +U64 id; +U32 color; +U64 label; +U64 location; +U64 condition; +}; + C_LINKAGE_BEGIN +extern String8 ctrl_meta_eval_member_name_table[8]; +extern Rng1U64 ctrl_meta_eval_info_member_range_table[8]; +extern Rng1U64 ctrl_meta_eval_member_range_table[8]; +extern E_TypeKind ctrl_meta_eval_member_type_kind_table[8]; +extern CTRL_MetaEvalDynamicKind ctrl_meta_eval_member_dynamic_kind_table[8]; extern String8 ctrl_entity_kind_display_string_table[8]; extern U32 ctrl_exception_code_kind_code_table[38]; extern String8 ctrl_exception_code_kind_display_string_table[38]; diff --git a/src/dbg_engine/dbg_engine.mdesk b/src/dbg_engine/dbg_engine.mdesk index 30957c87..b692b44a 100644 --- a/src/dbg_engine/dbg_engine.mdesk +++ b/src/dbg_engine/dbg_engine.mdesk @@ -47,6 +47,7 @@ D_CmdTable: // | | | | //- rjf: entity decoration {SetEntityColor 0 0 Null null Nil 0 0 0 0 0 0 Null "set_thread_color" "Set Thread Color" "Sets the passed entity's color." "" } + {SetEntityName 0 0 Null null Nil 0 0 0 0 0 0 Null "set_thread_color" "Set Thread Color" "Sets the passed entity's name." "" } //- rjf: attaching {Attach 1 1 PID null Nil 0 0 0 0 0 1 Null "attach" "Attach" "Attaches to a process that is already running on the local machine." "" } diff --git a/src/dbg_engine/dbg_engine_core.c b/src/dbg_engine/dbg_engine_core.c index 745cae75..c33ccab2 100644 --- a/src/dbg_engine/dbg_engine_core.c +++ b/src/dbg_engine/dbg_engine_core.c @@ -2453,6 +2453,11 @@ d_tick(Arena *arena, D_TargetArray *targets, D_BreakpointArray *breakpoints, D_P CTRL_Entity *entity = ctrl_entity_from_handle(d_state->ctrl_entity_store, params->entity); entity->rgba = params->rgba; }break; + case D_CmdKind_SetEntityName: + { + CTRL_Entity *entity = ctrl_entity_from_handle(d_state->ctrl_entity_store, params->entity); + ctrl_entity_equip_string(d_state->ctrl_entity_store, entity, params->string); + }break; //- rjf: attaching case D_CmdKind_Attach: diff --git a/src/dbg_engine/dbg_engine_core.h b/src/dbg_engine/dbg_engine_core.h index 8bd2be3f..040e4962 100644 --- a/src/dbg_engine/dbg_engine_core.h +++ b/src/dbg_engine/dbg_engine_core.h @@ -233,6 +233,7 @@ struct D_CmdParams CTRL_Handle thread; CTRL_Handle entity; CTRL_HandleList processes; + String8 string; String8 file_path; TxtPt cursor; U64 vaddr; diff --git a/src/dbg_engine/generated/dbg_engine.meta.h b/src/dbg_engine/generated/dbg_engine.meta.h index fe64d7b8..7acf8e82 100644 --- a/src/dbg_engine/generated/dbg_engine.meta.h +++ b/src/dbg_engine/generated/dbg_engine.meta.h @@ -40,6 +40,7 @@ D_CmdKind_ThawLocalMachine, D_CmdKind_FreezeEntity, D_CmdKind_ThawEntity, D_CmdKind_SetEntityColor, +D_CmdKind_SetEntityName, D_CmdKind_Attach, D_CmdKind_COUNT, } D_CmdKind; diff --git a/src/raddbg/generated/raddbg.meta.c b/src/raddbg/generated/raddbg.meta.c index b4f2ccd0..8fdce2f7 100644 --- a/src/raddbg/generated/raddbg.meta.c +++ b/src/raddbg/generated/raddbg.meta.c @@ -242,7 +242,7 @@ Rng1U64 rd_reg_slot_range_table[32] = {OffsetOf(RD_Regs, os_event), OffsetOf(RD_Regs, os_event) + sizeof(OS_Event *)}, }; -RD_CmdKindInfo rd_cmd_kind_info_table[218] = +RD_CmdKindInfo rd_cmd_kind_info_table[219] = { {0}, { str8_lit_comp("launch_and_run"), str8_lit_comp("Starts debugging a new instance of a target, then runs."), str8_lit_comp("launch,start,run,target"), str8_lit_comp("Launch and Run"), RD_IconKind_Play, (RD_CmdKindFlag_ListInUI*1)|(RD_CmdKindFlag_ListInIPCDocs*1), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Required*1), RD_RegSlot_EntityList, str8_lit_comp(""), RD_EntityKind_Target}}, @@ -276,6 +276,7 @@ RD_CmdKindInfo rd_cmd_kind_info_table[218] = { str8_lit_comp("freeze_entity"), str8_lit_comp("Freezes an entity."), str8_lit_comp(""), str8_lit_comp("Freeze Entity"), RD_IconKind_Null, (RD_CmdKindFlag_ListInUI*0)|(RD_CmdKindFlag_ListInIPCDocs*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), RD_EntityKind_Nil}}, { str8_lit_comp("thaw_entity"), str8_lit_comp("Thaws an entity."), str8_lit_comp(""), str8_lit_comp("Thaw Entity"), RD_IconKind_Null, (RD_CmdKindFlag_ListInUI*0)|(RD_CmdKindFlag_ListInIPCDocs*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), RD_EntityKind_Nil}}, { str8_lit_comp("set_thread_color"), str8_lit_comp("Sets the passed entity's color."), str8_lit_comp(""), str8_lit_comp("Set Thread Color"), RD_IconKind_Null, (RD_CmdKindFlag_ListInUI*0)|(RD_CmdKindFlag_ListInIPCDocs*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), RD_EntityKind_Nil}}, +{ str8_lit_comp("set_thread_color"), str8_lit_comp("Sets the passed entity's name."), str8_lit_comp(""), str8_lit_comp("Set Thread Color"), RD_IconKind_Null, (RD_CmdKindFlag_ListInUI*0)|(RD_CmdKindFlag_ListInIPCDocs*0), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), RD_EntityKind_Nil}}, { str8_lit_comp("attach"), str8_lit_comp("Attaches to a process that is already running on the local machine."), str8_lit_comp(""), str8_lit_comp("Attach"), RD_IconKind_Null, (RD_CmdKindFlag_ListInUI*1)|(RD_CmdKindFlag_ListInIPCDocs*1), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Required*1), RD_RegSlot_PID, str8_lit_comp(""), RD_EntityKind_Nil}}, { str8_lit_comp("exit"), str8_lit_comp("Exits the debugger."), str8_lit_comp("quit,close,abort"), str8_lit_comp("Exit"), RD_IconKind_X, (RD_CmdKindFlag_ListInUI*1)|(RD_CmdKindFlag_ListInIPCDocs*1), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Required*0), RD_RegSlot_Null, str8_lit_comp(""), RD_EntityKind_Nil}}, { str8_lit_comp("run_command"), str8_lit_comp("Runs a command from the command palette."), str8_lit_comp("help,cmd"), str8_lit_comp("Run Command"), RD_IconKind_Null, (RD_CmdKindFlag_ListInUI*1)|(RD_CmdKindFlag_ListInIPCDocs*1), {(RD_QueryFlag_AllowFiles*0)|(RD_QueryFlag_AllowFolders*0)|(RD_QueryFlag_CodeInput*0)|(RD_QueryFlag_KeepOldInput*0)|(RD_QueryFlag_SelectOldInput*0)|(RD_QueryFlag_Required*1), RD_RegSlot_String, str8_lit_comp("commands"), RD_EntityKind_Nil}}, diff --git a/src/raddbg/generated/raddbg.meta.h b/src/raddbg/generated/raddbg.meta.h index 01b27146..ec0f38c7 100644 --- a/src/raddbg/generated/raddbg.meta.h +++ b/src/raddbg/generated/raddbg.meta.h @@ -121,6 +121,7 @@ RD_CmdKind_ThawLocalMachine, RD_CmdKind_FreezeEntity, RD_CmdKind_ThawEntity, RD_CmdKind_SetEntityColor, +RD_CmdKind_SetEntityName, RD_CmdKind_Attach, RD_CmdKind_Exit, RD_CmdKind_RunCommand, diff --git a/src/raddbg/raddbg_core.c b/src/raddbg/raddbg_core.c index 6acea277..9f7d8a28 100644 --- a/src/raddbg/raddbg_core.c +++ b/src/raddbg/raddbg_core.c @@ -10348,6 +10348,7 @@ rd_frame(void) CTRL_MetaEvalInfo *mei = &rd_state->meta_eval_infos.v[meta_eval_info_idx]; mei->enabled = !entity->disabled; mei->hit_count = entity->u64; + mei->color = u32_from_rgba(rd_rgba_from_entity(entity)); mei->label = label_string; mei->location = loc_string; mei->condition = cnd_string; @@ -10366,6 +10367,10 @@ rd_frame(void) for(CTRL_EntityNode *n = list.first; n != 0; n = n->next) { CTRL_Entity *entity = n->v; + CTRL_MetaEvalInfo *mei = &rd_state->meta_eval_infos.v[meta_eval_info_idx]; + mei->label = entity->string; + mei->id = entity->id; + mei->color = entity->rgba; // TODO(rjf): @msgs meta_eval_info_idx += 1; } @@ -10557,6 +10562,7 @@ rd_frame(void) params.thread = rd_regs()->thread; // TODO(rjf): @msgs params.entity = ???; // TODO(rjf): @msgs params.processes = ???; + params.string = rd_regs()->string; params.file_path = rd_regs()->file_path; params.cursor = rd_regs()->cursor; params.vaddr = rd_regs()->vaddr;