mirror of
https://github.com/Ed94/raddebugger.git
synced 2026-08-03 20:38:40 +00:00
print register name
This commit is contained in:
+59
-7
@@ -4,6 +4,40 @@
|
||||
////////////////////////////////
|
||||
//~ rjf: RDI Enum -> String Functions
|
||||
|
||||
internal String8
|
||||
rdi_string_from_reg_code_x86(U64 reg_code)
|
||||
{
|
||||
#define X(name, value) case RDI_RegCodeX86_##name: return str8_lit(#name);
|
||||
switch (reg_code) {
|
||||
RDI_RegCodeX86_XList
|
||||
}
|
||||
#undef X
|
||||
return str8_lit("");
|
||||
}
|
||||
|
||||
internal String8
|
||||
rdi_string_from_reg_code_x64(U64 reg_code)
|
||||
{
|
||||
#define X(name, value) case RDI_RegCodeX64_##name: return str8_lit(#name);
|
||||
switch (reg_code) {
|
||||
RDI_RegCodeX64_XList
|
||||
}
|
||||
#undef X
|
||||
return str8_lit("");
|
||||
}
|
||||
|
||||
internal String8
|
||||
rdi_string_from_reg_code(RDI_Arch arch, U64 reg_code)
|
||||
{
|
||||
switch (arch) {
|
||||
case RDI_Arch_NULL: break;
|
||||
case RDI_Arch_X86: return rdi_string_from_reg_code_x86(reg_code);
|
||||
case RDI_Arch_X64: return rdi_string_from_reg_code_x64(reg_code);
|
||||
default: InvalidPath;
|
||||
}
|
||||
return str8_lit("");
|
||||
}
|
||||
|
||||
internal String8
|
||||
rdi_string_from_data_section_kind(RDI_SectionKind v)
|
||||
{
|
||||
@@ -128,6 +162,21 @@ rdi_stringize_link_flags(Arena *arena, String8List *out, RDI_LinkFlags flags)
|
||||
#undef X
|
||||
}
|
||||
|
||||
////////////////////////////////
|
||||
|
||||
internal String8
|
||||
rdi_format_reg_code(Arena *arena, RDI_Arch arch, U64 reg_code)
|
||||
{
|
||||
String8 result = {0};
|
||||
String8 reg_name = rdi_string_from_reg_code(arch, reg_code);
|
||||
if (reg_name.size) {
|
||||
result = push_str8f(arena, "%S", reg_name, reg_code);
|
||||
} else {
|
||||
result = push_str8f(arena, "??? (%llu)", reg_code);
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
////////////////////////////////
|
||||
//~ rjf: RADDBG Compound Stringize Functions
|
||||
|
||||
@@ -585,9 +634,10 @@ rdi_stringize_procedure(Arena *arena, String8List *out, RDI_Parsed *rdi,
|
||||
}
|
||||
|
||||
internal void
|
||||
rdi_stringize_scope(Arena *arena, String8List *out, RDI_Parsed *rdi,
|
||||
rdi_stringize_scope(Arena *arena, String8List *out, RDI_Parsed *rdi, RDI_Arch arch,
|
||||
RDI_ScopeBundle *bundle, RDI_Scope *scope, U32 indent_level)
|
||||
{
|
||||
Temp scratch = scratch_begin(&arena, 1);
|
||||
|
||||
U32 this_idx = (U32)(scope - bundle->scopes);
|
||||
|
||||
@@ -720,8 +770,8 @@ rdi_stringize_scope(Arena *arena, String8List *out, RDI_Parsed *rdi,
|
||||
}
|
||||
else{
|
||||
RDI_LocationRegPlusU16 *loc = (RDI_LocationRegPlusU16*)loc_base_ptr;
|
||||
str8_list_pushf(arena, out, "AddrRegPlusU16(reg: %u, off: %u)\n",
|
||||
loc->reg_code, loc->offset);
|
||||
str8_list_pushf(arena, out, "AddrRegPlusU16(reg: %S, off: %u)\n",
|
||||
rdi_format_reg_code(scratch.arena, arch, loc->reg_code), loc->offset);
|
||||
}
|
||||
}break;
|
||||
|
||||
@@ -732,8 +782,8 @@ rdi_stringize_scope(Arena *arena, String8List *out, RDI_Parsed *rdi,
|
||||
}
|
||||
else{
|
||||
RDI_LocationRegPlusU16 *loc = (RDI_LocationRegPlusU16*)loc_base_ptr;
|
||||
str8_list_pushf(arena, out, "AddrAddrRegisterPlusU16(reg: %u, off: %u)\n",
|
||||
loc->reg_code, loc->offset);
|
||||
str8_list_pushf(arena, out, "AddrAddrRegisterPlusU16(reg: %S, off: %u)\n",
|
||||
rdi_format_reg_code(scratch.arena, arch, loc->reg_code), loc->offset);
|
||||
}
|
||||
}break;
|
||||
|
||||
@@ -744,7 +794,7 @@ rdi_stringize_scope(Arena *arena, String8List *out, RDI_Parsed *rdi,
|
||||
}
|
||||
else{
|
||||
RDI_LocationReg *loc = (RDI_LocationReg*)loc_base_ptr;
|
||||
str8_list_pushf(arena, out, "ValReg(reg: %u)\n", loc->reg_code);
|
||||
str8_list_pushf(arena, out, "ValReg(reg: %S)\n", rdi_format_reg_code(scratch.arena, arch, loc->reg_code));
|
||||
}
|
||||
}break;
|
||||
}
|
||||
@@ -769,7 +819,7 @@ rdi_stringize_scope(Arena *arena, String8List *out, RDI_Parsed *rdi,
|
||||
}
|
||||
|
||||
// stringize child
|
||||
rdi_stringize_scope(arena, out, rdi, bundle, child_scope, indent_level + 1);
|
||||
rdi_stringize_scope(arena, out, rdi, arch, bundle, child_scope, indent_level + 1);
|
||||
|
||||
// increment iterator
|
||||
child = child_scope->next_sibling_scope_idx;
|
||||
@@ -777,6 +827,8 @@ 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);
|
||||
|
||||
scratch_end(scratch);
|
||||
}
|
||||
|
||||
internal void
|
||||
|
||||
@@ -41,6 +41,9 @@ struct RDI_ScopeBundle
|
||||
////////////////////////////////
|
||||
//~ rjf: RDI Enum -> String Functions
|
||||
|
||||
internal String8 rdi_string_from_reg_code_x86(U64 reg_code);
|
||||
internal String8 rdi_string_from_reg_code_x64(U64 reg_code);
|
||||
internal String8 rdi_string_from_reg_code(RDI_Arch arch, U64 reg_code);
|
||||
internal String8 rdi_string_from_data_section_kind(RDI_SectionKind v);
|
||||
internal String8 rdi_string_from_arch(RDI_Arch v);
|
||||
internal String8 rdi_string_from_language(RDI_Language v);
|
||||
@@ -56,6 +59,10 @@ internal void rdi_stringize_type_modifier_flags(Arena *arena, String8List *out,
|
||||
internal void rdi_stringize_udt_flags(Arena *arena, String8List *out, RDI_UDTFlags flags);
|
||||
internal void rdi_stringize_link_flags(Arena *arena, String8List *out, RDI_LinkFlags flags);
|
||||
|
||||
////////////////////////////////
|
||||
|
||||
internal String8 rdi_format_reg_code(Arena *arena, RDI_Arch arch, U64 reg_code);
|
||||
|
||||
////////////////////////////////
|
||||
//~ rjf: RDI Compound Stringize Functions
|
||||
|
||||
@@ -72,7 +79,7 @@ internal void rdi_stringize_udt(Arena *arena, String8List *out, RDI_Parsed *rdi,
|
||||
internal void rdi_stringize_global_variable(Arena *arena, String8List *out, RDI_Parsed *rdi, RDI_GlobalVariable *global_variable, U32 indent_level);
|
||||
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_scope(Arena *arena, String8List *out, RDI_Parsed *rdi, RDI_Arch arch, 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
|
||||
|
||||
@@ -174,10 +174,10 @@ entry_point(CmdLine *cmd_line)
|
||||
}
|
||||
|
||||
//- rjf: TOP LEVEL INFO
|
||||
RDI_TopLevelInfo *tli = rdi_element_from_name_idx(rdi, TopLevelInfo, 0);
|
||||
if(dump_flags & DumpFlag_TopLevelInfo)
|
||||
{
|
||||
str8_list_pushf(arena, &dump, "# TOP LEVEL INFO:\n");
|
||||
RDI_TopLevelInfo *tli = rdi_element_from_name_idx(rdi, TopLevelInfo, 0);
|
||||
rdi_stringize_top_level_info(arena, &dump, rdi, tli, 1);
|
||||
str8_list_push(arena, &dump, str8_lit("\n"));
|
||||
}
|
||||
@@ -407,7 +407,7 @@ entry_point(CmdLine *cmd_line)
|
||||
{
|
||||
if(scopes[idx].parent_scope_idx == 0)
|
||||
{
|
||||
rdi_stringize_scope(arena, &dump, rdi, &scope_bundle, &scopes[idx], 1);
|
||||
rdi_stringize_scope(arena, &dump, rdi, tli->arch, &scope_bundle, &scopes[idx], 1);
|
||||
}
|
||||
}
|
||||
str8_list_push(arena, &dump, str8_lit("\n"));
|
||||
|
||||
Reference in New Issue
Block a user