diff --git a/src/raddbgi_convert/pdb/raddbgi_codeview.c b/src/codeview/codeview.c similarity index 97% rename from src/raddbgi_convert/pdb/raddbgi_codeview.c rename to src/codeview/codeview.c index 83ee6e44..e7425434 100644 --- a/src/raddbgi_convert/pdb/raddbgi_codeview.c +++ b/src/codeview/codeview.c @@ -4,7 +4,7 @@ //////////////////////////////// //~ CodeView Common Functions -static CV_NumericParsed +internal CV_NumericParsed cv_numeric_from_data_range(U8 *first, U8 *opl){ CV_NumericParsed result = {0}; if (first + 2 <= opl){ @@ -52,7 +52,7 @@ cv_numeric_from_data_range(U8 *first, U8 *opl){ return(result); } -static B32 +internal B32 cv_numeric_fits_in_u64(CV_NumericParsed *num){ B32 result = 0; switch (num->kind){ @@ -66,7 +66,7 @@ cv_numeric_fits_in_u64(CV_NumericParsed *num){ return(result); } -static B32 +internal B32 cv_numeric_fits_in_s64(CV_NumericParsed *num){ B32 result = 0; switch (num->kind){ @@ -81,7 +81,7 @@ cv_numeric_fits_in_s64(CV_NumericParsed *num){ return(result); } -static B32 +internal B32 cv_numeric_fits_in_f64(CV_NumericParsed *num){ B32 result = 0; switch (num->kind){ @@ -94,7 +94,7 @@ cv_numeric_fits_in_f64(CV_NumericParsed *num){ return(result); } -static U64 +internal U64 cv_u64_from_numeric(CV_NumericParsed *num){ U64 result = 0; switch (num->kind){ @@ -116,7 +116,7 @@ cv_u64_from_numeric(CV_NumericParsed *num){ return(result); } -static S64 +internal S64 cv_s64_from_numeric(CV_NumericParsed *num){ S64 result = 0; switch (num->kind){ @@ -143,7 +143,7 @@ cv_s64_from_numeric(CV_NumericParsed *num){ return(result); } -static F64 +internal F64 cv_f64_from_numeric(CV_NumericParsed *num){ F64 result = 0; switch (num->kind){ @@ -164,54 +164,9 @@ cv_f64_from_numeric(CV_NumericParsed *num){ //////////////////////////////// //~ CodeView Sym Parser Functions -static CV_SymParsed* -cv_sym_from_data(Arena *arena, String8 sym_data, U64 sym_align){ - Assert(1 <= sym_align && IsPow2OrZero(sym_align)); - ProfBegin("cv_sym_from_data"); - - Temp scratch = scratch_begin(&arena, 1); - - // gather up symbols - CV_RecRangeStream *stream = cv_rec_range_stream_from_data(scratch.arena, sym_data, sym_align); - - // convert to result - CV_SymParsed *result = push_array(arena, CV_SymParsed, 1); - result->data = sym_data; - result->sym_align = sym_align; - result->sym_ranges = cv_rec_range_array_from_stream(arena, stream); - cv_sym_top_level_info_from_syms(arena, sym_data, &result->sym_ranges, &result->info); - - scratch_end(scratch); - - ProfEnd(); - - return(result); -} +//- the first pass parser -static CV_LeafParsed* -cv_leaf_from_data(Arena *arena, String8 leaf_data, CV_TypeId itype_first){ - ProfBegin("cv_leaf_from_data"); - - Temp scratch = scratch_begin(&arena, 1); - - // gather up symbols - CV_RecRangeStream *stream = cv_rec_range_stream_from_data(scratch.arena, leaf_data, 1); - - // convert to result - CV_LeafParsed *result = push_array(arena, CV_LeafParsed, 1); - result->data = leaf_data; - result->itype_first = itype_first; - result->itype_opl = itype_first + stream->total_count; - result->leaf_ranges = cv_rec_range_array_from_stream(arena, stream); - - scratch_end(scratch); - - ProfEnd(); - - return(result); -} - -static CV_RecRangeStream* +internal CV_RecRangeStream* cv_rec_range_stream_from_data(Arena *arena, String8 sym_data, U64 sym_align){ Assert(1 <= sym_align && IsPow2OrZero(sym_align)); @@ -248,7 +203,33 @@ cv_rec_range_stream_from_data(Arena *arena, String8 sym_data, U64 sym_align){ return(result); } -static void +//- sym + +internal CV_SymParsed* +cv_sym_from_data(Arena *arena, String8 sym_data, U64 sym_align){ + Assert(1 <= sym_align && IsPow2OrZero(sym_align)); + ProfBegin("cv_sym_from_data"); + + Temp scratch = scratch_begin(&arena, 1); + + // gather up symbols + CV_RecRangeStream *stream = cv_rec_range_stream_from_data(scratch.arena, sym_data, sym_align); + + // convert to result + CV_SymParsed *result = push_array(arena, CV_SymParsed, 1); + result->data = sym_data; + result->sym_align = sym_align; + result->sym_ranges = cv_rec_range_array_from_stream(arena, stream); + cv_sym_top_level_info_from_syms(arena, sym_data, &result->sym_ranges, &result->info); + + scratch_end(scratch); + + ProfEnd(); + + return(result); +} + +internal void cv_sym_top_level_info_from_syms(Arena *arena, String8 sym_data, CV_RecRangeArray *ranges, CV_SymTopLevelInfo *info_out){ @@ -313,17 +294,41 @@ cv_sym_top_level_info_from_syms(Arena *arena, String8 sym_data, } } +//- leaf + +internal CV_LeafParsed* +cv_leaf_from_data(Arena *arena, String8 leaf_data, CV_TypeId itype_first){ + ProfBegin("cv_leaf_from_data"); + + Temp scratch = scratch_begin(&arena, 1); + + // gather up symbols + CV_RecRangeStream *stream = cv_rec_range_stream_from_data(scratch.arena, leaf_data, 1); + + // convert to result + CV_LeafParsed *result = push_array(arena, CV_LeafParsed, 1); + result->data = leaf_data; + result->itype_first = itype_first; + result->itype_opl = itype_first + stream->total_count; + result->leaf_ranges = cv_rec_range_array_from_stream(arena, stream); + + scratch_end(scratch); + + ProfEnd(); + + return(result); +} //- range streams -static CV_RecRangeChunk* +internal CV_RecRangeChunk* cv_rec_range_stream_push_chunk(Arena *arena, CV_RecRangeStream *stream){ CV_RecRangeChunk *result = push_array_no_zero(arena, CV_RecRangeChunk, 1); SLLQueuePush(stream->first_chunk, stream->last_chunk, result); return(result); } -static CV_RecRangeArray +internal CV_RecRangeArray cv_rec_range_array_from_stream(Arena *arena, CV_RecRangeStream *stream){ U64 total_count = stream->total_count; CV_RecRange *ranges = push_array_no_zero(arena, CV_RecRange, total_count); @@ -345,9 +350,8 @@ cv_rec_range_array_from_stream(Arena *arena, CV_RecRangeStream *stream){ //////////////////////////////// //~ CodeView C13 Parser Functions -static CV_C13Parsed* -cv_c13_from_data(Arena *arena, String8 c13_data, - PDB_Strtbl *strtbl, PDB_CoffSectionArray *sections){ +internal CV_C13Parsed* +cv_c13_from_data(Arena *arena, String8 c13_data, PDB_Strtbl *strtbl, PDB_CoffSectionArray *sections){ ProfBegin("cv_c13_from_data"); // gather c13 data diff --git a/src/raddbgi_convert/pdb/raddbgi_codeview.h b/src/codeview/codeview.h similarity index 98% rename from src/raddbgi_convert/pdb/raddbgi_codeview.h rename to src/codeview/codeview.h index 35f989f9..8d206d82 100644 --- a/src/raddbgi_convert/pdb/raddbgi_codeview.h +++ b/src/codeview/codeview.h @@ -1,8 +1,8 @@ // Copyright (c) 2024 Epic Games Tools // Licensed under the MIT license (https://opensource.org/license/mit/) -#ifndef RADDBGI_CODEVIEW_H -#define RADDBGI_CODEVIEW_H +#ifndef CODEVIEW_H +#define CODEVIEW_H #pragma pack(push, 1) @@ -3015,46 +3015,44 @@ typedef struct CV_TypeIdArray{ //////////////////////////////// //~ CodeView Common Functions -static CV_NumericParsed cv_numeric_from_data_range(U8 *first, U8 *opl); +internal CV_NumericParsed cv_numeric_from_data_range(U8 *first, U8 *opl); -static B32 cv_numeric_fits_in_u64(CV_NumericParsed *num); -static B32 cv_numeric_fits_in_s64(CV_NumericParsed *num); -static B32 cv_numeric_fits_in_f64(CV_NumericParsed *num); +internal B32 cv_numeric_fits_in_u64(CV_NumericParsed *num); +internal B32 cv_numeric_fits_in_s64(CV_NumericParsed *num); +internal B32 cv_numeric_fits_in_f64(CV_NumericParsed *num); -static U64 cv_u64_from_numeric(CV_NumericParsed *num); -static S64 cv_s64_from_numeric(CV_NumericParsed *num); -static F64 cv_f64_from_numeric(CV_NumericParsed *num); +internal U64 cv_u64_from_numeric(CV_NumericParsed *num); +internal S64 cv_s64_from_numeric(CV_NumericParsed *num); +internal F64 cv_f64_from_numeric(CV_NumericParsed *num); //////////////////////////////// //~ CodeView Sym/Leaf Parser Functions //- the first pass parser -static CV_RecRangeStream* cv_rec_range_stream_from_data(Arena *arena, String8 data, U64 align); +internal CV_RecRangeStream* cv_rec_range_stream_from_data(Arena *arena, String8 data, U64 align); //- sym -static CV_SymParsed* cv_sym_from_data(Arena *arena, String8 sym_data, U64 sym_align); +internal CV_SymParsed* cv_sym_from_data(Arena *arena, String8 sym_data, U64 sym_align); -static void cv_sym_top_level_info_from_syms(Arena *arena, String8 sym_data, - CV_RecRangeArray *ranges, - CV_SymTopLevelInfo *info_out); +internal void cv_sym_top_level_info_from_syms(Arena *arena, String8 sym_data, + CV_RecRangeArray *ranges, + CV_SymTopLevelInfo *info_out); //- leaf -static CV_LeafParsed* cv_leaf_from_data(Arena *arena, String8 leaf_data, CV_TypeId first); +internal CV_LeafParsed* cv_leaf_from_data(Arena *arena, String8 leaf_data, CV_TypeId first); //- range streams -static CV_RecRangeChunk* cv_rec_range_stream_push_chunk(Arena *arena, - CV_RecRangeStream *stream); +internal CV_RecRangeChunk* cv_rec_range_stream_push_chunk(Arena *arena, + CV_RecRangeStream *stream); // TODO(allen): check why this isn't a pointer return - // leave a note if there's a good reason, otherwise switch to pointer return -static CV_RecRangeArray cv_rec_range_array_from_stream(Arena *arena, - CV_RecRangeStream *stream); +internal CV_RecRangeArray cv_rec_range_array_from_stream(Arena *arena, CV_RecRangeStream *stream); //////////////////////////////// //~ CodeView C13 Parser Functions typedef struct PDB_Strtbl PDB_Strtbl; typedef struct PDB_CoffSectionArray PDB_CoffSectionArray; -static CV_C13Parsed* cv_c13_from_data(Arena *arena, String8 c13_data, - struct PDB_Strtbl *strtbl, struct PDB_CoffSectionArray *sections); +internal CV_C13Parsed* cv_c13_from_data(Arena *arena, String8 c13_data, struct PDB_Strtbl *strtbl, struct PDB_CoffSectionArray *sections); -#endif //RADDBGI_CODEVIEW_H +#endif // CODEVIEW_H diff --git a/src/raddbgi_convert/pdb/raddbgi_codeview_stringize.c b/src/codeview/codeview_stringize.c similarity index 99% rename from src/raddbgi_convert/pdb/raddbgi_codeview_stringize.c rename to src/codeview/codeview_stringize.c index b8729609..70ee4628 100644 --- a/src/raddbgi_convert/pdb/raddbgi_codeview_stringize.c +++ b/src/codeview/codeview_stringize.c @@ -4,7 +4,7 @@ //////////////////////////////// //~ CodeView Common Stringize Functions -static void +internal void cv_stringize_numeric(Arena *arena, String8List *out, CV_NumericParsed *num){ String8 numeric_kind_str = cv_string_from_numeric_kind(num->kind); str8_list_pushf(arena, out, "(%.*s)", str8_varg(numeric_kind_str)); @@ -23,17 +23,17 @@ cv_stringize_numeric(Arena *arena, String8List *out, CV_NumericParsed *num){ } } -static void +internal void cv_stringize_lvar_addr_range(Arena *arena, String8List *out, CV_LvarAddrRange *range){ str8_list_pushf(arena, out, "{off=%x, sec=%u, len=%u}", range->off, range->sec, range->len); } -static void +internal void cv_stringize_lvar_addr_gap(Arena *arena, String8List *out, CV_LvarAddrGap *gap){ str8_list_pushf(arena, out, "{off=%x, len=%u}", gap->off, gap->len); } -static void +internal void cv_stringize_lvar_addr_gap_list(Arena *arena, String8List *out, void *first, void *opl){ U64 gap_count = ((U8*)first - (U8*)opl)/sizeof(CV_LvarAddrGap); if (gap_count > 0){ @@ -48,7 +48,7 @@ cv_stringize_lvar_addr_gap_list(Arena *arena, String8List *out, void *first, voi } } -static String8 +internal String8 cv_string_from_sym_kind(CV_SymKind kind){ String8 result = str8_lit("UNRECOGNIZED_SYM_KIND"); switch (kind){ @@ -59,7 +59,7 @@ cv_string_from_sym_kind(CV_SymKind kind){ return(result); } -static String8 +internal String8 cv_string_from_basic_type(CV_BasicType basic_type){ String8 result = str8_lit("UNRECOGNIZED_BASIC_TYPE"); switch (basic_type){ @@ -70,7 +70,7 @@ cv_string_from_basic_type(CV_BasicType basic_type){ return(result); } -static String8 +internal String8 cv_string_from_leaf_kind(CV_LeafKind kind){ String8 result = str8_lit("UNRECOGNIZED_LEAF_KIND"); switch (kind){ @@ -85,7 +85,7 @@ cv_string_from_leaf_kind(CV_LeafKind kind){ return(result); } -static String8 +internal String8 cv_string_from_numeric_kind(CV_NumericKind kind){ String8 result = str8_lit("UNRECOGNIZED_NUMERIC_KIND"); switch (kind){ @@ -97,7 +97,7 @@ cv_string_from_numeric_kind(CV_NumericKind kind){ return(result); } -static String8 +internal String8 cv_string_from_c13_sub_section_kind(CV_C13_SubSectionKind kind){ String8 result = str8_lit("UNRECOGNIZED_C13_SUB_SECTION_KIND"); switch (kind){ @@ -109,7 +109,7 @@ cv_string_from_c13_sub_section_kind(CV_C13_SubSectionKind kind){ return(result); } -static String8 +internal String8 cv_string_from_machine(CV_Arch arch){ String8 result = {0}; switch (arch){ @@ -120,7 +120,7 @@ cv_string_from_machine(CV_Arch arch){ return(result); } -static String8 +internal String8 cv_string_from_reg(CV_Arch arch, CV_Reg reg){ String8 result = {0}; switch (arch){ @@ -147,7 +147,7 @@ cv_string_from_reg(CV_Arch arch, CV_Reg reg){ return(result); } -static String8 +internal String8 cv_string_from_pointer_kind(CV_PointerKind ptr_kind){ String8 result = {0}; switch (ptr_kind){ @@ -169,7 +169,7 @@ cv_string_from_pointer_kind(CV_PointerKind ptr_kind){ return(result); } -static String8 +internal String8 cv_string_from_pointer_mode(CV_PointerMode ptr_mode){ String8 result = {0}; switch (ptr_mode){ @@ -183,7 +183,7 @@ cv_string_from_pointer_mode(CV_PointerMode ptr_mode){ return(result); } -static String8 +internal String8 cv_string_from_hfa_kind(CV_HFAKind hfa_kind){ String8 result = {0}; switch (hfa_kind){ @@ -196,7 +196,7 @@ cv_string_from_hfa_kind(CV_HFAKind hfa_kind){ return(result); } -static String8 +internal String8 cv_string_from_mo_com_udt_kind(CV_MoComUDTKind mo_com_udt_kind){ String8 result = {0}; switch (mo_com_udt_kind){ @@ -212,11 +212,11 @@ cv_string_from_mo_com_udt_kind(CV_MoComUDTKind mo_com_udt_kind){ //////////////////////////////// //~ CodeView Flags Stringize Functions -static char cv_stringize_spaces[] = " "; +global char cv_stringize_spaces[] = " "; #define SPACES cv_stringize_spaces -static void +internal void cv_stringize_modifier_flags(Arena *arena, String8List *out, U32 indent, CV_ModifierFlags flags){ if (flags & CV_ModifierFlag_Const){ @@ -230,7 +230,7 @@ cv_stringize_modifier_flags(Arena *arena, String8List *out, } } -static void +internal void cv_stringize_type_props(Arena *arena, String8List *out, U32 indent, CV_TypeProps props){ if (props & CV_TypeProp_Packed){ @@ -285,7 +285,7 @@ cv_stringize_type_props(Arena *arena, String8List *out, } } -static void +internal void cv_stringize_pointer_attribs(Arena *arena, String8List *out, U32 indent, CV_PointerAttribs attribs){ if (attribs & CV_PointerAttrib_IsFlat){ @@ -332,7 +332,7 @@ cv_stringize_pointer_attribs(Arena *arena, String8List *out, indent, SPACES, size); } -static void +internal void cv_stringize_local_flags(Arena *arena, String8List *out, U32 indent, CV_LocalFlags flags){ if (flags & CV_LocalFlag_Param){ @@ -376,7 +376,7 @@ cv_stringize_local_flags(Arena *arena, String8List *out, //////////////////////////////// //~ CodeView Sym Stringize Functions -static void +internal void cv_stringize_sym_parsed(Arena *arena, String8List *out, CV_SymParsed *sym){ CV_StringizeSymParams params = {0}; params.arch = sym->info.arch; @@ -384,7 +384,7 @@ cv_stringize_sym_parsed(Arena *arena, String8List *out, CV_SymParsed *sym){ cv_stringize_sym_array(arena, out, &sym->sym_ranges, sym->data, ¶ms); } -static void +internal void cv_stringize_sym_range(Arena *arena, String8List *out, CV_RecRange *range, String8 data, CV_StringizeSymParams *p){ @@ -1381,7 +1381,7 @@ cv_stringize_sym_range(Arena *arena, String8List *out, } } -static void +internal void cv_stringize_sym_array(Arena *arena, String8List *out, CV_RecRangeArray *ranges, String8 data, CV_StringizeSymParams *p){ @@ -1396,7 +1396,7 @@ cv_stringize_sym_array(Arena *arena, String8List *out, //////////////////////////////// //~ CodeView Leaf Stringize Functions -static void +internal void cv_stringize_leaf_parsed(Arena *arena, String8List *out, CV_LeafParsed *leaf){ CV_StringizeLeafParams params = {0}; @@ -1404,7 +1404,7 @@ cv_stringize_leaf_parsed(Arena *arena, String8List *out, CV_LeafParsed *leaf){ leaf->data, ¶ms); } -static void +internal void cv_stringize_leaf_range(Arena *arena, String8List *out, CV_RecRange *range, CV_TypeId itype, String8 data, CV_StringizeLeafParams *p){ @@ -2312,7 +2312,7 @@ cv_stringize_leaf_range(Arena *arena, String8List *out, } } -static void +internal void cv_stringize_leaf_array(Arena *arena, String8List *out, CV_RecRangeArray *ranges, CV_TypeId itype_first, String8 data, CV_StringizeLeafParams *p){ @@ -2328,7 +2328,7 @@ cv_stringize_leaf_array(Arena *arena, String8List *out, //////////////////////////////// //~ CodeView C13 Stringize Functions -static void +internal void cv_stringize_c13_parsed(Arena *arena, String8List *out, CV_C13Parsed *c13){ for(CV_C13SubSectionNode *node = c13->first_sub_section; node != 0; diff --git a/src/codeview/codeview_stringize.h b/src/codeview/codeview_stringize.h new file mode 100644 index 00000000..4e3d3ce3 --- /dev/null +++ b/src/codeview/codeview_stringize.h @@ -0,0 +1,86 @@ +// Copyright (c) 2024 Epic Games Tools +// Licensed under the MIT license (https://opensource.org/license/mit/) + +#ifndef CODEVIEW_STRINGIZE_H +#define CODEVIEW_STRINGIZE_H + +//////////////////////////////// +//~ CodeView Stringize Helper Types + +typedef struct CV_StringizeSymParams{ + CV_Arch arch; +} CV_StringizeSymParams; + +typedef struct CV_StringizeLeafParams{ + U32 dummy; +} CV_StringizeLeafParams; + +//////////////////////////////// +//~ CodeView Common Stringize Functions + +internal void cv_stringize_numeric(Arena *arena, String8List *out, CV_NumericParsed *num); + +internal void cv_stringize_lvar_addr_range(Arena *arena, String8List *out, + CV_LvarAddrRange *range); +internal void cv_stringize_lvar_addr_gap(Arena *arena, String8List *out, CV_LvarAddrGap *gap); +internal void cv_stringize_lvar_addr_gap_list(Arena *arena, String8List *out, + void *first, void *opl); + +internal String8 cv_string_from_sym_kind(CV_SymKind kind); +internal String8 cv_string_from_basic_type(CV_BasicType basic_type); +internal String8 cv_string_from_leaf_kind(CV_LeafKind kind); +internal String8 cv_string_from_numeric_kind(CV_NumericKind kind); +internal String8 cv_string_from_c13_sub_section_kind(CV_C13_SubSectionKind kind); +internal String8 cv_string_from_machine(CV_Arch arch); +internal String8 cv_string_from_reg(CV_Arch arch, CV_Reg reg); +internal String8 cv_string_from_pointer_kind(CV_PointerKind ptr_kind); +internal String8 cv_string_from_pointer_mode(CV_PointerMode ptr_mode); +internal String8 cv_string_from_hfa_kind(CV_HFAKind hfa_kind); +internal String8 cv_string_from_mo_com_udt_kind(CV_MoComUDTKind mo_com_udt_kind); + +//////////////////////////////// +//~ CodeView Flags Stringize Functions + +internal void cv_stringize_modifier_flags(Arena *arena, String8List *out, + U32 indent, CV_ModifierFlags flags); + +internal void cv_stringize_type_props(Arena *arena, String8List *out, + U32 indent, CV_TypeProps props); + +internal void cv_stringize_pointer_attribs(Arena *arena, String8List *out, + U32 indent, CV_PointerAttribs attribs); + +internal void cv_stringize_local_flags(Arena *arena, String8List *out, + U32 indent, CV_LocalFlags flags); + +//////////////////////////////// +//~ CodeView Sym Stringize Functions + +internal void cv_stringize_sym_parsed(Arena *arena, String8List *out, CV_SymParsed *sym); + +internal void cv_stringize_sym_range(Arena *arena, String8List *out, + CV_RecRange *range, String8 data, + CV_StringizeSymParams *p); +internal void cv_stringize_sym_array(Arena *arena, String8List *out, + CV_RecRangeArray *ranges, String8 data, + CV_StringizeSymParams *p); + +//////////////////////////////// +//~ CodeView Leaf Stringize Functions + +internal void cv_stringize_leaf_parsed(Arena *arena, String8List *out, CV_LeafParsed *leaf); + +internal void cv_stringize_leaf_range(Arena *arena, String8List *out, + CV_RecRange *range, CV_TypeId itype, String8 data, + CV_StringizeLeafParams *p); +internal void cv_stringize_leaf_array(Arena *arena, String8List *out, + CV_RecRangeArray *ranges, CV_TypeId itype_first, + String8 data, + CV_StringizeLeafParams *p); + +//////////////////////////////// +//~ CodeView C13 Stringize Functions + +internal void cv_stringize_c13_parsed(Arena *arena, String8List *out, CV_C13Parsed *c13); + +#endif // CODEVIEW_STRINGIZE_H diff --git a/src/coff/coff.h b/src/coff/coff.h index 6563a4b0..abe1efa2 100644 --- a/src/coff/coff.h +++ b/src/coff/coff.h @@ -11,6 +11,16 @@ typedef U32 COFF_TimeStamp; #pragma pack(push,1) +typedef struct COFF_Guid COFF_Guid; +struct COFF_Guid +{ + U32 data1; + U16 data2; + U16 data3; + U32 data4; + U32 data5; +}; + typedef U16 COFF_Flags; enum { diff --git a/src/demon/demon_accel.c b/src/demon/demon_accel.c index c9b9ede4..156fb9f1 100644 --- a/src/demon/demon_accel.c +++ b/src/demon/demon_accel.c @@ -158,57 +158,24 @@ demon_accel_write_regs(DEMON_Entity *thread, void *data){ // get accel data DEMON_AccelThread *accel = demon_accel_from_thread(thread); - // low level write - B32 success = 0; - U64 data_size = 0; - switch (thread->arch){ - case Architecture_x86: - { - data_size = sizeof(REGS_RegBlockX86); - success = demon_os_write_regs_x86(thread, (REGS_RegBlockX86*)data); - }break; - case Architecture_x64: - { - data_size = sizeof(REGS_RegBlockX64); - success = demon_os_write_regs_x64(thread, (REGS_RegBlockX64*)data); - }break; - } + // write + U64 data_size = regs_block_size_from_architecture(thread->arch); + B32 success = demon_os_write_regs(thread, data); // update cache - if (success){ + if(success) + { accel->reg_cache_time = demon_time; MemoryCopy(&accel->regs, data, data_size); } } -internal void -demon_accel_low_level_write_regs(DEMON_Entity *thread){ - // NOTE(allen): This is a tricky one. It's just a way to enable some internal - // optimizations. Instead of forcing the user to pass in register data - // to write out and copy to the cache, the "user" is other demon code that - // knows what it's doing. So it grabs the cache memory (through a call to - // `demon_accel_read_regs`) modifies it in place and then calls this. - // So we just have to write the cache contents directly out to OS. - - // get accel data - DEMON_AccelThread *accel = demon_accel_from_thread(thread); - switch (thread->arch){ - case Architecture_x86: - { - demon_os_write_regs_x86(thread, &accel->regs.x86); - }break; - case Architecture_x64: - { - demon_os_write_regs_x64(thread, &accel->regs.x64); - }break; - } -} - - //- entity accel free internal void demon_accel_free(DEMON_Entity *entity){ switch (entity->kind){ + default:{}break; + case DEMON_EntityKind_Module: { if (entity->accel != 0){ diff --git a/src/demon/demon_accel.h b/src/demon/demon_accel.h index 863f028d..0b6f8288 100644 --- a/src/demon/demon_accel.h +++ b/src/demon/demon_accel.h @@ -58,8 +58,6 @@ internal U64 demon_accel_tls_root_vaddr_from_thread(DEMON_Entity *threa internal void* demon_accel_read_regs(DEMON_Entity *thread); internal void demon_accel_write_regs(DEMON_Entity *thread, void *data); -internal void demon_accel_low_level_write_regs(DEMON_Entity *thread); - //- entity accel free internal void demon_accel_free(DEMON_Entity *entity); diff --git a/src/demon/demon_common.c b/src/demon/demon_common.c index 15e7df8a..1ae895d0 100644 --- a/src/demon/demon_common.c +++ b/src/demon/demon_common.c @@ -134,6 +134,7 @@ demon_ent_new(DEMON_Entity *parent, DEMON_EntityKind kind, U64 id){ internal void demon_ent_release_single(DEMON_Entity *entity){ switch (entity->kind){ + default:{}break; case DEMON_EntityKind_Process: demon_proc_count -= 1; break; case DEMON_EntityKind_Thread: demon_thread_count -= 1; break; case DEMON_EntityKind_Module: demon_module_count -= 1; break; diff --git a/src/demon/win32/demon_os_win32.c b/src/demon/win32/demon_os_win32.c index 435d13ee..a27f816d 100644 --- a/src/demon/win32/demon_os_win32.c +++ b/src/demon/win32/demon_os_win32.c @@ -460,7 +460,9 @@ demon_os_run(Arena *arena, DEMON_OS_RunCtrls *ctrls){ // set single step bit if (single_step_thread != 0){ // TODO(allen): possibly buggy - switch (single_step_thread->arch){ + switch(single_step_thread->arch) + { + default:{NotImplemented;}break; case Architecture_x86: { REGS_RegBlockX86 regs = {0}; @@ -1287,7 +1289,9 @@ demon_os_run(Arena *arena, DEMON_OS_RunCtrls *ctrls){ // confound us later; so here we're just being sure it's taken out. if (single_step_thread != 0){ // TODO(allen): possibly buggy - switch (single_step_thread->arch){ + switch(single_step_thread->arch) + { + default:{NotImplemented;}break; case Architecture_x86: { REGS_RegBlockX86 regs = {0}; @@ -1585,34 +1589,37 @@ demon_os_full_path_from_module(Arena *arena, DEMON_Entity *module){ } internal U64 -demon_os_stack_base_vaddr_from_thread(DEMON_Entity *thread){ +demon_os_stack_base_vaddr_from_thread(DEMON_Entity *thread) +{ DEMON_Entity *process = thread->parent; DEMON_W32_Ext *thread_ext = demon_w32_ext(thread); U64 tlb = thread_ext->thread.thread_local_base; - U64 result = 0; - switch (thread->arch){ + switch (thread->arch) + { + default:{NotImplemented;}break; case Architecture_x64: { U64 stack_base_addr = tlb + 0x8; demon_os_read_memory(process, &result, stack_base_addr, 8); }break; - case Architecture_x86: { U64 stack_base_addr = tlb + 0x4; demon_os_read_memory(process, &result, stack_base_addr, 4); }break; } - return(result); } internal U64 -demon_os_tls_root_vaddr_from_thread(DEMON_Entity *thread){ +demon_os_tls_root_vaddr_from_thread(DEMON_Entity *thread) +{ DEMON_W32_Ext *thread_ext = demon_w32_ext(thread); U64 result = thread_ext->thread.thread_local_base; - switch (thread->arch){ + switch(thread->arch) + { + default:{NotImplemented;}break; case Architecture_x64: { result += 88; diff --git a/src/raddbgi_convert/pdb/raddbgi_msf.c b/src/msf/msf.c similarity index 99% rename from src/raddbgi_convert/pdb/raddbgi_msf.c rename to src/msf/msf.c index 39b01999..f228998e 100644 --- a/src/raddbgi_convert/pdb/raddbgi_msf.c +++ b/src/msf/msf.c @@ -4,7 +4,7 @@ //////////////////////////////// //~ MSF Parser Function -static MSF_Parsed* +internal MSF_Parsed* msf_parsed_from_data(Arena *arena, String8 msf_data){ ProfBegin("msf_parsed_from_data"); @@ -274,7 +274,7 @@ msf_parsed_from_data(Arena *arena, String8 msf_data){ return(result); } -static String8 +internal String8 msf_data_from_stream(MSF_Parsed *msf, MSF_StreamNumber sn){ String8 result = {0}; if (sn < msf->stream_count){ diff --git a/src/raddbgi_convert/pdb/raddbgi_msf.h b/src/msf/msf.h similarity index 84% rename from src/raddbgi_convert/pdb/raddbgi_msf.h rename to src/msf/msf.h index 4b55f4a6..7184e195 100644 --- a/src/raddbgi_convert/pdb/raddbgi_msf.h +++ b/src/msf/msf.h @@ -1,8 +1,8 @@ // Copyright (c) 2024 Epic Games Tools // Licensed under the MIT license (https://opensource.org/license/mit/) -#ifndef RADDBGI_MSF_H -#define RADDBGI_MSF_H +#ifndef MSF_H +#define MSF_H //////////////////////////////// //~ MSF Format Types @@ -54,7 +54,7 @@ typedef struct MSF_Parsed{ //////////////////////////////// //~ MSF Parser Function -static MSF_Parsed* msf_parsed_from_data(Arena *arena, String8 msf_data); -static String8 msf_data_from_stream(MSF_Parsed *msf, MSF_StreamNumber sn); +internal MSF_Parsed* msf_parsed_from_data(Arena *arena, String8 msf_data); +internal String8 msf_data_from_stream(MSF_Parsed *msf, MSF_StreamNumber sn); -#endif //RADDBGI_MSF_H +#endif // MSF_H diff --git a/src/mule/mule_main.cpp b/src/mule/mule_main.cpp index 87f6c7ef..bcb62a42 100644 --- a/src/mule/mule_main.cpp +++ b/src/mule/mule_main.cpp @@ -6,7 +6,7 @@ ** stepping, breakpoints, evaluation, cross-module calls. */ -#include "raddbg_markup/raddbg_markup.h" +#include "lib_raddbg_markup/raddbg_markup.h" //////////////////////////////// // NOTE(allen): System For DLL Testing diff --git a/src/raddbgi_convert/pdb/raddbgi_pdb.c b/src/pdb/pdb.c similarity index 98% rename from src/raddbgi_convert/pdb/raddbgi_pdb.c rename to src/pdb/pdb.c index cfe90e6a..f0f2eb2b 100644 --- a/src/raddbgi_convert/pdb/raddbgi_pdb.c +++ b/src/pdb/pdb.c @@ -4,7 +4,7 @@ //////////////////////////////// //~ PDB Parser Functions -static PDB_Info* +internal PDB_Info* pdb_info_from_data(Arena *arena, String8 data){ ProfBegin("pdb_info_from_data"); @@ -110,7 +110,7 @@ pdb_info_from_data(Arena *arena, String8 data){ return(result); } -static PDB_NamedStreamTable* +internal PDB_NamedStreamTable* pdb_named_stream_table_from_info(Arena *arena, PDB_Info *info){ ProfBegin("pdb_named_stream_table_from_info"); @@ -156,7 +156,7 @@ pdb_named_stream_table_from_info(Arena *arena, PDB_Info *info){ return(result); } -static PDB_Strtbl* +internal PDB_Strtbl* pdb_strtbl_from_data(Arena *arena, String8 data){ ProfBegin("pdb_strtbl_from_data"); @@ -200,7 +200,7 @@ pdb_strtbl_from_data(Arena *arena, String8 data){ return(result); } -static PDB_DbiParsed* +internal PDB_DbiParsed* pdb_dbi_from_data(Arena *arena, String8 data){ ProfBegin("pdb_dbi_from_data"); @@ -225,7 +225,7 @@ pdb_dbi_from_data(Arena *arena, String8 data){ // fill result result = push_array(arena, PDB_DbiParsed, 1); result->data = data; - result->arch = header->machine; + result->machine_type = header->machine; result->gsi_sn = header->gsi_sn; result->psi_sn = header->psi_sn; result->sym_sn = header->sym_sn; @@ -260,7 +260,7 @@ pdb_dbi_from_data(Arena *arena, String8 data){ return(result); } -static PDB_TpiParsed* +internal PDB_TpiParsed* pdb_tpi_from_data(Arena *arena, String8 data){ ProfBegin("pdb_tpi_from_data"); @@ -302,7 +302,7 @@ pdb_tpi_from_data(Arena *arena, String8 data){ return(result); } -static PDB_TpiHashParsed* +internal PDB_TpiHashParsed* pdb_tpi_hash_from_data(Arena *arena, PDB_Strtbl *strtbl, PDB_TpiParsed *tpi, String8 data, String8 aux_data){ ProfBegin("pdb_tpi_hash_from_data"); @@ -434,7 +434,7 @@ pdb_tpi_hash_from_data(Arena *arena, PDB_Strtbl *strtbl, PDB_TpiParsed *tpi, Str return(result); } -static PDB_GsiParsed* +internal PDB_GsiParsed* pdb_gsi_from_data(Arena *arena, String8 data){ ProfBegin("pdb_gsi_from_data"); @@ -563,7 +563,7 @@ pdb_gsi_from_data(Arena *arena, String8 data){ return(result); } -static PDB_CoffSectionArray* +internal PDB_CoffSectionArray* pdb_coff_section_array_from_data(Arena *arena, String8 data){ U64 count = data.size/sizeof(COFF_SectionHeader); @@ -573,7 +573,7 @@ pdb_coff_section_array_from_data(Arena *arena, String8 data){ return(result); } -static PDB_CompUnitArray* +internal PDB_CompUnitArray* pdb_comp_unit_array_from_data(Arena *arena, String8 data){ PDB_CompUnitNode *first = 0; PDB_CompUnitNode *last = 0; @@ -649,7 +649,7 @@ pdb_comp_unit_array_from_data(Arena *arena, String8 data){ return(result); } -static PDB_CompUnitContributionArray* +internal PDB_CompUnitContributionArray* pdb_comp_unit_contribution_array_from_data(Arena *arena, String8 data, PDB_CoffSectionArray *sections){ PDB_CompUnitContribution *contributions = 0; @@ -715,7 +715,7 @@ pdb_comp_unit_contribution_array_from_data(Arena *arena, String8 data, //////////////////////////////// //~ PDB Definition Functions -static U32 +internal U32 pdb_string_hash1(String8 string){ U32 result = 0; U8 *ptr = string.str; @@ -733,7 +733,7 @@ pdb_string_hash1(String8 string){ //////////////////////////////// //~ PDB Dbi Functions -static String8 +internal String8 pdb_data_from_dbi_range(PDB_DbiParsed *dbi, PDB_DbiRange range){ String8 result = {0}; if (range < PDB_DbiRange_COUNT){ @@ -745,7 +745,7 @@ pdb_data_from_dbi_range(PDB_DbiParsed *dbi, PDB_DbiRange range){ return(result); } -static String8 +internal String8 pdb_data_from_unit_range(MSF_Parsed *msf, PDB_CompUnit *unit, PDB_DbiCompUnitRange range){ String8 result = {0}; if (range < PDB_DbiCompUnitRange_COUNT){ @@ -765,7 +765,7 @@ pdb_data_from_unit_range(MSF_Parsed *msf, PDB_CompUnit *unit, PDB_DbiCompUnitRan //////////////////////////////// //~ PDB Tpi Functions -static String8 +internal String8 pdb_leaf_data_from_tpi(PDB_TpiParsed *tpi){ String8 data = tpi->data; U8 *first = data.str + tpi->leaf_first; @@ -774,7 +774,7 @@ pdb_leaf_data_from_tpi(PDB_TpiParsed *tpi){ return(result); } -static CV_TypeIdArray +internal CV_TypeIdArray pdb_tpi_itypes_from_name(Arena *arena, PDB_TpiHashParsed *tpi_hash, CV_LeafParsed *leaf, String8 name, B32 compare_unique_name, U32 output_cap){ U32 hash = pdb_string_hash1(name); @@ -965,7 +965,7 @@ pdb_tpi_itypes_from_name(Arena *arena, PDB_TpiHashParsed *tpi_hash, CV_LeafParse return(result); } -static CV_TypeId +internal CV_TypeId pdb_tpi_first_itype_from_name(PDB_TpiHashParsed *tpi_hash, CV_LeafParsed *tpi_leaf, String8 name, B32 compare_unique_name){ Temp scratch = scratch_begin(0, 0); @@ -983,7 +983,7 @@ pdb_tpi_first_itype_from_name(PDB_TpiHashParsed *tpi_hash, CV_LeafParsed *tpi_le //////////////////////////////// //~ PDB Strtbl Functions -static String8 +internal String8 pdb_strtbl_string_from_off(PDB_Strtbl *strtbl, U32 off){ U32 strblock_max = strtbl->strblock_max; U32 full_off_raw = strtbl->strblock_min + off; @@ -993,7 +993,7 @@ pdb_strtbl_string_from_off(PDB_Strtbl *strtbl, U32 off){ return(result); } -static String8 +internal String8 pdb_strtbl_string_from_index(PDB_Strtbl *strtbl, PDB_StringIndex idx){ String8 result = {0}; if (idx < strtbl->bucket_count){ diff --git a/src/raddbgi_convert/pdb/raddbgi_pdb.h b/src/pdb/pdb.h similarity index 76% rename from src/raddbgi_convert/pdb/raddbgi_pdb.h rename to src/pdb/pdb.h index 0a8e8d16..e86f6851 100644 --- a/src/raddbgi_convert/pdb/raddbgi_pdb.h +++ b/src/pdb/pdb.h @@ -1,8 +1,8 @@ // Copyright (c) 2024 Epic Games Tools // Licensed under the MIT license (https://opensource.org/license/mit/) -#ifndef RADDBGI_PDB_H -#define RADDBGI_PDB_H +#ifndef PDB_H +#define PDB_H // https://github.com/microsoft/microsoft-pdb/tree/master/PDB @@ -127,7 +127,7 @@ typedef struct PDB_DbiHeader{ U32 ec_info_size; PDB_DbiHeaderFlags flags; - COFF_Arch machine; + COFF_MachineType machine; U32 reserved; } PDB_DbiHeader; @@ -307,7 +307,7 @@ typedef struct PDB_Strtbl{ typedef struct PDB_DbiParsed{ String8 data; - COFF_Arch arch; + COFF_MachineType machine_type; MSF_StreamNumber gsi_sn; MSF_StreamNumber psi_sn; MSF_StreamNumber sym_sn; @@ -400,63 +400,63 @@ typedef struct PDB_CompUnitContributionArray{ //////////////////////////////// //~ PDB Parser Functions -static PDB_Info* pdb_info_from_data(Arena *arena, String8 pdb_info_data); -static PDB_NamedStreamTable*pdb_named_stream_table_from_info(Arena *arena, PDB_Info *info); -static PDB_Strtbl* pdb_strtbl_from_data(Arena *arena, String8 strtbl_data); +internal PDB_Info* pdb_info_from_data(Arena *arena, String8 pdb_info_data); +internal PDB_NamedStreamTable*pdb_named_stream_table_from_info(Arena *arena, PDB_Info *info); +internal PDB_Strtbl* pdb_strtbl_from_data(Arena *arena, String8 strtbl_data); -static PDB_DbiParsed* pdb_dbi_from_data(Arena *arena, String8 dbi_data); -static PDB_TpiParsed* pdb_tpi_from_data(Arena *arena, String8 tpi_data); -static PDB_TpiHashParsed* pdb_tpi_hash_from_data(Arena *arena, - PDB_Strtbl *strtbl, - PDB_TpiParsed *tpi, - String8 tpi_hash_data, - String8 tpi_hash_aux_data); -static PDB_GsiParsed* pdb_gsi_from_data(Arena *arena, String8 gsi_data); +internal PDB_DbiParsed* pdb_dbi_from_data(Arena *arena, String8 dbi_data); +internal PDB_TpiParsed* pdb_tpi_from_data(Arena *arena, String8 tpi_data); +internal PDB_TpiHashParsed* pdb_tpi_hash_from_data(Arena *arena, + PDB_Strtbl *strtbl, + PDB_TpiParsed *tpi, + String8 tpi_hash_data, + String8 tpi_hash_aux_data); +internal PDB_GsiParsed* pdb_gsi_from_data(Arena *arena, String8 gsi_data); -static PDB_CoffSectionArray*pdb_coff_section_array_from_data(Arena *arena, - String8 section_data); +internal PDB_CoffSectionArray*pdb_coff_section_array_from_data(Arena *arena, + String8 section_data); -static PDB_CompUnitArray* pdb_comp_unit_array_from_data(Arena *arena, - String8 module_info_data); +internal PDB_CompUnitArray* pdb_comp_unit_array_from_data(Arena *arena, + String8 module_info_data); -static PDB_CompUnitContributionArray* +internal PDB_CompUnitContributionArray* pdb_comp_unit_contribution_array_from_data(Arena *arena, String8 seccontrib_data, PDB_CoffSectionArray *sections); //////////////////////////////// //~ PDB Definition Functions -static U32 pdb_string_hash1(String8 string); +internal U32 pdb_string_hash1(String8 string); //////////////////////////////// //~ PDB Dbi Functions -static String8 pdb_data_from_dbi_range(PDB_DbiParsed *dbi, PDB_DbiRange range); -static String8 pdb_data_from_unit_range(MSF_Parsed *msf, PDB_CompUnit *unit, - PDB_DbiCompUnitRange range); +internal String8 pdb_data_from_dbi_range(PDB_DbiParsed *dbi, PDB_DbiRange range); +internal String8 pdb_data_from_unit_range(MSF_Parsed *msf, PDB_CompUnit *unit, + PDB_DbiCompUnitRange range); //////////////////////////////// //~ PDB Tpi Functions -static String8 pdb_leaf_data_from_tpi(PDB_TpiParsed *tpi); +internal String8 pdb_leaf_data_from_tpi(PDB_TpiParsed *tpi); -static CV_TypeIdArray pdb_tpi_itypes_from_name(Arena *arena, - PDB_TpiHashParsed *tpi_hash, - CV_LeafParsed *tpi_leaf, - String8 name, - B32 compare_unique_name, - U32 output_cap); +internal CV_TypeIdArray pdb_tpi_itypes_from_name(Arena *arena, + PDB_TpiHashParsed *tpi_hash, + CV_LeafParsed *tpi_leaf, + String8 name, + B32 compare_unique_name, + U32 output_cap); -static CV_TypeId pdb_tpi_first_itype_from_name(PDB_TpiHashParsed *tpi_hash, - CV_LeafParsed *tpi_leaf, - String8 name, - B32 compare_unique_name); +internal CV_TypeId pdb_tpi_first_itype_from_name(PDB_TpiHashParsed *tpi_hash, + CV_LeafParsed *tpi_leaf, + String8 name, + B32 compare_unique_name); //////////////////////////////// //~ PDB Strtbl Functions -static String8 pdb_strtbl_string_from_off(PDB_Strtbl *strtbl, U32 off); -static String8 pdb_strtbl_string_from_index(PDB_Strtbl *strtbl, - PDB_StringIndex idx); +internal String8 pdb_strtbl_string_from_off(PDB_Strtbl *strtbl, U32 off); +internal String8 pdb_strtbl_string_from_index(PDB_Strtbl *strtbl, + PDB_StringIndex idx); -#endif //RADDBGI_PDB_H +#endif // PDB_H diff --git a/src/raddbgi_convert/pdb/raddbgi_pdb_stringize.c b/src/pdb/pdb_stringize.c similarity index 98% rename from src/raddbgi_convert/pdb/raddbgi_pdb_stringize.c rename to src/pdb/pdb_stringize.c index a1726d28..7cd3f7e2 100644 --- a/src/raddbgi_convert/pdb/raddbgi_pdb_stringize.c +++ b/src/pdb/pdb_stringize.c @@ -4,7 +4,7 @@ //////////////////////////////// //~ PDB Stringize Functions -static void +internal void pdb_stringize_tpi_hash(Arena *arena, String8List *out, PDB_TpiHashParsed *hash){ U32 bucket_count = hash->bucket_count; str8_list_pushf(arena, out, "bucket_count=%u\n\n", bucket_count); diff --git a/src/pdb/pdb_stringize.h b/src/pdb/pdb_stringize.h new file mode 100644 index 00000000..db0ca656 --- /dev/null +++ b/src/pdb/pdb_stringize.h @@ -0,0 +1,12 @@ +// Copyright (c) 2024 Epic Games Tools +// Licensed under the MIT license (https://opensource.org/license/mit/) + +#ifndef PDB_STRINGIZE_H +#define PDB_STRINGIZE_H + +//////////////////////////////// +//~ PDB Stringize Functions + +internal void pdb_stringize_tpi_hash(Arena *arena, String8List *out, PDB_TpiHashParsed *hash); + +#endif // PDB_STRINGIZE_H diff --git a/src/raddbg/raddbg_main.cpp b/src/raddbg/raddbg_main.cpp index 681c22c5..479a6de7 100644 --- a/src/raddbg/raddbg_main.cpp +++ b/src/raddbg/raddbg_main.cpp @@ -4,11 +4,16 @@ //////////////////////////////// //~ rjf: Includes -//- rjf: [h] +//- rjf: [lib] #include "lib_raddbgi_format/raddbgi_format.h" #include "lib_raddbgi_format/raddbgi_format_parse.h" +#include "lib_raddbgi_format/raddbgi_format.c" +#include "lib_raddbgi_format/raddbgi_format_parse.c" + +//- rjf: [h] #include "base/base_inc.h" #include "os/os_inc.h" +#include "raddbgi_cons_local/raddbgi_cons_local.h" #include "mdesk/mdesk.h" #include "hash_store/hash_store.h" #include "file_stream/file_stream.h" @@ -17,16 +22,14 @@ #include "txti/txti.h" #include "coff/coff.h" #include "pe/pe.h" -#include "raddbgi_cons_local/raddbgi_cons_local.h" -#include "raddbgi_convert/pdb/raddbgi_coff.h" -#include "raddbgi_convert/pdb/raddbgi_codeview.h" -#include "raddbgi_convert/pdb/raddbgi_msf.h" -#include "raddbgi_convert/pdb/raddbgi_pdb.h" +#include "codeview/codeview.h" +#include "codeview/codeview_stringize.h" +#include "msf/msf.h" +#include "pdb/pdb.h" +#include "pdb/pdb_stringize.h" #include "raddbgi_convert/pdb/raddbgi_coff_conversion.h" #include "raddbgi_convert/pdb/raddbgi_codeview_conversion.h" #include "raddbgi_convert/pdb/raddbgi_from_pdb.h" -#include "raddbgi_convert/pdb/raddbgi_codeview_stringize.h" -#include "raddbgi_convert/pdb/raddbgi_pdb_stringize.h" #include "regs/regs.h" #include "regs/raddbgi/regs_raddbgi.h" #include "type_graph/type_graph.h" @@ -47,10 +50,9 @@ #include "raddbg.h" //- rjf: [c] -#include "lib_raddbgi_format/raddbgi_format.c" -#include "lib_raddbgi_format/raddbgi_format_parse.c" #include "base/base_inc.c" #include "os/os_inc.c" +#include "raddbgi_cons_local/raddbgi_cons_local.c" #include "mdesk/mdesk.c" #include "hash_store/hash_store.c" #include "file_stream/file_stream.c" @@ -59,14 +61,13 @@ #include "txti/txti.c" #include "coff/coff.c" #include "pe/pe.c" -#include "raddbgi_cons_local/raddbgi_cons_local.c" -#include "raddbgi_convert/pdb/raddbgi_msf.c" -#include "raddbgi_convert/pdb/raddbgi_codeview.c" -#include "raddbgi_convert/pdb/raddbgi_pdb.c" +#include "codeview/codeview.c" +#include "codeview/codeview_stringize.c" +#include "msf/msf.c" +#include "pdb/pdb.c" +#include "pdb/pdb_stringize.c" #include "raddbgi_convert/pdb/raddbgi_coff_conversion.c" #include "raddbgi_convert/pdb/raddbgi_codeview_conversion.c" -#include "raddbgi_convert/pdb/raddbgi_codeview_stringize.c" -#include "raddbgi_convert/pdb/raddbgi_pdb_stringize.c" #include "raddbgi_convert/pdb/raddbgi_from_pdb.c" #include "regs/regs.c" #include "regs/raddbgi/regs_raddbgi.c" diff --git a/src/raddbgi_convert/dwarf/raddbgi_from_dwarf.c b/src/raddbgi_convert/dwarf/raddbgi_from_dwarf.c index 83b73fb5..ca54b69c 100644 --- a/src/raddbgi_convert/dwarf/raddbgi_from_dwarf.c +++ b/src/raddbgi_convert/dwarf/raddbgi_from_dwarf.c @@ -1,10 +1,10 @@ // Copyright (c) 2024 Epic Games Tools // Licensed under the MIT license (https://opensource.org/license/mit/) +#include "lib_raddbgi_format/raddbgi_format.h" #include "base/base_inc.h" #include "os/os_inc.h" -#include "raddbgi_format/raddbgi_format.h" -#include "raddbgi_cons/raddbgi_cons_local.h" +#include "raddbgi_cons_local/raddbgi_cons_local.h" #include "raddbgi_elf.h" #include "raddbgi_dwarf.h" @@ -13,10 +13,10 @@ #include "raddbgi_from_dwarf.h" +#include "lib_raddbgi_format/raddbgi_format.c" #include "base/base_inc.c" #include "os/os_inc.c" -#include "raddbgi_format/raddbgi_format.c" -#include "raddbgi_cons/raddbgi_cons_local.c" +#include "raddbgi_cons_local/raddbgi_cons_local.c" #include "raddbgi_elf.c" #include "raddbgi_dwarf.c" diff --git a/src/raddbgi_convert/pdb/raddbgi_codeview_stringize.h b/src/raddbgi_convert/pdb/raddbgi_codeview_stringize.h deleted file mode 100644 index c7d04840..00000000 --- a/src/raddbgi_convert/pdb/raddbgi_codeview_stringize.h +++ /dev/null @@ -1,86 +0,0 @@ -// Copyright (c) 2024 Epic Games Tools -// Licensed under the MIT license (https://opensource.org/license/mit/) - -#ifndef RADDBGI_CODEVIEW_STRINGIZE_H -#define RADDBGI_CODEVIEW_STRINGIZE_H - -//////////////////////////////// -//~ CodeView Stringize Helper Types - -typedef struct CV_StringizeSymParams{ - CV_Arch arch; -} CV_StringizeSymParams; - -typedef struct CV_StringizeLeafParams{ - U32 dummy; -} CV_StringizeLeafParams; - -//////////////////////////////// -//~ CodeView Common Stringize Functions - -static void cv_stringize_numeric(Arena *arena, String8List *out, CV_NumericParsed *num); - -static void cv_stringize_lvar_addr_range(Arena *arena, String8List *out, - CV_LvarAddrRange *range); -static void cv_stringize_lvar_addr_gap(Arena *arena, String8List *out, CV_LvarAddrGap *gap); -static void cv_stringize_lvar_addr_gap_list(Arena *arena, String8List *out, - void *first, void *opl); - -static String8 cv_string_from_sym_kind(CV_SymKind kind); -static String8 cv_string_from_basic_type(CV_BasicType basic_type); -static String8 cv_string_from_leaf_kind(CV_LeafKind kind); -static String8 cv_string_from_numeric_kind(CV_NumericKind kind); -static String8 cv_string_from_c13_sub_section_kind(CV_C13_SubSectionKind kind); -static String8 cv_string_from_machine(CV_Arch arch); -static String8 cv_string_from_reg(CV_Arch arch, CV_Reg reg); -static String8 cv_string_from_pointer_kind(CV_PointerKind ptr_kind); -static String8 cv_string_from_pointer_mode(CV_PointerMode ptr_mode); -static String8 cv_string_from_hfa_kind(CV_HFAKind hfa_kind); -static String8 cv_string_from_mo_com_udt_kind(CV_MoComUDTKind mo_com_udt_kind); - -//////////////////////////////// -//~ CodeView Flags Stringize Functions - -static void cv_stringize_modifier_flags(Arena *arena, String8List *out, - U32 indent, CV_ModifierFlags flags); - -static void cv_stringize_type_props(Arena *arena, String8List *out, - U32 indent, CV_TypeProps props); - -static void cv_stringize_pointer_attribs(Arena *arena, String8List *out, - U32 indent, CV_PointerAttribs attribs); - -static void cv_stringize_local_flags(Arena *arena, String8List *out, - U32 indent, CV_LocalFlags flags); - -//////////////////////////////// -//~ CodeView Sym Stringize Functions - -static void cv_stringize_sym_parsed(Arena *arena, String8List *out, CV_SymParsed *sym); - -static void cv_stringize_sym_range(Arena *arena, String8List *out, - CV_RecRange *range, String8 data, - CV_StringizeSymParams *p); -static void cv_stringize_sym_array(Arena *arena, String8List *out, - CV_RecRangeArray *ranges, String8 data, - CV_StringizeSymParams *p); - -//////////////////////////////// -//~ CodeView Leaf Stringize Functions - -static void cv_stringize_leaf_parsed(Arena *arena, String8List *out, CV_LeafParsed *leaf); - -static void cv_stringize_leaf_range(Arena *arena, String8List *out, - CV_RecRange *range, CV_TypeId itype, String8 data, - CV_StringizeLeafParams *p); -static void cv_stringize_leaf_array(Arena *arena, String8List *out, - CV_RecRangeArray *ranges, CV_TypeId itype_first, - String8 data, - CV_StringizeLeafParams *p); - -//////////////////////////////// -//~ CodeView C13 Stringize Functions - -static void cv_stringize_c13_parsed(Arena *arena, String8List *out, CV_C13Parsed *c13); - -#endif //RADDBGI_CODEVIEW_STRINGIZE_H diff --git a/src/raddbgi_convert/pdb/raddbgi_coff.h b/src/raddbgi_convert/pdb/raddbgi_coff.h deleted file mode 100644 index ae04b185..00000000 --- a/src/raddbgi_convert/pdb/raddbgi_coff.h +++ /dev/null @@ -1,52 +0,0 @@ -// Copyright (c) 2024 Epic Games Tools -// Licensed under the MIT license (https://opensource.org/license/mit/) - -#ifndef RADDBGI_COFF_H -#define RADDBGI_COFF_H - -//////////////////////////////// -//~ COFF Format Types - -typedef struct COFF_Guid{ - U32 data1; - U16 data2; - U16 data3; - U32 data4; - U32 data5; -} COFF_Guid; - -#define COFF_ArchXList(X)\ -X(UNKNOWN, 0x0)\ -X(X86, 0x14c)\ -X(X64, 0x8664)\ -X(ARM33, 0x1d3)\ -X(ARM, 0x1c0)\ -X(ARM64, 0xaa64)\ -X(ARMNT, 0x1c4)\ -X(EBC, 0xebc)\ -X(IA64, 0x200)\ -X(M32R, 0x9041)\ -X(MIPS16, 0x266)\ -X(MIPSFPU, 0x366)\ -X(MIPSFPU16, 0x466)\ -X(POWERPC, 0x1f0)\ -X(POWERPCFP, 0x1f1)\ -X(R4000, 0x166)\ -X(RISCV32, 0x5032)\ -X(RISCV64, 0x5064)\ -X(RISCV128, 0x5128)\ -X(SH3, 0x1a2)\ -X(SH3DSP, 0x1a3)\ -X(SH4, 0x1a6)\ -X(SH5, 0x1a8)\ -X(THUMB, 0x1c2)\ -X(WCEMIPSV2, 0x169) - -typedef U16 COFF_Arch; -enum{ -#define X(N,c) COFF_Arch_##N = c, - COFF_ArchXList(X) -#undef X -}; - -#endif //COFF_H diff --git a/src/raddbgi_convert/pdb/raddbgi_coff_conversion.h b/src/raddbgi_convert/pdb/raddbgi_coff_conversion.h index 2cd7aad9..375d6a46 100644 --- a/src/raddbgi_convert/pdb/raddbgi_coff_conversion.h +++ b/src/raddbgi_convert/pdb/raddbgi_coff_conversion.h @@ -7,7 +7,6 @@ //////////////////////////////// //~ COFF Conversion Functions -static RADDBGI_BinarySectionFlags -raddbgi_binary_section_flags_from_coff_section_flags(COFF_SectionFlags flags); +static RADDBGI_BinarySectionFlags raddbgi_binary_section_flags_from_coff_section_flags(COFF_SectionFlags flags); #endif //RADDBGI_COFF_CONVERSION_H diff --git a/src/raddbgi_convert/pdb/raddbgi_from_pdb_main.c b/src/raddbgi_convert/pdb/raddbgi_from_pdb_main.c index e0a3db0c..dbe2cbe1 100644 --- a/src/raddbgi_convert/pdb/raddbgi_from_pdb_main.c +++ b/src/raddbgi_convert/pdb/raddbgi_from_pdb_main.c @@ -2,38 +2,34 @@ // Licensed under the MIT license (https://opensource.org/license/mit/) #include "lib_raddbgi_format/raddbgi_format.h" +#include "lib_raddbgi_format/raddbgi_format.c" + #include "base/base_inc.h" #include "os/os_inc.h" #include "coff/coff.h" +#include "codeview/codeview.h" +#include "codeview/codeview_stringize.h" +#include "msf/msf.h" +#include "pdb/pdb.h" +#include "pdb/pdb_stringize.h" #include "raddbgi_cons_local/raddbgi_cons_local.h" - -#include "raddbgi_coff.h" -#include "raddbgi_codeview.h" -#include "raddbgi_msf.h" -#include "raddbgi_pdb.h" #include "raddbgi_coff_conversion.h" #include "raddbgi_codeview_conversion.h" -#include "raddbgi_codeview_stringize.h" -#include "raddbgi_pdb_stringize.h" - #include "raddbgi_from_pdb.h" -#include "lib_raddbgi_format/raddbgi_format.c" #include "base/base_inc.c" -#include "coff/coff.c" #include "os/os_inc.c" +#include "coff/coff.c" +#include "codeview/codeview.c" +#include "codeview/codeview_stringize.c" +#include "msf/msf.c" +#include "pdb/pdb.c" +#include "pdb/pdb_stringize.c" #include "raddbgi_cons_local/raddbgi_cons_local.c" - -#include "raddbgi_msf.c" -#include "raddbgi_codeview.c" -#include "raddbgi_pdb.c" #include "raddbgi_coff_conversion.c" #include "raddbgi_codeview_conversion.c" -#include "raddbgi_codeview_stringize.c" -#include "raddbgi_pdb_stringize.c" - #include "raddbgi_from_pdb.c" int diff --git a/src/raddbgi_convert/pdb/raddbgi_pdb_stringize.h b/src/raddbgi_convert/pdb/raddbgi_pdb_stringize.h deleted file mode 100644 index 9225735b..00000000 --- a/src/raddbgi_convert/pdb/raddbgi_pdb_stringize.h +++ /dev/null @@ -1,12 +0,0 @@ -// Copyright (c) 2024 Epic Games Tools -// Licensed under the MIT license (https://opensource.org/license/mit/) - -#ifndef RADDBGI_PDB_STRINGIZE_H -#define RADDBGI_PDB_STRINGIZE_H - -//////////////////////////////// -//~ PDB Stringize Functions - -static void pdb_stringize_tpi_hash(Arena *arena, String8List *out, PDB_TpiHashParsed *hash); - -#endif //RADDBGI_PDB_STRINGIZE_H diff --git a/src/raddbgi_dump/raddbgi_dump.c b/src/raddbgi_dump/raddbgi_dump.c index 66687e94..cb878ede 100644 --- a/src/raddbgi_dump/raddbgi_dump.c +++ b/src/raddbgi_dump/raddbgi_dump.c @@ -1,19 +1,21 @@ // Copyright (c) 2024 Epic Games Tools // Licensed under the MIT license (https://opensource.org/license/mit/) +#include "lib_raddbgi_format/raddbgi_format.h" +#include "lib_raddbgi_format/raddbgi_format_parse.h" +#include "lib_raddbgi_format/raddbgi_format.c" +#include "lib_raddbgi_format/raddbgi_format_parse.c" + #include "base/base_inc.h" #include "os/os_inc.h" -#include "raddbgi_format/raddbgi_format.h" -#include "raddbgi_format/raddbgi_format_parse.h" -#include "raddbgi_stringize/raddbgi_stringize.h" +#include "raddbgi_stringize.h" #include "raddbgi_dump.h" #include "base/base_inc.c" #include "os/os_inc.c" -#include "raddbgi_format/raddbgi_format.c" -#include "raddbgi_format/raddbgi_format_parse.c" -#include "raddbgi_stringize/raddbgi_stringize.c" + +#include "raddbgi_stringize.c" //////////////////////////////// //~ Program Parameters Parser diff --git a/src/scratch/ryan_scratch.c b/src/scratch/ryan_scratch.c index 9bfeb01f..7a1d7af8 100644 --- a/src/scratch/ryan_scratch.c +++ b/src/scratch/ryan_scratch.c @@ -1,12 +1,12 @@ // Copyright (c) 2024 Epic Games Tools // Licensed under the MIT license (https://opensource.org/license/mit/) -#include "raddbgi_format/raddbgi_format.h" -#include "raddbgi_format/raddbgi_format.c" -#include "raddbgi_format/raddbgi_format_parse.h" -#include "raddbgi_format/raddbgi_format_parse.c" -#include "raddbgi_cons/raddbgi_cons.h" -#include "raddbgi_cons/raddbgi_cons.c" +#include "lib_raddbgi_format/raddbgi_format.h" +#include "lib_raddbgi_format/raddbgi_format.c" +#include "lib_raddbgi_format/raddbgi_format_parse.h" +#include "lib_raddbgi_format/raddbgi_format_parse.c" +#include "lib_raddbgi_cons/raddbgi_cons.h" +#include "lib_raddbgi_cons/raddbgi_cons.c" int main(int argument_count, char **arguments) {