mirror of
https://github.com/Ed94/raddebugger.git
synced 2026-06-13 07:32:23 -07:00
float codeview, msf, pdb layers up as regular codebase layers, and out of converter-specific code; clangify some builds
This commit is contained in:
@@ -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
|
||||
+27
-27
@@ -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;
|
||||
@@ -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
|
||||
@@ -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
@@ -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){
|
||||
|
||||
@@ -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);
|
||||
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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
|
||||
@@ -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);
|
||||
@@ -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
@@ -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
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
@@ -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
|
||||
|
||||
@@ -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)
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user