float codeview, msf, pdb layers up as regular codebase layers, and out of converter-specific code; clangify some builds

This commit is contained in:
Ryan Fleury
2024-02-13 09:51:50 -08:00
parent 017116aee9
commit 7defce94c7
25 changed files with 359 additions and 428 deletions
@@ -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
@@ -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
@@ -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, &params);
}
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, &params);
}
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;
+86
View File
@@ -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
+10
View File
@@ -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
{
+7 -40
View File
@@ -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){
-2
View File
@@ -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);
+1
View File
@@ -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;
+16 -9
View File
@@ -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;
@@ -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){
@@ -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
+1 -1
View File
@@ -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
@@ -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){
@@ -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
@@ -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);
+12
View File
@@ -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
+17 -16
View File
@@ -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"
@@ -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"
@@ -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
-52
View File
@@ -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
@@ -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
+13 -17
View File
@@ -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
@@ -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
+8 -6
View File
@@ -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
+6 -6
View File
@@ -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)
{