WIP merging RDI dump into RAD Dumper

This commit is contained in:
Nikita Smith
2025-01-29 10:47:18 -08:00
parent bd5d38ef0c
commit 497f0e45d6
3 changed files with 789 additions and 28 deletions
+50
View File
@@ -66,6 +66,25 @@ typedef U64 RD_Option;
#define RD_Option_RelaxDwarfParser (1ull << 31ull)
// RDI
#define RD_Option_NoRdi (1ull << 32ull)
#define RD_Option_RdiDataSections (1ull << 33ull)
#define RD_Option_RdiTopLevelInfo (1ull << 34ull)
#define RD_Option_RdiBinarySections (1ull << 35ull)
#define RD_Option_RdiFilePaths (1ull << 36ull)
#define RD_Option_RdiSourceFiles (1ull << 37ull)
#define RD_Option_RdiLineTables (1ull << 38ull)
#define RD_Option_RdiSourceLineMaps (1ull << 39ull)
#define RD_Option_RdiUnits (1ull << 40ull)
#define RD_Option_RdiUnitVMap (1ull << 41ull)
#define RD_Option_RdiTypeNodes (1ull << 42ull)
#define RD_Option_RdiUserDefinedTypes (1ull << 43ull)
#define RD_Option_RdiGlobalVars (1ull << 44ull)
#define RD_Option_RdiThreadVars (1ull << 45ull)
#define RD_Option_RdiProcedures (1ull << 46ull)
#define RD_Option_RdiScopes (1ull << 47ull)
#define RD_Option_RdiScopeVMap (1ull << 48ull)
#define RD_Option_RdiInlineSites (1ull << 49ull)
#define RD_Option_RdiNameMaps (1ull << 50ull)
#define RD_Option_RdiStrings (1ull << 51ull)
typedef struct RD_Marker
{
@@ -122,6 +141,8 @@ typedef struct RD_Line
internal B32 rd_is_pe(String8 raw_data);
internal String8 rd_string_from_flags(Arena *arena, String8List list, U64 remaining_flags);
internal void rd_format_preamble(Arena *arena, String8List *out, String8 indent, String8 input_path, String8 raw_data);
// Markers
@@ -142,6 +163,35 @@ internal void rd_print_disasm (Arena *arena, String8List *o
internal String8 rd_format_hex_array(Arena *arena, U8 *ptr, U64 size);
internal void rd_print_raw_data (Arena *arena, String8List *out, String8 indent, U64 bytes_per_row, U64 marker_count, RD_Marker *markers, String8 raw_data);
//
// RDI
//
internal String8 rdi_string_from_data_section_kind(Arena *arena, RDI_SectionKind v);
internal String8 rdi_string_from_arch (Arena *arena, RDI_Arch v);
internal String8 rdi_string_from_language (Arena *arena, RDI_Language v);
internal String8 rdi_string_from_member_kind (Arena *arena, RDI_MemberKind v);
internal String8 rdi_string_from_binary_section_flags(Arena *arena, RDI_BinarySectionFlags flags);
internal String8 rdi_string_from_type_modifier (Arena *arena, RDI_TypeModifierFlags flags);
internal String8 rdi_string_from_udt_flags (Arena *arena, RDI_UDTFlags flags);
internal String8 rdi_string_from_link_flags (Arena *arena, RDI_LinkFlags flags);
internal void rdi_print_data_sections (Arena *arena, String8List *out, String8 indent, RDI_Parsed *rdi);
internal void rdi_print_top_level_info (Arena *arena, String8List *out, String8 indent, RDI_Parsed *rdi, RDI_TopLevelInfo *tli);
internal void rdi_print_binary_section (Arena *arena, String8List *out, String8 indent, RDI_Parsed *rdi, RDI_BinarySection *bin_section);
internal void rdi_print_file_path (Arena *arena, String8List *out, String8 indent, RDI_Parsed *rdi, RDI_FilePathNode *file_path);
internal void rdi_print_source_file (Arena *arena, String8List *out, String8 indent, RDI_Parsed *rdi, RDI_SourceFile *source_file);
internal void rdi_print_line_table (Arena *arena, String8List *out, String8 indent, RDI_Parsed *rdi, RDI_LineTable *line_table);
internal void rdi_print_source_line_map(Arena *arena, String8List *out, String8 indent, RDI_Parsed *rdi, RDI_SourceLineMap *map);
internal void rdi_print_unit (Arena *arena, String8List *out, String8 indent, RDI_Parsed *rdi, RDI_Unit *unit);
internal void rdi_print_type_node (Arena *arena, String8List *out, String8 indent, RDI_Parsed *rdi, RDI_TypeNode *type);
internal void rdi_print_global_variable(Arena *arena, String8List *out, String8 indent, RDI_Parsed *rdi, RDI_GlobalVariable *gvar);
internal void rdi_print_thread_variable(Arena *arena, String8List *out, String8 indent, RDI_Parsed *rdi, RDI_ThreadVariable *tvar);
internal void rdi_print_procedure (Arena *arena, String8List *out, String8 indent, RDI_Parsed *rdi, RDI_Procedure *proc);
internal void rdi_print_scope (Arena *arena, String8List *out, String8 indent, RDI_Parsed *rdi, RDI_Scope *scope, RDI_Arch arch);
internal void rdi_print_inline_site (Arena *arena, String8List *out, String8 indent, RDI_Parsed *rdi, RDI_InlineSite *inline_site);
// DWARF
internal String8List dw_string_list_from_expression (Arena *arena, String8 raw_data, U64 address_size, Arch arch, DW_Version ver, DW_Ext ext, B32 is_dwarf64);