mirror of
https://github.com/Ed94/raddebugger.git
synced 2026-07-10 11:31:37 -07:00
raddbg -> raddbgi
This commit is contained in:
@@ -159,12 +159,12 @@ main(int argc, char **argv){
|
||||
// will we try to parse an input file
|
||||
B32 try_parse_input = (params->errors.node_count == 0);
|
||||
|
||||
RADDBG_ParseStatus parse_status = RADDBG_ParseStatus_Good;
|
||||
RADDBG_Parsed raddbg__ = {0};
|
||||
RADDBG_Parsed *raddbg = 0;
|
||||
RADDBGI_ParseStatus parse_status = RADDBGI_ParseStatus_Good;
|
||||
RADDBGI_Parsed raddbg__ = {0};
|
||||
RADDBGI_Parsed *raddbg = 0;
|
||||
if (try_parse_input){
|
||||
parse_status = raddbg_parse(params->input_data.str, params->input_data.size, &raddbg__);
|
||||
if (parse_status == RADDBG_ParseStatus_Good){
|
||||
parse_status = raddbgi_parse(params->input_data.str, params->input_data.size, &raddbg__);
|
||||
if (parse_status == RADDBGI_ParseStatus_Good){
|
||||
raddbg = &raddbg__;
|
||||
}
|
||||
}
|
||||
@@ -181,24 +181,24 @@ main(int argc, char **argv){
|
||||
// DATA SECTIONS
|
||||
if (raddbg->dsecs != 0 && params->dump_data_sections){
|
||||
str8_list_pushf(arena, &dump, "# DATA SECTIONS:\n");
|
||||
raddbg_stringize_data_sections(arena, &dump, raddbg, 1);
|
||||
raddbgi_stringize_data_sections(arena, &dump, raddbg, 1);
|
||||
str8_list_push(arena, &dump, str8_lit("\n"));
|
||||
}
|
||||
|
||||
// TOP LEVEL INFO
|
||||
if (raddbg->top_level_info != 0 && params->dump_top_level_info){
|
||||
str8_list_pushf(arena, &dump, "# TOP LEVEL INFO:\n");
|
||||
raddbg_stringize_top_level_info(arena, &dump, raddbg, raddbg->top_level_info, 1);
|
||||
raddbgi_stringize_top_level_info(arena, &dump, raddbg, raddbg->top_level_info, 1);
|
||||
str8_list_push(arena, &dump, str8_lit("\n"));
|
||||
}
|
||||
|
||||
// BINARY SECTIONS
|
||||
if (raddbg->binary_sections != 0 && params->dump_binary_sections){
|
||||
str8_list_pushf(arena, &dump, "# BINARY SECTIONS:\n");
|
||||
RADDBG_BinarySection *ptr = raddbg->binary_sections;
|
||||
RADDBGI_BinarySection *ptr = raddbg->binary_sections;
|
||||
for (U32 i = 0; i < raddbg->binary_sections_count; i += 1, ptr += 1){
|
||||
str8_list_pushf(arena, &dump, " section[%u]:\n", i);
|
||||
raddbg_stringize_binary_section(arena, &dump, raddbg, ptr, 2);
|
||||
raddbgi_stringize_binary_section(arena, &dump, raddbg, ptr, 2);
|
||||
str8_list_push(arena, &dump, str8_lit("\n"));
|
||||
}
|
||||
str8_list_push(arena, &dump, str8_lit("\n"));
|
||||
@@ -206,17 +206,17 @@ main(int argc, char **argv){
|
||||
|
||||
// FILE PATHS
|
||||
if (raddbg->file_paths != 0 && params->dump_file_paths){
|
||||
RADDBG_FilePathBundle file_path_bundle = {0};
|
||||
RADDBGI_FilePathBundle file_path_bundle = {0};
|
||||
{
|
||||
file_path_bundle.file_paths = raddbg->file_paths;
|
||||
file_path_bundle.file_path_count = raddbg->file_paths_count;
|
||||
}
|
||||
|
||||
str8_list_pushf(arena, &dump, "# FILE PATHS\n");
|
||||
RADDBG_FilePathNode *ptr = raddbg->file_paths;
|
||||
RADDBGI_FilePathNode *ptr = raddbg->file_paths;
|
||||
for (U32 i = 0; i < raddbg->file_paths_count; i += 1, ptr += 1){
|
||||
if (ptr->parent_path_node == 0){
|
||||
raddbg_stringize_file_path(arena, &dump, raddbg, &file_path_bundle, ptr, 1);
|
||||
raddbgi_stringize_file_path(arena, &dump, raddbg, &file_path_bundle, ptr, 1);
|
||||
}
|
||||
}
|
||||
str8_list_push(arena, &dump, str8_lit("\n"));
|
||||
@@ -225,10 +225,10 @@ main(int argc, char **argv){
|
||||
// SOURCE FILES
|
||||
if (raddbg->source_files != 0 && params->dump_source_files){
|
||||
str8_list_pushf(arena, &dump, "# SOURCE FILES\n");
|
||||
RADDBG_SourceFile *ptr = raddbg->source_files;
|
||||
RADDBGI_SourceFile *ptr = raddbg->source_files;
|
||||
for (U32 i = 0; i < raddbg->source_files_count; i += 1, ptr += 1){
|
||||
str8_list_pushf(arena, &dump, " source_file[%u]:\n", i);
|
||||
raddbg_stringize_source_file(arena, &dump, raddbg, ptr, 2);
|
||||
raddbgi_stringize_source_file(arena, &dump, raddbg, ptr, 2);
|
||||
str8_list_push(arena, &dump, str8_lit("\n"));
|
||||
}
|
||||
str8_list_push(arena, &dump, str8_lit("\n"));
|
||||
@@ -237,10 +237,10 @@ main(int argc, char **argv){
|
||||
// UNITS
|
||||
if (raddbg->units != 0 && params->dump_units){
|
||||
str8_list_pushf(arena, &dump, "# UNITS\n");
|
||||
RADDBG_Unit *ptr = raddbg->units;
|
||||
RADDBGI_Unit *ptr = raddbg->units;
|
||||
for (U32 i = 0; i < raddbg->units_count; i += 1, ptr += 1){
|
||||
str8_list_pushf(arena, &dump, " unit[%u]:\n", i);
|
||||
raddbg_stringize_unit(arena, &dump, raddbg, ptr, 2);
|
||||
raddbgi_stringize_unit(arena, &dump, raddbg, ptr, 2);
|
||||
str8_list_push(arena, &dump, str8_lit("\n"));
|
||||
}
|
||||
str8_list_push(arena, &dump, str8_lit("\n"));
|
||||
@@ -249,7 +249,7 @@ main(int argc, char **argv){
|
||||
// UNIT VMAP
|
||||
if (raddbg->unit_vmap != 0 && params->dump_unit_vmap){
|
||||
str8_list_pushf(arena, &dump, "# UNIT VMAP\n");
|
||||
RADDBG_VMapEntry *ptr = raddbg->unit_vmap;
|
||||
RADDBGI_VMapEntry *ptr = raddbg->unit_vmap;
|
||||
for (U32 i = 0; i < raddbg->unit_vmap_count; i += 1, ptr += 1){
|
||||
str8_list_pushf(arena, &dump, " 0x%08x: %llu\n", ptr->voff, ptr->idx);
|
||||
}
|
||||
@@ -259,10 +259,10 @@ main(int argc, char **argv){
|
||||
// TYPE NODES
|
||||
if (raddbg->type_nodes != 0 && params->dump_type_nodes){
|
||||
str8_list_pushf(arena, &dump, "# TYPE NODES:\n");
|
||||
RADDBG_TypeNode *ptr = raddbg->type_nodes;
|
||||
RADDBGI_TypeNode *ptr = raddbg->type_nodes;
|
||||
for (U32 i = 0; i < raddbg->type_nodes_count; i += 1, ptr += 1){
|
||||
str8_list_pushf(arena, &dump, " type[%u]:\n", i);
|
||||
raddbg_stringize_type_node(arena, &dump, raddbg, ptr, 2);
|
||||
raddbgi_stringize_type_node(arena, &dump, raddbg, ptr, 2);
|
||||
str8_list_push(arena, &dump, str8_lit("\n"));
|
||||
}
|
||||
str8_list_push(arena, &dump, str8_lit("\n"));
|
||||
@@ -270,7 +270,7 @@ main(int argc, char **argv){
|
||||
|
||||
// UDT DATA
|
||||
if (raddbg->udts != 0 && params->dump_udt_data){
|
||||
RADDBG_UDTMemberBundle member_bundle = {0};
|
||||
RADDBGI_UDTMemberBundle member_bundle = {0};
|
||||
{
|
||||
member_bundle.members = raddbg->members;
|
||||
member_bundle.enum_members = raddbg->enum_members;
|
||||
@@ -279,10 +279,10 @@ main(int argc, char **argv){
|
||||
}
|
||||
|
||||
str8_list_pushf(arena, &dump, "# UDTS:\n");
|
||||
RADDBG_UDT *ptr = raddbg->udts;
|
||||
RADDBGI_UDT *ptr = raddbg->udts;
|
||||
for (U32 i = 0; i < raddbg->udts_count; i += 1, ptr += 1){
|
||||
str8_list_pushf(arena, &dump, " udt[%u]:\n", i);
|
||||
raddbg_stringize_udt(arena, &dump, raddbg, &member_bundle, ptr, 2);
|
||||
raddbgi_stringize_udt(arena, &dump, raddbg, &member_bundle, ptr, 2);
|
||||
str8_list_push(arena, &dump, str8_lit("\n"));
|
||||
}
|
||||
str8_list_push(arena, &dump, str8_lit("\n"));
|
||||
@@ -291,10 +291,10 @@ main(int argc, char **argv){
|
||||
// GLOBAL VARIABLES
|
||||
if (raddbg->global_variables != 0 && params->dump_global_variables){
|
||||
str8_list_pushf(arena, &dump, "# GLOBAL VARIABLES:\n");
|
||||
RADDBG_GlobalVariable *ptr = raddbg->global_variables;
|
||||
RADDBGI_GlobalVariable *ptr = raddbg->global_variables;
|
||||
for (U32 i = 0; i < raddbg->global_variables_count; i += 1, ptr += 1){
|
||||
str8_list_pushf(arena, &dump, " global_variable[%u]:\n", i);
|
||||
raddbg_stringize_global_variable(arena, &dump, raddbg, ptr, 2);
|
||||
raddbgi_stringize_global_variable(arena, &dump, raddbg, ptr, 2);
|
||||
str8_list_push(arena, &dump, str8_lit("\n"));
|
||||
}
|
||||
str8_list_push(arena, &dump, str8_lit("\n"));
|
||||
@@ -303,7 +303,7 @@ main(int argc, char **argv){
|
||||
// GLOBAL VMAP
|
||||
if (raddbg->global_vmap != 0 && params->dump_global_vmap){
|
||||
str8_list_pushf(arena, &dump, "# GLOBAL VMAP:\n");
|
||||
RADDBG_VMapEntry *ptr = raddbg->global_vmap;
|
||||
RADDBGI_VMapEntry *ptr = raddbg->global_vmap;
|
||||
for (U32 i = 0; i < raddbg->global_vmap_count; i += 1, ptr += 1){
|
||||
str8_list_pushf(arena, &dump, " 0x%08x: %llu\n", ptr->voff, ptr->idx);
|
||||
}
|
||||
@@ -313,10 +313,10 @@ main(int argc, char **argv){
|
||||
// THREAD LOCAL VARIABLES
|
||||
if (raddbg->thread_variables != 0 && params->dump_thread_variables){
|
||||
str8_list_pushf(arena, &dump, "# THREAD VARIABLES:\n");
|
||||
RADDBG_ThreadVariable *ptr = raddbg->thread_variables;
|
||||
RADDBGI_ThreadVariable *ptr = raddbg->thread_variables;
|
||||
for (U32 i = 0; i < raddbg->thread_variables_count; i += 1, ptr += 1){
|
||||
str8_list_pushf(arena, &dump, " thread_variable[%u]:\n", i);
|
||||
raddbg_stringize_thread_variable(arena, &dump, raddbg, ptr, 2);
|
||||
raddbgi_stringize_thread_variable(arena, &dump, raddbg, ptr, 2);
|
||||
str8_list_push(arena, &dump, str8_lit("\n"));
|
||||
}
|
||||
str8_list_push(arena, &dump, str8_lit("\n"));
|
||||
@@ -325,10 +325,10 @@ main(int argc, char **argv){
|
||||
// PROCEDURES
|
||||
if (raddbg->procedures != 0 && params->dump_procedures){
|
||||
str8_list_pushf(arena, &dump, "# PROCEDURES:\n");
|
||||
RADDBG_Procedure *ptr = raddbg->procedures;
|
||||
RADDBGI_Procedure *ptr = raddbg->procedures;
|
||||
for (U32 i = 0; i < raddbg->procedures_count; i += 1, ptr += 1){
|
||||
str8_list_pushf(arena, &dump, " procedure[%u]:\n", i);
|
||||
raddbg_stringize_procedure(arena, &dump, raddbg, ptr, 2);
|
||||
raddbgi_stringize_procedure(arena, &dump, raddbg, ptr, 2);
|
||||
str8_list_push(arena, &dump, str8_lit("\n"));
|
||||
}
|
||||
str8_list_push(arena, &dump, str8_lit("\n"));
|
||||
@@ -336,7 +336,7 @@ main(int argc, char **argv){
|
||||
|
||||
// SCOPES
|
||||
if (raddbg->scopes != 0 && params->dump_scopes){
|
||||
RADDBG_ScopeBundle scope_bundle = {0};
|
||||
RADDBGI_ScopeBundle scope_bundle = {0};
|
||||
{
|
||||
scope_bundle.scopes = raddbg->scopes;
|
||||
scope_bundle.scope_count = raddbg->scopes_count;
|
||||
@@ -351,10 +351,10 @@ main(int argc, char **argv){
|
||||
}
|
||||
|
||||
str8_list_pushf(arena, &dump, "# SCOPES:\n");
|
||||
RADDBG_Scope *ptr = raddbg->scopes;
|
||||
RADDBGI_Scope *ptr = raddbg->scopes;
|
||||
for (U32 i = 0; i < raddbg->scopes_count; i += 1, ptr += 1){
|
||||
if (ptr->parent_scope_idx == 0){
|
||||
raddbg_stringize_scope(arena, &dump, raddbg, &scope_bundle, ptr, 1);
|
||||
raddbgi_stringize_scope(arena, &dump, raddbg, &scope_bundle, ptr, 1);
|
||||
str8_list_push(arena, &dump, str8_lit("\n"));
|
||||
}
|
||||
}
|
||||
@@ -364,7 +364,7 @@ main(int argc, char **argv){
|
||||
// SCOPE VMAP
|
||||
if (raddbg->scope_vmap != 0 && params->dump_scope_vmap){
|
||||
str8_list_pushf(arena, &dump, "# SCOPE VMAP:\n");
|
||||
RADDBG_VMapEntry *ptr = raddbg->scope_vmap;
|
||||
RADDBGI_VMapEntry *ptr = raddbg->scope_vmap;
|
||||
for (U32 i = 0; i < raddbg->scope_vmap_count; i += 1, ptr += 1){
|
||||
str8_list_pushf(arena, &dump, " 0x%08x: %llu\n", ptr->voff, ptr->idx);
|
||||
}
|
||||
@@ -374,33 +374,33 @@ main(int argc, char **argv){
|
||||
// NAME MAPS
|
||||
if (raddbg->name_maps != 0 && params->dump_name_map){
|
||||
str8_list_pushf(arena, &dump, "# NAME MAP:\n");
|
||||
RADDBG_NameMap *ptr = raddbg->name_maps;
|
||||
RADDBGI_NameMap *ptr = raddbg->name_maps;
|
||||
for (U32 i = 0; i < raddbg->name_maps_count; i += 1, ptr += 1){
|
||||
str8_list_pushf(arena, &dump, " name_map[%u]:\n", i);
|
||||
|
||||
RADDBG_ParsedNameMap name_map = {0};
|
||||
raddbg_name_map_parse(raddbg, ptr, &name_map);
|
||||
RADDBGI_ParsedNameMap name_map = {0};
|
||||
raddbgi_name_map_parse(raddbg, ptr, &name_map);
|
||||
|
||||
RADDBG_NameMapBucket *bucket = name_map.buckets;
|
||||
RADDBGI_NameMapBucket *bucket = name_map.buckets;
|
||||
for (U32 j = 0; j < name_map.bucket_count; j += 1, bucket += 1){
|
||||
if (bucket->node_count > 0){
|
||||
str8_list_pushf(arena, &dump, " bucket[%u]:\n", j);
|
||||
RADDBG_NameMapNode *node = name_map.nodes + bucket->first_node;
|
||||
RADDBG_NameMapNode *node_opl = node + bucket->node_count;
|
||||
RADDBGI_NameMapNode *node = name_map.nodes + bucket->first_node;
|
||||
RADDBGI_NameMapNode *node_opl = node + bucket->node_count;
|
||||
for (; node < node_opl; node += 1){
|
||||
String8 string = {0};
|
||||
string.str = raddbg_string_from_idx(raddbg, node->string_idx, &string.size);
|
||||
string.str = raddbgi_string_from_idx(raddbg, node->string_idx, &string.size);
|
||||
str8_list_pushf(arena, &dump, " match \"%.*s\": ", str8_varg(string));
|
||||
if (node->match_count == 1){
|
||||
str8_list_pushf(arena, &dump, "%u", node->match_idx_or_idx_run_first);
|
||||
}
|
||||
else{
|
||||
RADDBG_U32 idx_count = 0;
|
||||
RADDBG_U32 *idx_run =
|
||||
raddbg_idx_run_from_first_count(raddbg, node->match_idx_or_idx_run_first,
|
||||
node->match_count, &idx_count);
|
||||
RADDBGI_U32 idx_count = 0;
|
||||
RADDBGI_U32 *idx_run =
|
||||
raddbgi_idx_run_from_first_count(raddbg, node->match_idx_or_idx_run_first,
|
||||
node->match_count, &idx_count);
|
||||
if (idx_count > 0){
|
||||
RADDBG_U32 last = idx_count - 1;
|
||||
RADDBGI_U32 last = idx_count - 1;
|
||||
for (U32 k = 0; k < last; k += 1){
|
||||
str8_list_pushf(arena, &dump, "%u, ", idx_run[k]);
|
||||
}
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
// Copyright (c) 2024 Epic Games Tools
|
||||
// Licensed under the MIT license (https://opensource.org/license/mit/)
|
||||
|
||||
#ifndef RADDBG_DUMP_H
|
||||
#define RADDBG_DUMP_H
|
||||
#ifndef RADDBGI_DUMP_H
|
||||
#define RADDBGI_DUMP_H
|
||||
|
||||
////////////////////////////////
|
||||
//~ Program Parameters Type
|
||||
@@ -42,4 +42,4 @@ typedef struct DUMP_Params{
|
||||
|
||||
static DUMP_Params *dump_params_from_cmd_line(Arena *arena, CmdLine *cmdline);
|
||||
|
||||
#endif //RADDBG_DUMP_H
|
||||
#endif //RADDBGI_DUMP_H
|
||||
|
||||
@@ -5,12 +5,12 @@
|
||||
//~ RADDBG Common Stringize Functions
|
||||
|
||||
static String8
|
||||
raddbg_string_from_data_section_tag(RADDBG_DataSectionTag tag){
|
||||
raddbgi_string_from_data_section_tag(RADDBGI_DataSectionTag tag){
|
||||
String8 result = {0};
|
||||
switch (tag){
|
||||
#define X(N,C) case C: result = str8_lit(#N); break;
|
||||
#define Y(N)
|
||||
RADDBG_DataSectionTagXList(X,Y)
|
||||
RADDBGI_DataSectionTagXList(X,Y)
|
||||
#undef X
|
||||
#undef Y
|
||||
}
|
||||
@@ -18,36 +18,36 @@ raddbg_string_from_data_section_tag(RADDBG_DataSectionTag tag){
|
||||
}
|
||||
|
||||
static String8
|
||||
raddbg_string_from_arch(RADDBG_Arch arch){
|
||||
raddbgi_string_from_arch(RADDBGI_Arch arch){
|
||||
String8 result = {0};
|
||||
switch (arch){
|
||||
default: result = str8_lit("<invalid-arch>"); break;
|
||||
case RADDBG_Arch_X86: result = str8_lit("x86"); break;
|
||||
case RADDBG_Arch_X64: result = str8_lit("x64"); break;
|
||||
case RADDBGI_Arch_X86: result = str8_lit("x86"); break;
|
||||
case RADDBGI_Arch_X64: result = str8_lit("x64"); break;
|
||||
}
|
||||
return(result);
|
||||
}
|
||||
|
||||
static String8
|
||||
raddbg_string_from_language(RADDBG_Language language){
|
||||
raddbgi_string_from_language(RADDBGI_Language language){
|
||||
String8 result = {0};
|
||||
switch (language){
|
||||
#define X(name,code) case code: result = str8_lit(#name); break;
|
||||
RADDBG_LanguageXList(X)
|
||||
RADDBGI_LanguageXList(X)
|
||||
#undef X
|
||||
}
|
||||
return(result);
|
||||
}
|
||||
|
||||
static String8
|
||||
raddbg_string_from_type_kind(RADDBG_TypeKind type_kind){
|
||||
raddbgi_string_from_type_kind(RADDBGI_TypeKind type_kind){
|
||||
String8 result = {0};
|
||||
switch (type_kind){
|
||||
default: result = str8_lit("<invalid-type-kind>"); break;
|
||||
#define X(name,code) case code: result = str8_lit(#name); break;
|
||||
#define XZ(name,code,size) X(name,code)
|
||||
#define Y(a,n)
|
||||
RADDBG_TypeKindXList(X,XZ,Y)
|
||||
RADDBGI_TypeKindXList(X,XZ,Y)
|
||||
#undef X
|
||||
#undef XZ
|
||||
#undef Y
|
||||
@@ -56,24 +56,24 @@ raddbg_string_from_type_kind(RADDBG_TypeKind type_kind){
|
||||
}
|
||||
|
||||
static String8
|
||||
raddbg_string_from_member_kind(RADDBG_MemberKind member_kind){
|
||||
raddbgi_string_from_member_kind(RADDBGI_MemberKind member_kind){
|
||||
String8 result = {0};
|
||||
switch (member_kind){
|
||||
default: result = str8_lit("<invalid-member-kind>"); break;
|
||||
#define X(N,C) case C: result = str8_lit(#N); break;
|
||||
RADDBG_MemberKindXList(X)
|
||||
RADDBGI_MemberKindXList(X)
|
||||
#undef X
|
||||
}
|
||||
return(result);
|
||||
}
|
||||
|
||||
static String8
|
||||
raddbg_string_from_local_kind(RADDBG_LocalKind local_kind){
|
||||
raddbgi_string_from_local_kind(RADDBGI_LocalKind local_kind){
|
||||
String8 result = {0};
|
||||
switch (local_kind){
|
||||
default: result = str8_lit("<invalid-local-kind>"); break;
|
||||
case RADDBG_LocalKind_Parameter: result = str8_lit("Parameter"); break;
|
||||
case RADDBG_LocalKind_Variable: result = str8_lit("Variable"); break;
|
||||
case RADDBGI_LocalKind_Parameter: result = str8_lit("Parameter"); break;
|
||||
case RADDBGI_LocalKind_Variable: result = str8_lit("Variable"); break;
|
||||
}
|
||||
return(result);
|
||||
}
|
||||
@@ -83,59 +83,59 @@ raddbg_string_from_local_kind(RADDBG_LocalKind local_kind){
|
||||
//~ RADDBG Flags Stringize Functions
|
||||
|
||||
static void
|
||||
raddbg_stringize_binary_section_flags(Arena *arena, String8List *out,
|
||||
RADDBG_BinarySectionFlags flags){
|
||||
raddbgi_stringize_binary_section_flags(Arena *arena, String8List *out,
|
||||
RADDBGI_BinarySectionFlags flags){
|
||||
if (flags == 0){
|
||||
str8_list_push(arena, out, str8_lit("0"));
|
||||
}
|
||||
if (flags & RADDBG_BinarySectionFlag_Read){
|
||||
if (flags & RADDBGI_BinarySectionFlag_Read){
|
||||
str8_list_push(arena, out, str8_lit("Read "));
|
||||
}
|
||||
if (flags & RADDBG_BinarySectionFlag_Write){
|
||||
if (flags & RADDBGI_BinarySectionFlag_Write){
|
||||
str8_list_push(arena, out, str8_lit("Write "));
|
||||
}
|
||||
if (flags & RADDBG_BinarySectionFlag_Execute){
|
||||
if (flags & RADDBGI_BinarySectionFlag_Execute){
|
||||
str8_list_push(arena, out, str8_lit("Execute "));
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
raddbg_stringize_type_modifier_flags(Arena *arena, String8List *out,
|
||||
RADDBG_TypeModifierFlags flags){
|
||||
raddbgi_stringize_type_modifier_flags(Arena *arena, String8List *out,
|
||||
RADDBGI_TypeModifierFlags flags){
|
||||
if (flags == 0){
|
||||
str8_list_push(arena, out, str8_lit("0"));
|
||||
}
|
||||
if (flags & RADDBG_TypeModifierFlag_Const){
|
||||
if (flags & RADDBGI_TypeModifierFlag_Const){
|
||||
str8_list_push(arena, out, str8_lit("Const "));
|
||||
}
|
||||
if (flags & RADDBG_TypeModifierFlag_Volatile){
|
||||
if (flags & RADDBGI_TypeModifierFlag_Volatile){
|
||||
str8_list_push(arena, out, str8_lit("Volatile "));
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
raddbg_stringize_user_defined_type_flags(Arena *arena, String8List *out,
|
||||
RADDBG_UserDefinedTypeFlags flags){
|
||||
raddbgi_stringize_user_defined_type_flags(Arena *arena, String8List *out,
|
||||
RADDBGI_UserDefinedTypeFlags flags){
|
||||
if (flags == 0){
|
||||
str8_list_push(arena, out, str8_lit("0"));
|
||||
}
|
||||
if (flags & RADDBG_UserDefinedTypeFlag_EnumMembers){
|
||||
if (flags & RADDBGI_UserDefinedTypeFlag_EnumMembers){
|
||||
str8_list_push(arena, out, str8_lit("EnumMembers "));
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
raddbg_stringize_link_flags(Arena *arena, String8List *out, RADDBG_LinkFlags flags){
|
||||
raddbgi_stringize_link_flags(Arena *arena, String8List *out, RADDBGI_LinkFlags flags){
|
||||
if (flags == 0){
|
||||
str8_list_push(arena, out, str8_lit("0"));
|
||||
}
|
||||
if (flags & RADDBG_LinkFlag_External){
|
||||
if (flags & RADDBGI_LinkFlag_External){
|
||||
str8_list_push(arena, out, str8_lit("External "));
|
||||
}
|
||||
if (flags & RADDBG_LinkFlag_TypeScoped){
|
||||
if (flags & RADDBGI_LinkFlag_TypeScoped){
|
||||
str8_list_push(arena, out, str8_lit("TypeScoped "));
|
||||
}
|
||||
if (flags & RADDBG_LinkFlag_ProcScoped){
|
||||
if (flags & RADDBGI_LinkFlag_ProcScoped){
|
||||
str8_list_push(arena, out, str8_lit("ProcScoped "));
|
||||
}
|
||||
}
|
||||
@@ -144,82 +144,82 @@ raddbg_stringize_link_flags(Arena *arena, String8List *out, RADDBG_LinkFlags fla
|
||||
////////////////////////////////
|
||||
//~ RADDBG Compound Stringize Functions
|
||||
|
||||
static char raddbg_stringize_spaces[] = " ";
|
||||
static char raddbgi_stringize_spaces[] = " ";
|
||||
|
||||
static void
|
||||
raddbg_stringize_data_sections(Arena *arena, String8List *out, RADDBG_Parsed *parsed,
|
||||
U32 indent_level){
|
||||
raddbgi_stringize_data_sections(Arena *arena, String8List *out, RADDBGI_Parsed *parsed,
|
||||
U32 indent_level){
|
||||
U64 data_section_count = parsed->dsec_count;
|
||||
RADDBG_DataSection *ptr = parsed->dsecs;
|
||||
RADDBGI_DataSection *ptr = parsed->dsecs;
|
||||
for (U64 i = 0; i < data_section_count; i += 1, ptr += 1){
|
||||
String8 tag_str = raddbg_string_from_data_section_tag(ptr->tag);
|
||||
String8 tag_str = raddbgi_string_from_data_section_tag(ptr->tag);
|
||||
str8_list_pushf(arena, out, "%.*sdata_section[%5u] = {0x%08llx, %7u, %7u} %.*s\n",
|
||||
indent_level, raddbg_stringize_spaces,
|
||||
indent_level, raddbgi_stringize_spaces,
|
||||
i, ptr->off, ptr->encoded_size, ptr->unpacked_size, str8_varg(tag_str));
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
raddbg_stringize_top_level_info(Arena *arena, String8List *out, RADDBG_Parsed *parsed,
|
||||
RADDBG_TopLevelInfo *tli, U32 indent_level){
|
||||
String8 arch_str = raddbg_string_from_arch(tli->architecture);
|
||||
raddbgi_stringize_top_level_info(Arena *arena, String8List *out, RADDBGI_Parsed *parsed,
|
||||
RADDBGI_TopLevelInfo *tli, U32 indent_level){
|
||||
String8 arch_str = raddbgi_string_from_arch(tli->architecture);
|
||||
String8 exe_name = {0};
|
||||
exe_name.str = raddbg_string_from_idx(parsed, tli->exe_name_string_idx, &exe_name.size);
|
||||
exe_name.str = raddbgi_string_from_idx(parsed, tli->exe_name_string_idx, &exe_name.size);
|
||||
|
||||
str8_list_pushf(arena, out, "%.*sarchitecture=%.*s\n",
|
||||
indent_level, raddbg_stringize_spaces, str8_varg(arch_str));
|
||||
indent_level, raddbgi_stringize_spaces, str8_varg(arch_str));
|
||||
str8_list_pushf(arena, out, "%.*sexe_name='%.*s'\n",
|
||||
indent_level, raddbg_stringize_spaces, str8_varg(exe_name));
|
||||
indent_level, raddbgi_stringize_spaces, str8_varg(exe_name));
|
||||
str8_list_pushf(arena, out, "%.*svoff_max=0x%08llx\n",
|
||||
indent_level, raddbg_stringize_spaces, tli->voff_max);
|
||||
indent_level, raddbgi_stringize_spaces, tli->voff_max);
|
||||
}
|
||||
|
||||
static void
|
||||
raddbg_stringize_binary_section(Arena *arena, String8List *out, RADDBG_Parsed *parsed,
|
||||
RADDBG_BinarySection *bin_section, U32 indent_level){
|
||||
raddbgi_stringize_binary_section(Arena *arena, String8List *out, RADDBGI_Parsed *parsed,
|
||||
RADDBGI_BinarySection *bin_section, U32 indent_level){
|
||||
String8 name = {0};
|
||||
name.str = raddbg_string_from_idx(parsed, bin_section->name_string_idx, &name.size);
|
||||
name.str = raddbgi_string_from_idx(parsed, bin_section->name_string_idx, &name.size);
|
||||
str8_list_pushf(arena, out, "%.*sname='%.*s'\n",
|
||||
indent_level, raddbg_stringize_spaces, str8_varg(name));
|
||||
indent_level, raddbgi_stringize_spaces, str8_varg(name));
|
||||
|
||||
str8_list_pushf(arena, out, "%.*sflags=", indent_level, raddbg_stringize_spaces);
|
||||
raddbg_stringize_binary_section_flags(arena, out, bin_section->flags);
|
||||
str8_list_pushf(arena, out, "%.*sflags=", indent_level, raddbgi_stringize_spaces);
|
||||
raddbgi_stringize_binary_section_flags(arena, out, bin_section->flags);
|
||||
str8_list_pushf(arena, out, "\n");
|
||||
|
||||
str8_list_pushf(arena, out, "%.*svoff_first=0x%08x\n",
|
||||
indent_level, raddbg_stringize_spaces, bin_section->voff_first);
|
||||
indent_level, raddbgi_stringize_spaces, bin_section->voff_first);
|
||||
str8_list_pushf(arena, out, "%.*svoff_opl =0x%08x\n",
|
||||
indent_level, raddbg_stringize_spaces, bin_section->voff_opl);
|
||||
indent_level, raddbgi_stringize_spaces, bin_section->voff_opl);
|
||||
str8_list_pushf(arena, out, "%.*sfoff_first=0x%08x\n",
|
||||
indent_level, raddbg_stringize_spaces, bin_section->foff_first);
|
||||
indent_level, raddbgi_stringize_spaces, bin_section->foff_first);
|
||||
str8_list_pushf(arena, out, "%.*sfoff_opl =0x%08x\n",
|
||||
indent_level, raddbg_stringize_spaces, bin_section->foff_opl);
|
||||
indent_level, raddbgi_stringize_spaces, bin_section->foff_opl);
|
||||
}
|
||||
|
||||
static void
|
||||
raddbg_stringize_file_path(Arena *arena, String8List *out, RADDBG_Parsed *parsed,
|
||||
RADDBG_FilePathBundle *bundle, RADDBG_FilePathNode *file_path,
|
||||
U32 indent_level){
|
||||
raddbgi_stringize_file_path(Arena *arena, String8List *out, RADDBGI_Parsed *parsed,
|
||||
RADDBGI_FilePathBundle *bundle, RADDBGI_FilePathNode *file_path,
|
||||
U32 indent_level){
|
||||
String8 name = {0};
|
||||
name.str = raddbg_string_from_idx(parsed, file_path->name_string_idx, &name.size);
|
||||
name.str = raddbgi_string_from_idx(parsed, file_path->name_string_idx, &name.size);
|
||||
|
||||
U32 this_idx = (U32)(file_path - bundle->file_paths);
|
||||
|
||||
if (file_path->source_file_idx == 0){
|
||||
str8_list_pushf(arena, out, "%.*s[%u] '%.*s'\n",
|
||||
indent_level, raddbg_stringize_spaces,
|
||||
indent_level, raddbgi_stringize_spaces,
|
||||
this_idx, str8_varg(name));
|
||||
}
|
||||
else{
|
||||
str8_list_pushf(arena, out, "%.*s[%u] '%.*s'; source_file=%u\n",
|
||||
indent_level, raddbg_stringize_spaces,
|
||||
indent_level, raddbgi_stringize_spaces,
|
||||
this_idx, str8_varg(name), file_path->source_file_idx);
|
||||
}
|
||||
|
||||
for (U32 child = file_path->first_child;
|
||||
child != 0;){
|
||||
// get node for child
|
||||
RADDBG_FilePathNode *child_node = 0;
|
||||
RADDBGI_FilePathNode *child_node = 0;
|
||||
if (child < bundle->file_path_count){
|
||||
child_node = bundle->file_paths + child;
|
||||
}
|
||||
@@ -228,7 +228,7 @@ raddbg_stringize_file_path(Arena *arena, String8List *out, RADDBG_Parsed *parsed
|
||||
}
|
||||
|
||||
// stringize child
|
||||
raddbg_stringize_file_path(arena, out, parsed, bundle, child_node, indent_level + 1);
|
||||
raddbgi_stringize_file_path(arena, out, parsed, bundle, child_node, indent_level + 1);
|
||||
|
||||
// increment iterator
|
||||
child = child_node->next_sibling;
|
||||
@@ -236,14 +236,14 @@ raddbg_stringize_file_path(Arena *arena, String8List *out, RADDBG_Parsed *parsed
|
||||
}
|
||||
|
||||
static void
|
||||
raddbg_stringize_source_file(Arena *arena, String8List *out, RADDBG_Parsed *parsed,
|
||||
RADDBG_SourceFile *source_file, U32 indent_level){
|
||||
raddbgi_stringize_source_file(Arena *arena, String8List *out, RADDBGI_Parsed *parsed,
|
||||
RADDBGI_SourceFile *source_file, U32 indent_level){
|
||||
// extract line map data
|
||||
RADDBG_ParsedLineMap line_map = {0};
|
||||
raddbg_line_map_from_source_file(parsed, source_file, &line_map);
|
||||
RADDBGI_ParsedLineMap line_map = {0};
|
||||
raddbgi_line_map_from_source_file(parsed, source_file, &line_map);
|
||||
|
||||
// stringize line map data
|
||||
str8_list_pushf(arena, out, "%.*slines:\n", indent_level, raddbg_stringize_spaces);
|
||||
str8_list_pushf(arena, out, "%.*slines:\n", indent_level, raddbgi_stringize_spaces);
|
||||
|
||||
for (U32 i = 0; i < line_map.count; i += 1){
|
||||
U32 line_num = line_map.nums[i];
|
||||
@@ -261,7 +261,7 @@ raddbg_stringize_source_file(Arena *arena, String8List *out, RADDBG_Parsed *pars
|
||||
}
|
||||
|
||||
str8_list_pushf(arena, out, "%.*s %u: ",
|
||||
indent_level, raddbg_stringize_spaces, line_num);
|
||||
indent_level, raddbgi_stringize_spaces, line_num);
|
||||
|
||||
U32 first = line_map.ranges[i];
|
||||
U32 opl_raw = line_map.ranges[i + 1];
|
||||
@@ -272,7 +272,7 @@ raddbg_stringize_source_file(Arena *arena, String8List *out, RADDBG_Parsed *pars
|
||||
}
|
||||
else{
|
||||
str8_list_pushf(arena, out, "%.*s0x%08x\n",
|
||||
indent_level + digit_count + 3, raddbg_stringize_spaces,
|
||||
indent_level + digit_count + 3, raddbgi_stringize_spaces,
|
||||
line_map.voffs[j]);
|
||||
}
|
||||
}
|
||||
@@ -280,57 +280,57 @@ raddbg_stringize_source_file(Arena *arena, String8List *out, RADDBG_Parsed *pars
|
||||
}
|
||||
|
||||
static void
|
||||
raddbg_stringize_unit(Arena *arena, String8List *out, RADDBG_Parsed *parsed,
|
||||
RADDBG_Unit *unit, U32 indent_level){
|
||||
raddbgi_stringize_unit(Arena *arena, String8List *out, RADDBGI_Parsed *parsed,
|
||||
RADDBGI_Unit *unit, U32 indent_level){
|
||||
String8 unit_name = {0};
|
||||
unit_name.str = raddbg_string_from_idx(parsed, unit->unit_name_string_idx, &unit_name.size);
|
||||
unit_name.str = raddbgi_string_from_idx(parsed, unit->unit_name_string_idx, &unit_name.size);
|
||||
String8 compiler_name = {0};
|
||||
compiler_name.str = raddbg_string_from_idx(parsed, unit->compiler_name_string_idx,
|
||||
&compiler_name.size);
|
||||
compiler_name.str = raddbgi_string_from_idx(parsed, unit->compiler_name_string_idx,
|
||||
&compiler_name.size);
|
||||
|
||||
str8_list_pushf(arena, out, "%.*sunit_name='%.*s'\n",
|
||||
indent_level, raddbg_stringize_spaces, str8_varg(unit_name));
|
||||
indent_level, raddbgi_stringize_spaces, str8_varg(unit_name));
|
||||
str8_list_pushf(arena, out, "%.*scompiler_name='%.*s'\n",
|
||||
indent_level, raddbg_stringize_spaces, str8_varg(compiler_name));
|
||||
indent_level, raddbgi_stringize_spaces, str8_varg(compiler_name));
|
||||
|
||||
str8_list_pushf(arena, out, "%.*ssource_file_path=%u\n",
|
||||
indent_level, raddbg_stringize_spaces, unit->source_file_path_node);
|
||||
indent_level, raddbgi_stringize_spaces, unit->source_file_path_node);
|
||||
str8_list_pushf(arena, out, "%.*sobject_file_path=%u\n",
|
||||
indent_level, raddbg_stringize_spaces, unit->object_file_path_node);
|
||||
indent_level, raddbgi_stringize_spaces, unit->object_file_path_node);
|
||||
str8_list_pushf(arena, out, "%.*sarchive_file_path=%u\n",
|
||||
indent_level, raddbg_stringize_spaces, unit->archive_file_path_node);
|
||||
indent_level, raddbgi_stringize_spaces, unit->archive_file_path_node);
|
||||
str8_list_pushf(arena, out, "%.*sbuild_path=%u\n",
|
||||
indent_level, raddbg_stringize_spaces, unit->build_path_node);
|
||||
indent_level, raddbgi_stringize_spaces, unit->build_path_node);
|
||||
|
||||
String8 language_str = raddbg_string_from_language(unit->language);
|
||||
String8 language_str = raddbgi_string_from_language(unit->language);
|
||||
str8_list_pushf(arena, out, "%.*slanguage=%.*s\n",
|
||||
indent_level, raddbg_stringize_spaces, str8_varg(language_str));
|
||||
indent_level, raddbgi_stringize_spaces, str8_varg(language_str));
|
||||
|
||||
// extract line info data
|
||||
RADDBG_ParsedLineInfo line_info = {0};
|
||||
raddbg_line_info_from_unit(parsed, unit, &line_info);
|
||||
RADDBGI_ParsedLineInfo line_info = {0};
|
||||
raddbgi_line_info_from_unit(parsed, unit, &line_info);
|
||||
|
||||
|
||||
// stringize line info
|
||||
str8_list_pushf(arena, out, "%.*slines:\n", indent_level, raddbg_stringize_spaces);
|
||||
str8_list_pushf(arena, out, "%.*slines:\n", indent_level, raddbgi_stringize_spaces);
|
||||
|
||||
for (U32 i = 0; i < line_info.count; i += 1){
|
||||
U64 first = line_info.voffs[i];
|
||||
U64 opl = line_info.voffs[i + 1];
|
||||
RADDBG_Line *line = line_info.lines + i;
|
||||
RADDBG_Column *col = 0;
|
||||
RADDBGI_Line *line = line_info.lines + i;
|
||||
RADDBGI_Column *col = 0;
|
||||
if (i < line_info.col_count){
|
||||
col = line_info.cols + i;
|
||||
}
|
||||
|
||||
if (col == 0){
|
||||
str8_list_pushf(arena, out, "%.*s [0x%08llx,0x%08llx) file=%u; line=%u\n",
|
||||
indent_level, raddbg_stringize_spaces,
|
||||
indent_level, raddbgi_stringize_spaces,
|
||||
first, opl, line->file_idx, line->line_num);
|
||||
}
|
||||
else{
|
||||
str8_list_pushf(arena, out, "%.*s [0x%08llx,0x%08llx) file=%u; line=%u; columns=[%u,%u)\n",
|
||||
indent_level, raddbg_stringize_spaces,
|
||||
indent_level, raddbgi_stringize_spaces,
|
||||
first, opl, line->file_idx, line->line_num,
|
||||
col->col_first, col->col_opl);
|
||||
}
|
||||
@@ -338,19 +338,19 @@ raddbg_stringize_unit(Arena *arena, String8List *out, RADDBG_Parsed *parsed,
|
||||
}
|
||||
|
||||
static void
|
||||
raddbg_stringize_type_node(Arena *arena, String8List *out, RADDBG_Parsed *parsed,
|
||||
RADDBG_TypeNode *type, U32 indent_level){
|
||||
RADDBG_TypeKind kind = type->kind;
|
||||
String8 type_kind_str = raddbg_string_from_type_kind(kind);
|
||||
raddbgi_stringize_type_node(Arena *arena, String8List *out, RADDBGI_Parsed *parsed,
|
||||
RADDBGI_TypeNode *type, U32 indent_level){
|
||||
RADDBGI_TypeKind kind = type->kind;
|
||||
String8 type_kind_str = raddbgi_string_from_type_kind(kind);
|
||||
|
||||
str8_list_pushf(arena, out, "%.*skind=%.*s\n",
|
||||
indent_level, raddbg_stringize_spaces, str8_varg(type_kind_str));
|
||||
indent_level, raddbgi_stringize_spaces, str8_varg(type_kind_str));
|
||||
|
||||
switch (type->kind){
|
||||
case RADDBG_TypeKind_Modifier:
|
||||
case RADDBGI_TypeKind_Modifier:
|
||||
{
|
||||
str8_list_pushf(arena, out, "%.*sflags=", indent_level, raddbg_stringize_spaces);
|
||||
raddbg_stringize_type_modifier_flags(arena, out, type->flags);
|
||||
str8_list_pushf(arena, out, "%.*sflags=", indent_level, raddbgi_stringize_spaces);
|
||||
raddbgi_stringize_type_modifier_flags(arena, out, type->flags);
|
||||
str8_list_push(arena, out, str8_lit("\n"));
|
||||
}break;
|
||||
|
||||
@@ -358,42 +358,42 @@ raddbg_stringize_type_node(Arena *arena, String8List *out, RADDBG_Parsed *parsed
|
||||
{
|
||||
if (type->flags != 0){
|
||||
str8_list_pushf(arena, out, "%.*sflags=%x (missing stringizer path)",
|
||||
indent_level, raddbg_stringize_spaces, type->flags);
|
||||
indent_level, raddbgi_stringize_spaces, type->flags);
|
||||
}
|
||||
}break;
|
||||
}
|
||||
|
||||
str8_list_pushf(arena, out, "%.*sbyte_size=%u\n",
|
||||
indent_level, raddbg_stringize_spaces, type->byte_size);
|
||||
indent_level, raddbgi_stringize_spaces, type->byte_size);
|
||||
|
||||
if (RADDBG_TypeKind_FirstBuiltIn <= kind &&
|
||||
kind <= RADDBG_TypeKind_LastBuiltIn){
|
||||
if (RADDBGI_TypeKind_FirstBuiltIn <= kind &&
|
||||
kind <= RADDBGI_TypeKind_LastBuiltIn){
|
||||
String8 name = {0};
|
||||
name.str = raddbg_string_from_idx(parsed, type->built_in.name_string_idx, &name.size);
|
||||
name.str = raddbgi_string_from_idx(parsed, type->built_in.name_string_idx, &name.size);
|
||||
str8_list_pushf(arena, out, "%.*sbuilt_in.name='%.*s'\n",
|
||||
indent_level, raddbg_stringize_spaces, str8_varg(name));
|
||||
indent_level, raddbgi_stringize_spaces, str8_varg(name));
|
||||
}
|
||||
|
||||
else if (RADDBG_TypeKind_FirstConstructed <= kind &&
|
||||
kind <= RADDBG_TypeKind_LastConstructed){
|
||||
else if (RADDBGI_TypeKind_FirstConstructed <= kind &&
|
||||
kind <= RADDBGI_TypeKind_LastConstructed){
|
||||
str8_list_pushf(arena, out, "%.*sconstructed.direct_type=%u\n",
|
||||
indent_level, raddbg_stringize_spaces, type->constructed.direct_type_idx);
|
||||
indent_level, raddbgi_stringize_spaces, type->constructed.direct_type_idx);
|
||||
|
||||
if (type->kind == RADDBG_TypeKind_Array){
|
||||
if (type->kind == RADDBGI_TypeKind_Array){
|
||||
str8_list_pushf(arena, out, "%.*sconstructed.array_count=%u\n",
|
||||
indent_level, raddbg_stringize_spaces, type->constructed.count);
|
||||
indent_level, raddbgi_stringize_spaces, type->constructed.count);
|
||||
}
|
||||
|
||||
if (type->kind == RADDBG_TypeKind_Function ||
|
||||
type->kind == RADDBG_TypeKind_Method){
|
||||
if (type->kind == RADDBGI_TypeKind_Function ||
|
||||
type->kind == RADDBGI_TypeKind_Method){
|
||||
U32 run_first = type->constructed.param_idx_run_first;
|
||||
U32 run_count_raw = type->constructed.count;
|
||||
|
||||
U32 run_count = 0;
|
||||
U32 *run = raddbg_idx_run_from_first_count(parsed, run_first, run_count_raw, &run_count);
|
||||
U32 *run = raddbgi_idx_run_from_first_count(parsed, run_first, run_count_raw, &run_count);
|
||||
|
||||
U32 this_type_idx = 0;
|
||||
if (run_count > 0 && type->kind == RADDBG_TypeKind_Method){
|
||||
if (run_count > 0 && type->kind == RADDBGI_TypeKind_Method){
|
||||
this_type_idx = run[0];
|
||||
run += 1;
|
||||
run_count -= 1;
|
||||
@@ -401,11 +401,11 @@ raddbg_stringize_type_node(Arena *arena, String8List *out, RADDBG_Parsed *parsed
|
||||
|
||||
if (this_type_idx != 0){
|
||||
str8_list_pushf(arena, out, "%.*sconstructed.this_type=%u\n",
|
||||
indent_level, raddbg_stringize_spaces, this_type_idx);
|
||||
indent_level, raddbgi_stringize_spaces, this_type_idx);
|
||||
}
|
||||
|
||||
str8_list_pushf(arena, out, "%.*sconstructed.params={",
|
||||
indent_level, raddbg_stringize_spaces);
|
||||
indent_level, raddbgi_stringize_spaces);
|
||||
|
||||
if (run_count > 0){
|
||||
U32 last = run_count - 1;
|
||||
@@ -419,63 +419,63 @@ raddbg_stringize_type_node(Arena *arena, String8List *out, RADDBG_Parsed *parsed
|
||||
}
|
||||
}
|
||||
|
||||
else if (RADDBG_TypeKind_FirstUserDefined <= kind &&
|
||||
kind <= RADDBG_TypeKind_LastUserDefined){
|
||||
else if (RADDBGI_TypeKind_FirstUserDefined <= kind &&
|
||||
kind <= RADDBGI_TypeKind_LastUserDefined){
|
||||
String8 name = {0};
|
||||
name.str = raddbg_string_from_idx(parsed, type->user_defined.name_string_idx, &name.size);
|
||||
name.str = raddbgi_string_from_idx(parsed, type->user_defined.name_string_idx, &name.size);
|
||||
str8_list_pushf(arena, out, "%.*suser_defined.name='%.*s'\n",
|
||||
indent_level, raddbg_stringize_spaces, str8_varg(name));
|
||||
indent_level, raddbgi_stringize_spaces, str8_varg(name));
|
||||
str8_list_pushf(arena, out, "%.*suser_defined.direct_type=%u\n",
|
||||
indent_level, raddbg_stringize_spaces,
|
||||
indent_level, raddbgi_stringize_spaces,
|
||||
type->user_defined.direct_type_idx);
|
||||
str8_list_pushf(arena, out, "%.*suser_defined.udt=%u\n",
|
||||
indent_level, raddbg_stringize_spaces,
|
||||
indent_level, raddbgi_stringize_spaces,
|
||||
type->user_defined.udt_idx);
|
||||
}
|
||||
|
||||
else if (kind == RADDBG_TypeKind_Bitfield){
|
||||
else if (kind == RADDBGI_TypeKind_Bitfield){
|
||||
str8_list_pushf(arena, out, "%.*sbitfield.off=%u\n",
|
||||
indent_level, raddbg_stringize_spaces, type->bitfield.off);
|
||||
indent_level, raddbgi_stringize_spaces, type->bitfield.off);
|
||||
str8_list_pushf(arena, out, "%.*sbitfield.size=%u\n",
|
||||
indent_level, raddbg_stringize_spaces, type->bitfield.size);
|
||||
indent_level, raddbgi_stringize_spaces, type->bitfield.size);
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
raddbg_stringize_udt(Arena *arena, String8List *out, RADDBG_Parsed *parsed,
|
||||
RADDBG_UDTMemberBundle *member_bundle, RADDBG_UDT *udt,
|
||||
U32 indent_level){
|
||||
raddbgi_stringize_udt(Arena *arena, String8List *out, RADDBGI_Parsed *parsed,
|
||||
RADDBGI_UDTMemberBundle *member_bundle, RADDBGI_UDT *udt,
|
||||
U32 indent_level){
|
||||
str8_list_pushf(arena, out, "%.*sself_type=%u\n",
|
||||
indent_level, raddbg_stringize_spaces, udt->self_type_idx);
|
||||
indent_level, raddbgi_stringize_spaces, udt->self_type_idx);
|
||||
|
||||
str8_list_pushf(arena, out, "%.*sflags=", indent_level, raddbg_stringize_spaces);
|
||||
raddbg_stringize_user_defined_type_flags(arena, out, udt->flags);
|
||||
str8_list_pushf(arena, out, "%.*sflags=", indent_level, raddbgi_stringize_spaces);
|
||||
raddbgi_stringize_user_defined_type_flags(arena, out, udt->flags);
|
||||
str8_list_push(arena, out, str8_lit("\n"));
|
||||
|
||||
if (udt->file_idx != 0){
|
||||
str8_list_pushf(arena, out, "%.*sloc={file=%u; line=%u; col=%u}\n",
|
||||
indent_level, raddbg_stringize_spaces,
|
||||
indent_level, raddbgi_stringize_spaces,
|
||||
udt->file_idx, udt->line, udt->col);
|
||||
}
|
||||
|
||||
// enum members
|
||||
if (udt->flags & RADDBG_UserDefinedTypeFlag_EnumMembers){
|
||||
if (udt->flags & RADDBGI_UserDefinedTypeFlag_EnumMembers){
|
||||
U32 first_raw = udt->member_first;
|
||||
U32 opl_raw = first_raw + udt->member_count;
|
||||
U32 opl = ClampTop(opl_raw, member_bundle->enum_member_count);
|
||||
U32 first = ClampTop(first_raw, opl);
|
||||
|
||||
if (first < opl){
|
||||
str8_list_pushf(arena, out, "%.*smembers={\n", indent_level, raddbg_stringize_spaces);
|
||||
RADDBG_EnumMember *enum_member = member_bundle->enum_members + first;
|
||||
str8_list_pushf(arena, out, "%.*smembers={\n", indent_level, raddbgi_stringize_spaces);
|
||||
RADDBGI_EnumMember *enum_member = member_bundle->enum_members + first;
|
||||
for (U32 i = first; i < opl; i += 1, enum_member += 1){
|
||||
String8 name = {0};
|
||||
name.str = raddbg_string_from_idx(parsed, enum_member->name_string_idx, &name.size);
|
||||
name.str = raddbgi_string_from_idx(parsed, enum_member->name_string_idx, &name.size);
|
||||
str8_list_pushf(arena, out, "%.*s '%.*s' %llu\n",
|
||||
indent_level, raddbg_stringize_spaces,
|
||||
indent_level, raddbgi_stringize_spaces,
|
||||
str8_varg(name), enum_member->val);
|
||||
}
|
||||
str8_list_pushf(arena, out, "%.*s}\n", indent_level, raddbg_stringize_spaces);
|
||||
str8_list_pushf(arena, out, "%.*s}\n", indent_level, raddbgi_stringize_spaces);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -487,117 +487,117 @@ raddbg_stringize_udt(Arena *arena, String8List *out, RADDBG_Parsed *parsed,
|
||||
U32 first = ClampTop(first_raw, opl);
|
||||
|
||||
if (first < opl){
|
||||
str8_list_pushf(arena, out, "%.*smembers={\n", indent_level, raddbg_stringize_spaces);
|
||||
RADDBG_Member *member = member_bundle->members + first;
|
||||
str8_list_pushf(arena, out, "%.*smembers={\n", indent_level, raddbgi_stringize_spaces);
|
||||
RADDBGI_Member *member = member_bundle->members + first;
|
||||
for (U32 i = first; i < opl; i += 1, member += 1){
|
||||
str8_list_pushf(arena, out, "%.*s {\n", indent_level, raddbg_stringize_spaces);
|
||||
str8_list_pushf(arena, out, "%.*s {\n", indent_level, raddbgi_stringize_spaces);
|
||||
|
||||
String8 kind_str = raddbg_string_from_member_kind(member->kind);
|
||||
String8 kind_str = raddbgi_string_from_member_kind(member->kind);
|
||||
str8_list_pushf(arena, out, "%.*s kind=%.*s\n",
|
||||
indent_level, raddbg_stringize_spaces, str8_varg(kind_str));
|
||||
indent_level, raddbgi_stringize_spaces, str8_varg(kind_str));
|
||||
|
||||
if (member->name_string_idx != 0){
|
||||
String8 name = {0};
|
||||
name.str = raddbg_string_from_idx(parsed, member->name_string_idx, &name.size);
|
||||
name.str = raddbgi_string_from_idx(parsed, member->name_string_idx, &name.size);
|
||||
str8_list_pushf(arena, out, "%.*s name='%.*s'\n",
|
||||
indent_level, raddbg_stringize_spaces, str8_varg(name));
|
||||
indent_level, raddbgi_stringize_spaces, str8_varg(name));
|
||||
}
|
||||
|
||||
str8_list_pushf(arena, out, "%.*s type=%u\n",
|
||||
indent_level, raddbg_stringize_spaces, member->type_idx);
|
||||
indent_level, raddbgi_stringize_spaces, member->type_idx);
|
||||
str8_list_pushf(arena, out, "%.*s off=%u\n",
|
||||
indent_level, raddbg_stringize_spaces, member->off);
|
||||
indent_level, raddbgi_stringize_spaces, member->off);
|
||||
|
||||
str8_list_pushf(arena, out, "%.*s }\n", indent_level, raddbg_stringize_spaces);
|
||||
str8_list_pushf(arena, out, "%.*s }\n", indent_level, raddbgi_stringize_spaces);
|
||||
}
|
||||
str8_list_pushf(arena, out, "%.*s}\n", indent_level, raddbg_stringize_spaces);
|
||||
str8_list_pushf(arena, out, "%.*s}\n", indent_level, raddbgi_stringize_spaces);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
raddbg_stringize_global_variable(Arena *arena, String8List *out, RADDBG_Parsed *parsed,
|
||||
RADDBG_GlobalVariable *global_variable, U32 indent_level){
|
||||
raddbgi_stringize_global_variable(Arena *arena, String8List *out, RADDBGI_Parsed *parsed,
|
||||
RADDBGI_GlobalVariable *global_variable, U32 indent_level){
|
||||
String8 name = {0};
|
||||
name.str = raddbg_string_from_idx(parsed, global_variable->name_string_idx, &name.size);
|
||||
name.str = raddbgi_string_from_idx(parsed, global_variable->name_string_idx, &name.size);
|
||||
str8_list_pushf(arena, out, "%.*sname='%.*s'\n",
|
||||
indent_level, raddbg_stringize_spaces, str8_varg(name));
|
||||
indent_level, raddbgi_stringize_spaces, str8_varg(name));
|
||||
|
||||
str8_list_pushf(arena, out, "%.*slink_flags=", indent_level, raddbg_stringize_spaces);
|
||||
raddbg_stringize_link_flags(arena, out, global_variable->link_flags);
|
||||
str8_list_pushf(arena, out, "%.*slink_flags=", indent_level, raddbgi_stringize_spaces);
|
||||
raddbgi_stringize_link_flags(arena, out, global_variable->link_flags);
|
||||
str8_list_push(arena, out, str8_lit("\n"));
|
||||
|
||||
str8_list_pushf(arena, out, "%.*svoff=0x%08llx\n",
|
||||
indent_level, raddbg_stringize_spaces, global_variable->voff);
|
||||
indent_level, raddbgi_stringize_spaces, global_variable->voff);
|
||||
|
||||
str8_list_pushf(arena, out, "%.*stype_idx=%u\n",
|
||||
indent_level, raddbg_stringize_spaces, global_variable->type_idx);
|
||||
indent_level, raddbgi_stringize_spaces, global_variable->type_idx);
|
||||
|
||||
str8_list_pushf(arena, out, "%.*scontainer_idx=%u\n",
|
||||
indent_level, raddbg_stringize_spaces, global_variable->container_idx);
|
||||
indent_level, raddbgi_stringize_spaces, global_variable->container_idx);
|
||||
}
|
||||
|
||||
static void
|
||||
raddbg_stringize_thread_variable(Arena *arena, String8List *out, RADDBG_Parsed *parsed,
|
||||
RADDBG_ThreadVariable *thread_var,
|
||||
U32 indent_level){
|
||||
raddbgi_stringize_thread_variable(Arena *arena, String8List *out, RADDBGI_Parsed *parsed,
|
||||
RADDBGI_ThreadVariable *thread_var,
|
||||
U32 indent_level){
|
||||
String8 name = {0};
|
||||
name.str = raddbg_string_from_idx(parsed, thread_var->name_string_idx, &name.size);
|
||||
name.str = raddbgi_string_from_idx(parsed, thread_var->name_string_idx, &name.size);
|
||||
str8_list_pushf(arena, out, "%.*sname='%.*s'\n",
|
||||
indent_level, raddbg_stringize_spaces, str8_varg(name));
|
||||
indent_level, raddbgi_stringize_spaces, str8_varg(name));
|
||||
|
||||
str8_list_pushf(arena, out, "%.*slink_flags=", indent_level, raddbg_stringize_spaces);
|
||||
raddbg_stringize_link_flags(arena, out, thread_var->link_flags);
|
||||
str8_list_pushf(arena, out, "%.*slink_flags=", indent_level, raddbgi_stringize_spaces);
|
||||
raddbgi_stringize_link_flags(arena, out, thread_var->link_flags);
|
||||
str8_list_push(arena, out, str8_lit("\n"));
|
||||
|
||||
str8_list_pushf(arena, out, "%.*stls_off=0x%08x\n",
|
||||
indent_level, raddbg_stringize_spaces, thread_var->tls_off);
|
||||
indent_level, raddbgi_stringize_spaces, thread_var->tls_off);
|
||||
|
||||
str8_list_pushf(arena, out, "%.*stype_idx=%u\n",
|
||||
indent_level, raddbg_stringize_spaces, thread_var->type_idx);
|
||||
indent_level, raddbgi_stringize_spaces, thread_var->type_idx);
|
||||
|
||||
str8_list_pushf(arena, out, "%.*scontainer_idx=%u\n",
|
||||
indent_level, raddbg_stringize_spaces, thread_var->container_idx);
|
||||
indent_level, raddbgi_stringize_spaces, thread_var->container_idx);
|
||||
}
|
||||
|
||||
static void
|
||||
raddbg_stringize_procedure(Arena *arena, String8List *out, RADDBG_Parsed *parsed,
|
||||
RADDBG_Procedure *proc, U32 indent_level){
|
||||
raddbgi_stringize_procedure(Arena *arena, String8List *out, RADDBGI_Parsed *parsed,
|
||||
RADDBGI_Procedure *proc, U32 indent_level){
|
||||
String8 name = {0};
|
||||
name.str = raddbg_string_from_idx(parsed, proc->name_string_idx, &name.size);
|
||||
name.str = raddbgi_string_from_idx(parsed, proc->name_string_idx, &name.size);
|
||||
str8_list_pushf(arena, out, "%.*sname='%.*s'\n",
|
||||
indent_level, raddbg_stringize_spaces, str8_varg(name));
|
||||
indent_level, raddbgi_stringize_spaces, str8_varg(name));
|
||||
|
||||
String8 link_name = {0};
|
||||
link_name.str = raddbg_string_from_idx(parsed, proc->link_name_string_idx, &link_name.size);
|
||||
link_name.str = raddbgi_string_from_idx(parsed, proc->link_name_string_idx, &link_name.size);
|
||||
str8_list_pushf(arena, out, "%.*slink_name='%.*s'\n",
|
||||
indent_level, raddbg_stringize_spaces, str8_varg(link_name));
|
||||
indent_level, raddbgi_stringize_spaces, str8_varg(link_name));
|
||||
|
||||
str8_list_pushf(arena, out, "%.*slink_flags=", indent_level, raddbg_stringize_spaces);
|
||||
raddbg_stringize_link_flags(arena, out, proc->link_flags);
|
||||
str8_list_pushf(arena, out, "%.*slink_flags=", indent_level, raddbgi_stringize_spaces);
|
||||
raddbgi_stringize_link_flags(arena, out, proc->link_flags);
|
||||
str8_list_push(arena, out, str8_lit("\n"));
|
||||
|
||||
str8_list_pushf(arena, out, "%.*stype_idx=%u\n",
|
||||
indent_level, raddbg_stringize_spaces, proc->type_idx);
|
||||
indent_level, raddbgi_stringize_spaces, proc->type_idx);
|
||||
|
||||
str8_list_pushf(arena, out, "%.*sroot_scope_idx=%u\n",
|
||||
indent_level, raddbg_stringize_spaces, proc->root_scope_idx);
|
||||
indent_level, raddbgi_stringize_spaces, proc->root_scope_idx);
|
||||
|
||||
str8_list_pushf(arena, out, "%.*scontainer_idx=%u\n",
|
||||
indent_level, raddbg_stringize_spaces, proc->container_idx);
|
||||
indent_level, raddbgi_stringize_spaces, proc->container_idx);
|
||||
}
|
||||
|
||||
static void
|
||||
raddbg_stringize_scope(Arena *arena, String8List *out, RADDBG_Parsed *parsed,
|
||||
RADDBG_ScopeBundle *bundle, RADDBG_Scope *scope, U32 indent_level){
|
||||
raddbgi_stringize_scope(Arena *arena, String8List *out, RADDBGI_Parsed *parsed,
|
||||
RADDBGI_ScopeBundle *bundle, RADDBGI_Scope *scope, U32 indent_level){
|
||||
|
||||
U32 this_idx = (U32)(scope - bundle->scopes);
|
||||
|
||||
str8_list_pushf(arena, out, "%.*s[%u]\n",
|
||||
indent_level, raddbg_stringize_spaces, this_idx);
|
||||
indent_level, raddbgi_stringize_spaces, this_idx);
|
||||
|
||||
str8_list_pushf(arena, out, "%.*s proc_idx=%u\n",
|
||||
indent_level, raddbg_stringize_spaces, scope->proc_idx);
|
||||
indent_level, raddbgi_stringize_spaces, scope->proc_idx);
|
||||
|
||||
// voff ranges
|
||||
{
|
||||
@@ -614,18 +614,18 @@ raddbg_stringize_scope(Arena *arena, String8List *out, RADDBG_Parsed *parsed,
|
||||
|
||||
if (voff_range_opl - voff_range_first > 2){
|
||||
str8_list_pushf(arena, out, "%.*s voff_ranges={\n",
|
||||
indent_level, raddbg_stringize_spaces);
|
||||
indent_level, raddbgi_stringize_spaces);
|
||||
for (U32 i = voff_range_first; i < voff_range_opl; i += 2, voff_ptr += 2){
|
||||
str8_list_pushf(arena, out, "%.*s [0x%08llx, 0x%08llx)\n",
|
||||
indent_level, raddbg_stringize_spaces,
|
||||
indent_level, raddbgi_stringize_spaces,
|
||||
voff_ptr[0], voff_ptr[1]);
|
||||
}
|
||||
str8_list_pushf(arena, out, "%.*s }\n",
|
||||
indent_level, raddbg_stringize_spaces);
|
||||
indent_level, raddbgi_stringize_spaces);
|
||||
}
|
||||
else if (voff_range_opl - voff_range_first == 2){
|
||||
str8_list_pushf(arena, out, "%.*s voff_range=[0x%08llx, 0x%08llx)\n",
|
||||
indent_level, raddbg_stringize_spaces,
|
||||
indent_level, raddbgi_stringize_spaces,
|
||||
voff_ptr[0], voff_ptr[1]);
|
||||
}
|
||||
}
|
||||
@@ -637,60 +637,60 @@ raddbg_stringize_scope(Arena *arena, String8List *out, RADDBG_Parsed *parsed,
|
||||
U32 local_opl = ClampTop(local_opl_raw, bundle->local_count);
|
||||
|
||||
if (local_first < local_opl){
|
||||
RADDBG_Local *local_ptr = bundle->locals + local_first;
|
||||
RADDBGI_Local *local_ptr = bundle->locals + local_first;
|
||||
for (U32 i = local_first; i < local_opl; i += 1, local_ptr += 1){
|
||||
str8_list_pushf(arena, out, "%.*s local[%u]\n",
|
||||
indent_level, raddbg_stringize_spaces, i);
|
||||
indent_level, raddbgi_stringize_spaces, i);
|
||||
|
||||
String8 local_kind_str = raddbg_string_from_local_kind(local_ptr->kind);
|
||||
String8 local_kind_str = raddbgi_string_from_local_kind(local_ptr->kind);
|
||||
str8_list_pushf(arena, out, "%.*s kind=%.*s\n",
|
||||
indent_level, raddbg_stringize_spaces, str8_varg(local_kind_str));
|
||||
indent_level, raddbgi_stringize_spaces, str8_varg(local_kind_str));
|
||||
|
||||
String8 name = {0};
|
||||
name.str = raddbg_string_from_idx(parsed, local_ptr->name_string_idx, &name.size);
|
||||
name.str = raddbgi_string_from_idx(parsed, local_ptr->name_string_idx, &name.size);
|
||||
str8_list_pushf(arena, out, "%.*s name='%.*s'\n",
|
||||
indent_level, raddbg_stringize_spaces, str8_varg(name));
|
||||
indent_level, raddbgi_stringize_spaces, str8_varg(name));
|
||||
|
||||
str8_list_pushf(arena, out, "%.*s type_idx=%u\n",
|
||||
indent_level, raddbg_stringize_spaces, local_ptr->type_idx);
|
||||
indent_level, raddbgi_stringize_spaces, local_ptr->type_idx);
|
||||
|
||||
U32 location_first = local_ptr->location_first;
|
||||
U32 location_opl_raw = local_ptr->location_opl;
|
||||
U32 location_opl = ClampTop(location_opl_raw, bundle->location_block_count);
|
||||
|
||||
if (location_first < location_opl){
|
||||
str8_list_pushf(arena, out, "%.*s locations:\n", indent_level, raddbg_stringize_spaces);
|
||||
RADDBG_LocationBlock *block_ptr = bundle->location_blocks + location_first;
|
||||
str8_list_pushf(arena, out, "%.*s locations:\n", indent_level, raddbgi_stringize_spaces);
|
||||
RADDBGI_LocationBlock *block_ptr = bundle->location_blocks + location_first;
|
||||
for (U32 j = location_first; j < location_opl; j += 1, block_ptr += 1){
|
||||
if (block_ptr->scope_off_first == 0 && block_ptr->scope_off_opl == max_U32){
|
||||
str8_list_pushf(arena, out, "%.*s case *always*:\n", indent_level, raddbg_stringize_spaces);
|
||||
str8_list_pushf(arena, out, "%.*s case *always*:\n", indent_level, raddbgi_stringize_spaces);
|
||||
}
|
||||
else{
|
||||
str8_list_pushf(arena, out, "%.*s case [0x%08x, 0x%08x):\n",
|
||||
indent_level, raddbg_stringize_spaces,
|
||||
indent_level, raddbgi_stringize_spaces,
|
||||
block_ptr->scope_off_first, block_ptr->scope_off_opl);
|
||||
}
|
||||
|
||||
if (block_ptr->location_data_off >= bundle->location_data_size){
|
||||
str8_list_pushf(arena, out, "%.*s <bad-location-data-offset>\n",
|
||||
indent_level, raddbg_stringize_spaces);
|
||||
indent_level, raddbgi_stringize_spaces);
|
||||
}
|
||||
else{
|
||||
str8_list_pushf(arena, out, "%.*s ", indent_level, raddbg_stringize_spaces);
|
||||
str8_list_pushf(arena, out, "%.*s ", indent_level, raddbgi_stringize_spaces);
|
||||
|
||||
U8 *loc_data_opl = bundle->location_data + bundle->location_data_size;
|
||||
U8 *loc_base_ptr = bundle->location_data + block_ptr->location_data_off;
|
||||
RADDBG_LocationKind kind = (RADDBG_LocationKind)*loc_base_ptr;
|
||||
RADDBGI_LocationKind kind = (RADDBGI_LocationKind)*loc_base_ptr;
|
||||
switch (kind){
|
||||
default:
|
||||
{
|
||||
str8_list_pushf(arena, out, "<invalid-location-kind>\n");
|
||||
}break;
|
||||
|
||||
case RADDBG_LocationKind_AddrBytecodeStream:
|
||||
case RADDBGI_LocationKind_AddrBytecodeStream:
|
||||
{
|
||||
str8_list_pushf(arena, out, "AddrBytecodeStream\n");
|
||||
str8_list_pushf(arena, out, "%.*s ", indent_level, raddbg_stringize_spaces);
|
||||
str8_list_pushf(arena, out, "%.*s ", indent_level, raddbgi_stringize_spaces);
|
||||
U8 *bytecode_ptr = loc_base_ptr + 1;
|
||||
for (;bytecode_ptr < loc_data_opl && *bytecode_ptr != 0; bytecode_ptr += 1){
|
||||
str8_list_pushf(arena, out, "%02x ", *bytecode_ptr);
|
||||
@@ -698,10 +698,10 @@ raddbg_stringize_scope(Arena *arena, String8List *out, RADDBG_Parsed *parsed,
|
||||
str8_list_pushf(arena, out, "\n");
|
||||
}break;
|
||||
|
||||
case RADDBG_LocationKind_ValBytecodeStream:
|
||||
case RADDBGI_LocationKind_ValBytecodeStream:
|
||||
{
|
||||
str8_list_pushf(arena, out, "ValBytecodeStream\n");
|
||||
str8_list_pushf(arena, out, "%.*s ", indent_level, raddbg_stringize_spaces);
|
||||
str8_list_pushf(arena, out, "%.*s ", indent_level, raddbgi_stringize_spaces);
|
||||
U8 *bytecode_ptr = loc_base_ptr + 1;
|
||||
for (;bytecode_ptr < loc_data_opl && *bytecode_ptr != 0; bytecode_ptr += 1){
|
||||
str8_list_pushf(arena, out, "%02x ", *bytecode_ptr);
|
||||
@@ -709,37 +709,37 @@ raddbg_stringize_scope(Arena *arena, String8List *out, RADDBG_Parsed *parsed,
|
||||
str8_list_pushf(arena, out, "\n");
|
||||
}break;
|
||||
|
||||
case RADDBG_LocationKind_AddrRegisterPlusU16:
|
||||
case RADDBGI_LocationKind_AddrRegisterPlusU16:
|
||||
{
|
||||
if (loc_base_ptr + sizeof(RADDBG_LocationRegisterPlusU16) > loc_data_opl){
|
||||
if (loc_base_ptr + sizeof(RADDBGI_LocationRegisterPlusU16) > loc_data_opl){
|
||||
str8_list_pushf(arena, out, "AddrRegisterPlusU16( <invalid-encoding> )\n");
|
||||
}
|
||||
else{
|
||||
RADDBG_LocationRegisterPlusU16 *loc = (RADDBG_LocationRegisterPlusU16*)loc_base_ptr;
|
||||
RADDBGI_LocationRegisterPlusU16 *loc = (RADDBGI_LocationRegisterPlusU16*)loc_base_ptr;
|
||||
str8_list_pushf(arena, out, "AddrRegisterPlusU16(reg: %u, off: %u)\n",
|
||||
loc->register_code, loc->offset);
|
||||
}
|
||||
}break;
|
||||
|
||||
case RADDBG_LocationKind_AddrAddrRegisterPlusU16:
|
||||
case RADDBGI_LocationKind_AddrAddrRegisterPlusU16:
|
||||
{
|
||||
if (loc_base_ptr + sizeof(RADDBG_LocationRegisterPlusU16) > loc_data_opl){
|
||||
if (loc_base_ptr + sizeof(RADDBGI_LocationRegisterPlusU16) > loc_data_opl){
|
||||
str8_list_pushf(arena, out, "AddrAddrRegisterPlusU16( <invalid-encoding> )\n");
|
||||
}
|
||||
else{
|
||||
RADDBG_LocationRegisterPlusU16 *loc = (RADDBG_LocationRegisterPlusU16*)loc_base_ptr;
|
||||
RADDBGI_LocationRegisterPlusU16 *loc = (RADDBGI_LocationRegisterPlusU16*)loc_base_ptr;
|
||||
str8_list_pushf(arena, out, "AddrAddrRegisterPlusU16(reg: %u, off: %u)\n",
|
||||
loc->register_code, loc->offset);
|
||||
}
|
||||
}break;
|
||||
|
||||
case RADDBG_LocationKind_ValRegister:
|
||||
case RADDBGI_LocationKind_ValRegister:
|
||||
{
|
||||
if (loc_base_ptr + sizeof(RADDBG_LocationRegister) > loc_data_opl){
|
||||
if (loc_base_ptr + sizeof(RADDBGI_LocationRegister) > loc_data_opl){
|
||||
str8_list_pushf(arena, out, "ValRegister( <invalid-encoding> )\n");
|
||||
}
|
||||
else{
|
||||
RADDBG_LocationRegister *loc = (RADDBG_LocationRegister*)loc_base_ptr;
|
||||
RADDBGI_LocationRegister *loc = (RADDBGI_LocationRegister*)loc_base_ptr;
|
||||
str8_list_pushf(arena, out, "ValRegister(reg: %u)\n", loc->register_code);
|
||||
}
|
||||
}break;
|
||||
@@ -756,7 +756,7 @@ raddbg_stringize_scope(Arena *arena, String8List *out, RADDBG_Parsed *parsed,
|
||||
for (U32 child = scope->first_child_scope_idx;
|
||||
child != 0;){
|
||||
// get scope for child
|
||||
RADDBG_Scope *child_scope = 0;
|
||||
RADDBGI_Scope *child_scope = 0;
|
||||
if (child < bundle->scope_count){
|
||||
child_scope = bundle->scopes + child;
|
||||
}
|
||||
@@ -765,12 +765,12 @@ raddbg_stringize_scope(Arena *arena, String8List *out, RADDBG_Parsed *parsed,
|
||||
}
|
||||
|
||||
// stringize child
|
||||
raddbg_stringize_scope(arena, out, parsed, bundle, child_scope, indent_level + 1);
|
||||
raddbgi_stringize_scope(arena, out, parsed, bundle, child_scope, indent_level + 1);
|
||||
|
||||
// increment iterator
|
||||
child = child_scope->next_sibling_scope_idx;
|
||||
}
|
||||
|
||||
str8_list_pushf(arena, out, "%.*s[/%u]\n",
|
||||
indent_level, raddbg_stringize_spaces, this_idx);
|
||||
indent_level, raddbgi_stringize_spaces, this_idx);
|
||||
}
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
// Copyright (c) 2024 Epic Games Tools
|
||||
// Licensed under the MIT license (https://opensource.org/license/mit/)
|
||||
|
||||
#ifndef RADDBG_STRINGIZE_H
|
||||
#define RADDBG_STRINGIZE_H
|
||||
#ifndef RADDBGI_STRINGIZE_H
|
||||
#define RADDBGI_STRINGIZE_H
|
||||
|
||||
// TODO(allen): this depends on types from our base layer.
|
||||
// we need to decide if we want this to be included in the "format" layer
|
||||
@@ -13,108 +13,108 @@
|
||||
////////////////////////////////
|
||||
//~ RADDBG Stringize Helper Types
|
||||
|
||||
typedef struct RADDBG_FilePathBundle{
|
||||
RADDBG_FilePathNode *file_paths;
|
||||
typedef struct RADDBGI_FilePathBundle{
|
||||
RADDBGI_FilePathNode *file_paths;
|
||||
U32 file_path_count;
|
||||
} RADDBG_FilePathBundle;
|
||||
} RADDBGI_FilePathBundle;
|
||||
|
||||
typedef struct RADDBG_UDTMemberBundle{
|
||||
RADDBG_Member *members;
|
||||
RADDBG_EnumMember *enum_members;
|
||||
typedef struct RADDBGI_UDTMemberBundle{
|
||||
RADDBGI_Member *members;
|
||||
RADDBGI_EnumMember *enum_members;
|
||||
U32 member_count;
|
||||
U32 enum_member_count;
|
||||
} RADDBG_UDTMemberBundle;
|
||||
} RADDBGI_UDTMemberBundle;
|
||||
|
||||
typedef struct RADDBG_ScopeBundle{
|
||||
RADDBG_Scope *scopes;
|
||||
typedef struct RADDBGI_ScopeBundle{
|
||||
RADDBGI_Scope *scopes;
|
||||
U64 *scope_voffs;
|
||||
RADDBG_Local *locals;
|
||||
RADDBG_LocationBlock *location_blocks;
|
||||
RADDBGI_Local *locals;
|
||||
RADDBGI_LocationBlock *location_blocks;
|
||||
U8 *location_data;
|
||||
U32 scope_count;
|
||||
U32 scope_voff_count;
|
||||
U32 local_count;
|
||||
U32 location_block_count;
|
||||
U32 location_data_size;
|
||||
} RADDBG_ScopeBundle;
|
||||
} RADDBGI_ScopeBundle;
|
||||
|
||||
////////////////////////////////
|
||||
//~ RADDBG Common Stringize Functions
|
||||
|
||||
static String8 raddbg_string_from_data_section_tag(RADDBG_DataSectionTag tag);
|
||||
static String8 raddbg_string_from_arch(RADDBG_Arch arch);
|
||||
static String8 raddbg_string_from_language(RADDBG_Language language);
|
||||
static String8 raddbg_string_from_type_kind(RADDBG_TypeKind type_kind);
|
||||
static String8 raddbg_string_from_member_kind(RADDBG_MemberKind member_kind);
|
||||
static String8 raddbg_string_from_local_kind(RADDBG_LocalKind local_kind);
|
||||
static String8 raddbgi_string_from_data_section_tag(RADDBGI_DataSectionTag tag);
|
||||
static String8 raddbgi_string_from_arch(RADDBGI_Arch arch);
|
||||
static String8 raddbgi_string_from_language(RADDBGI_Language language);
|
||||
static String8 raddbgi_string_from_type_kind(RADDBGI_TypeKind type_kind);
|
||||
static String8 raddbgi_string_from_member_kind(RADDBGI_MemberKind member_kind);
|
||||
static String8 raddbgi_string_from_local_kind(RADDBGI_LocalKind local_kind);
|
||||
|
||||
////////////////////////////////
|
||||
//~ RADDBG Flags Stringize Functions
|
||||
|
||||
static void raddbg_stringize_binary_section_flags(Arena *arena, String8List *out,
|
||||
RADDBG_BinarySectionFlags flags);
|
||||
static void raddbgi_stringize_binary_section_flags(Arena *arena, String8List *out,
|
||||
RADDBGI_BinarySectionFlags flags);
|
||||
|
||||
static void raddbg_stringize_type_modifier_flags(Arena *arena, String8List *out,
|
||||
RADDBG_TypeModifierFlags flags);
|
||||
static void raddbgi_stringize_type_modifier_flags(Arena *arena, String8List *out,
|
||||
RADDBGI_TypeModifierFlags flags);
|
||||
|
||||
static void raddbg_stringize_user_defined_type_flags(Arena *arena, String8List *out,
|
||||
RADDBG_UserDefinedTypeFlags flags);
|
||||
static void raddbgi_stringize_user_defined_type_flags(Arena *arena, String8List *out,
|
||||
RADDBGI_UserDefinedTypeFlags flags);
|
||||
|
||||
static void raddbg_stringize_link_flags(Arena *arena, String8List *out,
|
||||
RADDBG_LinkFlags flags);
|
||||
static void raddbgi_stringize_link_flags(Arena *arena, String8List *out,
|
||||
RADDBGI_LinkFlags flags);
|
||||
|
||||
////////////////////////////////
|
||||
//~ RADDBG Compound Stringize Functions
|
||||
|
||||
static void
|
||||
raddbg_stringize_data_sections(Arena *arena, String8List *out, RADDBG_Parsed *parsed,
|
||||
U32 indent_level);
|
||||
raddbgi_stringize_data_sections(Arena *arena, String8List *out, RADDBGI_Parsed *parsed,
|
||||
U32 indent_level);
|
||||
|
||||
static void
|
||||
raddbg_stringize_top_level_info(Arena *arena, String8List *out, RADDBG_Parsed *parsed,
|
||||
RADDBG_TopLevelInfo *tli, U32 indent_level);
|
||||
raddbgi_stringize_top_level_info(Arena *arena, String8List *out, RADDBGI_Parsed *parsed,
|
||||
RADDBGI_TopLevelInfo *tli, U32 indent_level);
|
||||
|
||||
static void
|
||||
raddbg_stringize_binary_section(Arena *arena, String8List *out, RADDBG_Parsed *parsed,
|
||||
RADDBG_BinarySection *bin_section, U32 indent_level);
|
||||
raddbgi_stringize_binary_section(Arena *arena, String8List *out, RADDBGI_Parsed *parsed,
|
||||
RADDBGI_BinarySection *bin_section, U32 indent_level);
|
||||
|
||||
static void
|
||||
raddbg_stringize_file_path(Arena *arena, String8List *out, RADDBG_Parsed *parsed,
|
||||
RADDBG_FilePathBundle *bundle, RADDBG_FilePathNode *file_path,
|
||||
U32 indent_level);
|
||||
raddbgi_stringize_file_path(Arena *arena, String8List *out, RADDBGI_Parsed *parsed,
|
||||
RADDBGI_FilePathBundle *bundle, RADDBGI_FilePathNode *file_path,
|
||||
U32 indent_level);
|
||||
|
||||
static void
|
||||
raddbg_stringize_source_file(Arena *arena, String8List *out, RADDBG_Parsed *parsed,
|
||||
RADDBG_SourceFile *source_file, U32 indent_level);
|
||||
raddbgi_stringize_source_file(Arena *arena, String8List *out, RADDBGI_Parsed *parsed,
|
||||
RADDBGI_SourceFile *source_file, U32 indent_level);
|
||||
|
||||
static void
|
||||
raddbg_stringize_unit(Arena *arena, String8List *out, RADDBG_Parsed *parsed,
|
||||
RADDBG_Unit *unit, U32 indent_level);
|
||||
raddbgi_stringize_unit(Arena *arena, String8List *out, RADDBGI_Parsed *parsed,
|
||||
RADDBGI_Unit *unit, U32 indent_level);
|
||||
|
||||
static void
|
||||
raddbg_stringize_type_node(Arena *arena, String8List *out, RADDBG_Parsed *parsed,
|
||||
RADDBG_TypeNode *type, U32 indent_level);
|
||||
raddbgi_stringize_type_node(Arena *arena, String8List *out, RADDBGI_Parsed *parsed,
|
||||
RADDBGI_TypeNode *type, U32 indent_level);
|
||||
|
||||
static void
|
||||
raddbg_stringize_udt(Arena *arena, String8List *out, RADDBG_Parsed *parsed,
|
||||
RADDBG_UDTMemberBundle *bundle, RADDBG_UDT *udt,
|
||||
U32 indent_level);
|
||||
raddbgi_stringize_udt(Arena *arena, String8List *out, RADDBGI_Parsed *parsed,
|
||||
RADDBGI_UDTMemberBundle *bundle, RADDBGI_UDT *udt,
|
||||
U32 indent_level);
|
||||
|
||||
static void
|
||||
raddbg_stringize_global_variable(Arena *arena, String8List *out, RADDBG_Parsed *parsed,
|
||||
RADDBG_GlobalVariable *global_variable, U32 indent_level);
|
||||
raddbgi_stringize_global_variable(Arena *arena, String8List *out, RADDBGI_Parsed *parsed,
|
||||
RADDBGI_GlobalVariable *global_variable, U32 indent_level);
|
||||
|
||||
static void
|
||||
raddbg_stringize_thread_variable(Arena *arena, String8List *out, RADDBG_Parsed *parsed,
|
||||
RADDBG_ThreadVariable *thread_var,
|
||||
U32 indent_level);
|
||||
raddbgi_stringize_thread_variable(Arena *arena, String8List *out, RADDBGI_Parsed *parsed,
|
||||
RADDBGI_ThreadVariable *thread_var,
|
||||
U32 indent_level);
|
||||
|
||||
static void
|
||||
raddbg_stringize_procedure(Arena *arena, String8List *out, RADDBG_Parsed *parsed,
|
||||
RADDBG_Procedure *proc, U32 indent_level);
|
||||
raddbgi_stringize_procedure(Arena *arena, String8List *out, RADDBGI_Parsed *parsed,
|
||||
RADDBGI_Procedure *proc, U32 indent_level);
|
||||
|
||||
static void
|
||||
raddbg_stringize_scope(Arena *arena, String8List *out, RADDBG_Parsed *parsed,
|
||||
RADDBG_ScopeBundle *bundle, RADDBG_Scope *scope, U32 indent_level);
|
||||
raddbgi_stringize_scope(Arena *arena, String8List *out, RADDBGI_Parsed *parsed,
|
||||
RADDBGI_ScopeBundle *bundle, RADDBGI_Scope *scope, U32 indent_level);
|
||||
|
||||
#endif //RADDBG_STRINGIZE_H
|
||||
#endif //RADDBGI_STRINGIZE_H
|
||||
|
||||
Reference in New Issue
Block a user