mirror of
https://github.com/Ed94/raddebugger.git
synced 2026-06-25 13:05:00 -07:00
handle thread name events correllated with only TID, without corresponding thread entity - correllate upon thread creation as-needed
This commit is contained in:
+34
-4
@@ -6597,6 +6597,25 @@ df_core_begin_frame(Arena *arena, DF_CmdList *cmds, F32 dt)
|
||||
df_entity_equip_stack_base(entity, event->stack_base);
|
||||
df_entity_equip_tls_root(entity, event->tls_root);
|
||||
df_entity_equip_vaddr(entity, event->rip_vaddr);
|
||||
if(event->string.size != 0)
|
||||
{
|
||||
df_entity_equip_name(0, entity, event->string);
|
||||
}
|
||||
|
||||
// rjf: find any pending thread names correllating with this TID -> equip name if found match
|
||||
{
|
||||
DF_EntityList pending_thread_names = df_query_cached_entity_list_with_kind(DF_EntityKind_PendingThreadName);
|
||||
for(DF_EntityNode *n = pending_thread_names.first; n != 0; n = n->next)
|
||||
{
|
||||
DF_Entity *pending_thread_name = n->entity;
|
||||
if(event->machine_id == pending_thread_name->ctrl_machine_id && event->entity_id == pending_thread_name->ctrl_id)
|
||||
{
|
||||
df_entity_mark_for_deletion(pending_thread_name);
|
||||
df_entity_equip_name(0, entity, pending_thread_name->name);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// rjf: determine index in process
|
||||
U64 thread_idx_in_process = 0;
|
||||
@@ -6730,14 +6749,25 @@ df_core_begin_frame(Arena *arena, DF_CmdList *cmds, F32 dt)
|
||||
case CTRL_EventKind_ThreadName:
|
||||
{
|
||||
String8 string = event->string;
|
||||
DF_Entity *thread = df_entity_from_ctrl_handle(event->machine_id, event->entity);
|
||||
DF_Entity *entity = df_entity_from_ctrl_handle(event->machine_id, event->entity);
|
||||
if(event->entity_id != 0)
|
||||
{
|
||||
thread = df_entity_from_ctrl_id(event->machine_id, event->entity_id);
|
||||
entity = df_entity_from_ctrl_id(event->machine_id, event->entity_id);
|
||||
}
|
||||
if(!df_entity_is_nil(thread))
|
||||
if(df_entity_is_nil(entity))
|
||||
{
|
||||
df_entity_equip_name(0, thread, string);
|
||||
DF_Entity *process = df_entity_from_ctrl_handle(event->machine_id, event->parent);
|
||||
if(!df_entity_is_nil(process))
|
||||
{
|
||||
entity = df_entity_alloc(0, process, DF_EntityKind_PendingThreadName);
|
||||
df_entity_equip_name(0, entity, string);
|
||||
df_entity_equip_ctrl_machine_id(entity, event->machine_id);
|
||||
df_entity_equip_ctrl_id(entity, event->entity_id);
|
||||
}
|
||||
}
|
||||
if(!df_entity_is_nil(entity))
|
||||
{
|
||||
df_entity_equip_name(0, entity, string);
|
||||
}
|
||||
}break;
|
||||
|
||||
|
||||
@@ -66,6 +66,7 @@ DF_EntityKindTable:
|
||||
{Thread thread 0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 "Label" Thread "Thread" }
|
||||
{Module module 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 "Label" Module "Module" }
|
||||
{DebugInfoOverride debug_info_override 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 0 0 "Label" Null "Debug Info Override" }
|
||||
{PendingThreadName pending_thread_name 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 "Label" Threads "Pending Thread Name" }
|
||||
|
||||
//- rjf: parser task entities
|
||||
{ConversionTask conversion_task 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 "Label" Null "Conversion Task" }
|
||||
|
||||
@@ -40,6 +40,7 @@ DF_EntityKind_Process,
|
||||
DF_EntityKind_Thread,
|
||||
DF_EntityKind_Module,
|
||||
DF_EntityKind_DebugInfoOverride,
|
||||
DF_EntityKind_PendingThreadName,
|
||||
DF_EntityKind_ConversionTask,
|
||||
DF_EntityKind_ConversionFail,
|
||||
DF_EntityKind_EndedProcess,
|
||||
@@ -1555,6 +1556,7 @@ DF_IconKind_Threads,
|
||||
DF_IconKind_Thread,
|
||||
DF_IconKind_Module,
|
||||
DF_IconKind_Null,
|
||||
DF_IconKind_Threads,
|
||||
DF_IconKind_Null,
|
||||
DF_IconKind_Null,
|
||||
DF_IconKind_Null,
|
||||
@@ -1585,6 +1587,7 @@ str8_lit_comp("Process"),
|
||||
str8_lit_comp("Thread"),
|
||||
str8_lit_comp("Module"),
|
||||
str8_lit_comp("Debug Info Override"),
|
||||
str8_lit_comp("Pending Thread Name"),
|
||||
str8_lit_comp("Conversion Task"),
|
||||
str8_lit_comp("Conversion Failure"),
|
||||
str8_lit_comp("EndedProcess"),
|
||||
@@ -1618,6 +1621,7 @@ str8_lit_comp("Label"),
|
||||
str8_lit_comp("Label"),
|
||||
str8_lit_comp("Label"),
|
||||
str8_lit_comp("Label"),
|
||||
str8_lit_comp("Label"),
|
||||
};
|
||||
|
||||
DF_EntityKindFlags df_g_entity_kind_flags_table[] =
|
||||
@@ -1648,6 +1652,7 @@ DF_EntityKindFlags df_g_entity_kind_flags_table[] =
|
||||
(0*DF_EntityKindFlag_LeafMutationUserConfig | 0*DF_EntityKindFlag_LeafMutationProfileConfig | 0*DF_EntityKindFlag_LeafMutationSoftHalt | 0*DF_EntityKindFlag_LeafMutationDebugInfoMap | 0*DF_EntityKindFlag_TreeMutationUserConfig | 0*DF_EntityKindFlag_TreeMutationProfileConfig | 0*DF_EntityKindFlag_TreeMutationSoftHalt | 0*DF_EntityKindFlag_TreeMutationDebugInfoMap | 0*DF_EntityKindFlag_NameIsCode | 0*DF_EntityKindFlag_UserDefinedLifetime),
|
||||
(0*DF_EntityKindFlag_LeafMutationUserConfig | 0*DF_EntityKindFlag_LeafMutationProfileConfig | 0*DF_EntityKindFlag_LeafMutationSoftHalt | 0*DF_EntityKindFlag_LeafMutationDebugInfoMap | 0*DF_EntityKindFlag_TreeMutationUserConfig | 0*DF_EntityKindFlag_TreeMutationProfileConfig | 0*DF_EntityKindFlag_TreeMutationSoftHalt | 0*DF_EntityKindFlag_TreeMutationDebugInfoMap | 0*DF_EntityKindFlag_NameIsCode | 0*DF_EntityKindFlag_UserDefinedLifetime),
|
||||
(0*DF_EntityKindFlag_LeafMutationUserConfig | 0*DF_EntityKindFlag_LeafMutationProfileConfig | 0*DF_EntityKindFlag_LeafMutationSoftHalt | 0*DF_EntityKindFlag_LeafMutationDebugInfoMap | 0*DF_EntityKindFlag_TreeMutationUserConfig | 0*DF_EntityKindFlag_TreeMutationProfileConfig | 0*DF_EntityKindFlag_TreeMutationSoftHalt | 0*DF_EntityKindFlag_TreeMutationDebugInfoMap | 0*DF_EntityKindFlag_NameIsCode | 0*DF_EntityKindFlag_UserDefinedLifetime),
|
||||
(0*DF_EntityKindFlag_LeafMutationUserConfig | 0*DF_EntityKindFlag_LeafMutationProfileConfig | 0*DF_EntityKindFlag_LeafMutationSoftHalt | 0*DF_EntityKindFlag_LeafMutationDebugInfoMap | 0*DF_EntityKindFlag_TreeMutationUserConfig | 0*DF_EntityKindFlag_TreeMutationProfileConfig | 0*DF_EntityKindFlag_TreeMutationSoftHalt | 0*DF_EntityKindFlag_TreeMutationDebugInfoMap | 0*DF_EntityKindFlag_NameIsCode | 0*DF_EntityKindFlag_UserDefinedLifetime),
|
||||
};
|
||||
|
||||
DF_EntityOpFlags df_g_entity_kind_op_flags_table[] =
|
||||
@@ -1675,6 +1680,7 @@ DF_EntityOpFlags df_g_entity_kind_op_flags_table[] =
|
||||
(0*DF_EntityOpFlag_Delete) | (1*DF_EntityOpFlag_Freeze) | (0*DF_EntityOpFlag_Edit) | (1*DF_EntityOpFlag_Rename) | (0*DF_EntityOpFlag_Enable) | (0*DF_EntityOpFlag_Condition) | (0*DF_EntityOpFlag_Duplicate),
|
||||
(0*DF_EntityOpFlag_Delete) | (0*DF_EntityOpFlag_Freeze) | (0*DF_EntityOpFlag_Edit) | (0*DF_EntityOpFlag_Rename) | (0*DF_EntityOpFlag_Enable) | (0*DF_EntityOpFlag_Condition) | (0*DF_EntityOpFlag_Duplicate),
|
||||
(0*DF_EntityOpFlag_Delete) | (0*DF_EntityOpFlag_Freeze) | (0*DF_EntityOpFlag_Edit) | (0*DF_EntityOpFlag_Rename) | (0*DF_EntityOpFlag_Enable) | (0*DF_EntityOpFlag_Condition) | (0*DF_EntityOpFlag_Duplicate),
|
||||
(0*DF_EntityOpFlag_Delete) | (0*DF_EntityOpFlag_Freeze) | (0*DF_EntityOpFlag_Edit) | (0*DF_EntityOpFlag_Rename) | (0*DF_EntityOpFlag_Enable) | (0*DF_EntityOpFlag_Condition) | (0*DF_EntityOpFlag_Duplicate),
|
||||
(0*DF_EntityOpFlag_Delete) | (0*DF_EntityOpFlag_Freeze) | (0*DF_EntityOpFlag_Edit) | (1*DF_EntityOpFlag_Rename) | (0*DF_EntityOpFlag_Enable) | (0*DF_EntityOpFlag_Condition) | (0*DF_EntityOpFlag_Duplicate),
|
||||
(0*DF_EntityOpFlag_Delete) | (0*DF_EntityOpFlag_Freeze) | (0*DF_EntityOpFlag_Edit) | (1*DF_EntityOpFlag_Rename) | (0*DF_EntityOpFlag_Enable) | (0*DF_EntityOpFlag_Condition) | (0*DF_EntityOpFlag_Duplicate),
|
||||
(1*DF_EntityOpFlag_Delete) | (0*DF_EntityOpFlag_Freeze) | (0*DF_EntityOpFlag_Edit) | (1*DF_EntityOpFlag_Rename) | (0*DF_EntityOpFlag_Enable) | (0*DF_EntityOpFlag_Condition) | (0*DF_EntityOpFlag_Duplicate),
|
||||
|
||||
Reference in New Issue
Block a user