mirror of
https://github.com/Ed94/raddebugger.git
synced 2026-08-02 20:18:12 +00:00
rdi_make, rdi_from_pdb, rdi_dump: sketch out the building (no parsing/filling yet), dumping, and baking/serializing of inline sites
This commit is contained in:
+25
-1
@@ -580,7 +580,8 @@ rdi_stringize_procedure(Arena *arena, String8List *out, RDI_Parsed *rdi,
|
||||
|
||||
internal void
|
||||
rdi_stringize_scope(Arena *arena, String8List *out, RDI_Parsed *rdi,
|
||||
RDI_ScopeBundle *bundle, RDI_Scope *scope, U32 indent_level){
|
||||
RDI_ScopeBundle *bundle, RDI_Scope *scope, U32 indent_level)
|
||||
{
|
||||
|
||||
U32 this_idx = (U32)(scope - bundle->scopes);
|
||||
|
||||
@@ -590,6 +591,12 @@ rdi_stringize_scope(Arena *arena, String8List *out, RDI_Parsed *rdi,
|
||||
str8_list_pushf(arena, out, "%.*s proc_idx=%u\n",
|
||||
indent_level, rdi_stringize_spaces, scope->proc_idx);
|
||||
|
||||
if(scope->inline_site_idx != 0)
|
||||
{
|
||||
str8_list_pushf(arena, out, "%.*s inline_site_idx=%u\n",
|
||||
indent_level, rdi_stringize_spaces, scope->inline_site_idx);
|
||||
}
|
||||
|
||||
// voff ranges
|
||||
{
|
||||
U32 voff_range_first_raw = scope->voff_range_first;
|
||||
@@ -765,3 +772,20 @@ rdi_stringize_scope(Arena *arena, String8List *out, RDI_Parsed *rdi,
|
||||
str8_list_pushf(arena, out, "%.*s[/%u]\n",
|
||||
indent_level, rdi_stringize_spaces, this_idx);
|
||||
}
|
||||
|
||||
internal void
|
||||
rdi_stringize_inline_site(Arena *arena, String8List *out, RDI_Parsed *rdi, RDI_InlineSite *inline_site, U32 indent_level)
|
||||
{
|
||||
String8 name = {0};
|
||||
name.str = rdi_string_from_idx(rdi, inline_site->name_string_idx, &name.size);
|
||||
RDI_SourceFile *source_file = rdi_element_from_name_idx(rdi, SourceFiles, inline_site->call_src_file_idx);
|
||||
String8 source_file_path = {0};
|
||||
source_file_path.str = rdi_normal_path_from_source_file(rdi, source_file, &source_file_path.size);
|
||||
str8_list_pushf(arena, out, "%.*sname='%S'\n", indent_level, rdi_stringize_spaces, name);
|
||||
str8_list_pushf(arena, out, "%.*scall_src_file_idx=%u ('%S')\n", indent_level, rdi_stringize_spaces, inline_site->call_src_file_idx, source_file_path);
|
||||
str8_list_pushf(arena, out, "%.*scall_line_num=%u\n", indent_level, rdi_stringize_spaces, inline_site->call_line_num);
|
||||
str8_list_pushf(arena, out, "%.*scall_col_num=%u\n", indent_level, rdi_stringize_spaces, inline_site->call_col_num);
|
||||
str8_list_pushf(arena, out, "%.*stype_idx=%u\n", indent_level, rdi_stringize_spaces, inline_site->type_idx);
|
||||
str8_list_pushf(arena, out, "%.*sowner_type_idx=%u\n", indent_level, rdi_stringize_spaces, inline_site->owner_type_idx);
|
||||
str8_list_pushf(arena, out, "%.*sline_table_idx=%u\n", indent_level, rdi_stringize_spaces, inline_site->line_table_idx);
|
||||
}
|
||||
|
||||
@@ -73,5 +73,6 @@ internal void rdi_stringize_global_variable(Arena *arena, String8List *out, RDI_
|
||||
internal void rdi_stringize_thread_variable(Arena *arena, String8List *out, RDI_Parsed *rdi, RDI_ThreadVariable *thread_var, U32 indent_level);
|
||||
internal void rdi_stringize_procedure(Arena *arena, String8List *out, RDI_Parsed *rdi, RDI_Procedure *proc, U32 indent_level);
|
||||
internal void rdi_stringize_scope(Arena *arena, String8List *out, RDI_Parsed *rdi, RDI_ScopeBundle *bundle, RDI_Scope *scope, U32 indent_level);
|
||||
internal void rdi_stringize_inline_site(Arena *arena, String8List *out, RDI_Parsed *rdi, RDI_InlineSite *inline_site, U32 indent_level);
|
||||
|
||||
#endif // RDI_DUMP_H
|
||||
|
||||
@@ -65,8 +65,9 @@ entry_point(CmdLine *cmd_line)
|
||||
DumpFlag_Procedures = (1<<14),
|
||||
DumpFlag_Scopes = (1<<15),
|
||||
DumpFlag_ScopeVMap = (1<<16),
|
||||
DumpFlag_NameMaps = (1<<17),
|
||||
DumpFlag_Strings = (1<<18),
|
||||
DumpFlag_InlineSites = (1<<17),
|
||||
DumpFlag_NameMaps = (1<<18),
|
||||
DumpFlag_Strings = (1<<19),
|
||||
};
|
||||
String8 input_name = {0};
|
||||
DumpFlags dump_flags = (U32)0xffffffff;
|
||||
@@ -100,6 +101,7 @@ entry_point(CmdLine *cmd_line)
|
||||
else if(str8_match(n->string, str8_lit("procedures"), StringMatchFlag_CaseInsensitive)) { dump_flags |= DumpFlag_Procedures; }
|
||||
else if(str8_match(n->string, str8_lit("scopes"), StringMatchFlag_CaseInsensitive)) { dump_flags |= DumpFlag_Scopes; }
|
||||
else if(str8_match(n->string, str8_lit("scope_vmap"), StringMatchFlag_CaseInsensitive)) { dump_flags |= DumpFlag_ScopeVMap; }
|
||||
else if(str8_match(n->string, str8_lit("inline_sites"), StringMatchFlag_CaseInsensitive)) { dump_flags |= DumpFlag_InlineSites; }
|
||||
else if(str8_match(n->string, str8_lit("name_maps"), StringMatchFlag_CaseInsensitive)) { dump_flags |= DumpFlag_NameMaps; }
|
||||
else if(str8_match(n->string, str8_lit("strings"), StringMatchFlag_CaseInsensitive)) { dump_flags |= DumpFlag_Strings; }
|
||||
}
|
||||
@@ -424,6 +426,20 @@ entry_point(CmdLine *cmd_line)
|
||||
str8_list_push(arena, &dump, str8_lit("\n"));
|
||||
}
|
||||
|
||||
//- rjf: INLINE SITES
|
||||
if(dump_flags & DumpFlag_InlineSites)
|
||||
{
|
||||
str8_list_pushf(arena, &dump, "# INLINE SITES:\n");
|
||||
U64 count = 0;
|
||||
RDI_InlineSite *v = rdi_table_from_name(rdi, InlineSites, &count);
|
||||
for(U64 idx = 0; idx < count; idx += 1)
|
||||
{
|
||||
str8_list_pushf(arena, &dump, " inline_site[%I64u]:\n", idx);
|
||||
rdi_stringize_inline_site(arena, &dump, rdi, &v[idx], 2);
|
||||
}
|
||||
str8_list_push(arena, &dump, str8_lit("\n"));
|
||||
}
|
||||
|
||||
//- rjf: NAME MAPS
|
||||
if(dump_flags & DumpFlag_NameMaps)
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user