print register name

This commit is contained in:
Nikita Smith
2024-10-19 20:37:47 -07:00
parent 26611c5454
commit 68c0906570
5 changed files with 245 additions and 10 deletions
+166
View File
@@ -589,6 +589,172 @@ X(NULL)\
X(X86)\
X(X64)\
#define RDI_RegCodeX86_XList \
X(nil, 0)\
X(eax, 1)\
X(ecx, 2)\
X(edx, 3)\
X(ebx, 4)\
X(esp, 5)\
X(ebp, 6)\
X(esi, 7)\
X(edi, 8)\
X(fsbase, 9)\
X(gsbase, 10)\
X(eflags, 11)\
X(eip, 12)\
X(dr0, 13)\
X(dr1, 14)\
X(dr2, 15)\
X(dr3, 16)\
X(dr4, 17)\
X(dr5, 18)\
X(dr6, 19)\
X(dr7, 20)\
X(fpr0, 21)\
X(fpr1, 22)\
X(fpr2, 23)\
X(fpr3, 24)\
X(fpr4, 25)\
X(fpr5, 26)\
X(fpr6, 27)\
X(fpr7, 28)\
X(st0, 29)\
X(st1, 30)\
X(st2, 31)\
X(st3, 32)\
X(st4, 33)\
X(st5, 34)\
X(st6, 35)\
X(st7, 36)\
X(fcw, 37)\
X(fsw, 38)\
X(ftw, 39)\
X(fop, 40)\
X(fcs, 41)\
X(fds, 42)\
X(fip, 43)\
X(fdp, 44)\
X(mxcsr, 45)\
X(mxcsr_mask, 46)\
X(ss, 47)\
X(cs, 48)\
X(ds, 49)\
X(es, 50)\
X(fs, 51)\
X(gs, 52)\
X(ymm0, 53)\
X(ymm1, 54)\
X(ymm2, 55)\
X(ymm3, 56)\
X(ymm4, 57)\
X(ymm5, 58)\
X(ymm6, 59)\
X(ymm7, 60)\
#define RDI_RegCodeX64_XList \
X(nil, 0)\
X(rax, 1)\
X(rcx, 2)\
X(rdx, 3)\
X(rbx, 4)\
X(rsp, 5)\
X(rbp, 6)\
X(rsi, 7)\
X(rdi, 8)\
X(r8, 9)\
X(r9, 10)\
X(r10, 11)\
X(r11, 12)\
X(r12, 13)\
X(r13, 14)\
X(r14, 15)\
X(r15, 16)\
X(es, 17)\
X(cs, 18)\
X(ss, 19)\
X(ds, 20)\
X(fs, 21)\
X(gs, 22)\
X(rip, 23)\
X(rflags, 24)\
X(dr0, 25)\
X(dr1, 26)\
X(dr2, 27)\
X(dr3, 28)\
X(dr4, 29)\
X(dr5, 30)\
X(dr6, 31)\
X(dr7, 32)\
X(st0, 33)\
X(st1, 34)\
X(st2, 35)\
X(st3, 36)\
X(st4, 37)\
X(st5, 38)\
X(st6, 39)\
X(st7, 40)\
X(fpr0, 41)\
X(fpr1, 42)\
X(fpr2, 43)\
X(fpr3, 44)\
X(fpr4, 45)\
X(fpr5, 46)\
X(fpr6, 47)\
X(fpr7, 48)\
X(zmm0, 49)\
X(zmm1, 50)\
X(zmm2, 51)\
X(zmm3, 52)\
X(zmm4, 53)\
X(zmm5, 54)\
X(zmm6, 55)\
X(zmm7, 56)\
X(zmm8, 57)\
X(zmm9, 58)\
X(zmm10, 59)\
X(zmm11, 60)\
X(zmm12, 61)\
X(zmm13, 62)\
X(zmm14, 63)\
X(zmm15, 64)\
X(zmm16, 65)\
X(zmm17, 66)\
X(zmm18, 67)\
X(zmm19, 68)\
X(zmm20, 69)\
X(zmm21, 70)\
X(zmm22, 71)\
X(zmm23, 72)\
X(zmm24, 73)\
X(zmm25, 74)\
X(zmm26, 75)\
X(zmm27, 76)\
X(zmm28, 77)\
X(zmm29, 78)\
X(zmm30, 79)\
X(zmm31, 80)\
X(k0, 81)\
X(k1, 82)\
X(k2, 83)\
X(k3, 84)\
X(k4, 85)\
X(k5, 86)\
X(k6, 87)\
X(k7, 88)\
X(mxcsr, 89)\
X(fsbase, 90)\
X(gsbase, 91)\
X(fcw, 92)\
X(fsw, 93)\
X(ftw, 94)\
X(fop, 95)\
X(fcs, 96)\
X(fds, 97)\
X(fip, 98)\
X(fdp, 99)\
X(mxcsr_mask, 100)\
#define RDI_TopLevelInfo_XList \
X(RDI_Arch, arch)\
X(RDI_U32, exe_name_string_idx)\
+59 -7
View File
@@ -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
+8 -1
View File
@@ -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
+2 -2
View File
@@ -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"));
+10
View File
@@ -459,6 +459,16 @@ RDI_RegCodeX64Table:
@expand(RDI_RegCodeX64Table a) `$(a.name .. =>10) = $(a.value)`
}
@xlist RDI_RegCodeX86_XList:
{
@expand(RDI_RegCodeX86Table a) `$(a.name), $(a.value)`
}
@xlist RDI_RegCodeX64_XList:
{
@expand(RDI_RegCodeX64Table a) `$(a.name), $(a.value)`
}
////////////////////////////////
//~ rjf: Top-Level Info Type Tables