mirror of
https://github.com/Ed94/raddebugger.git
synced 2026-08-05 05:18:40 +00:00
.debug_info dumping pass
This commit is contained in:
@@ -1,80 +0,0 @@
|
||||
// Copyright (c) Epic Games Tools
|
||||
// Licensed under the MIT license (https://opensource.org/license/mit/)
|
||||
|
||||
internal RDI_Arch
|
||||
c2r_rdi_arch_from_coff_machine(COFF_MachineType machine)
|
||||
{
|
||||
switch (machine) {
|
||||
case COFF_MachineType_X86: return RDI_Arch_X86;
|
||||
case COFF_MachineType_X64: return RDI_Arch_X64;
|
||||
|
||||
case COFF_MachineType_Unknown:
|
||||
case COFF_MachineType_Am33:
|
||||
case COFF_MachineType_Arm:
|
||||
case COFF_MachineType_Arm64:
|
||||
case COFF_MachineType_ArmNt:
|
||||
case COFF_MachineType_Ebc:
|
||||
case COFF_MachineType_Ia64:
|
||||
case COFF_MachineType_M32R:
|
||||
case COFF_MachineType_Mips16:
|
||||
case COFF_MachineType_MipsFpu:
|
||||
case COFF_MachineType_MipsFpu16:
|
||||
case COFF_MachineType_PowerPc:
|
||||
case COFF_MachineType_PowerPcFp:
|
||||
case COFF_MachineType_R4000:
|
||||
case COFF_MachineType_RiscV32:
|
||||
case COFF_MachineType_RiscV64:
|
||||
case COFF_MachineType_Sh3:
|
||||
case COFF_MachineType_Sh3Dsp:
|
||||
case COFF_MachineType_Sh4:
|
||||
case COFF_MachineType_Sh5:
|
||||
case COFF_MachineType_Thumb:
|
||||
case COFF_MachineType_WceMipsV2:
|
||||
NotImplemented;
|
||||
default:
|
||||
return RDI_Arch_NULL;
|
||||
}
|
||||
}
|
||||
|
||||
internal RDI_BinarySectionFlags
|
||||
c2r_rdi_binary_section_flags_from_coff_section_flags(COFF_SectionFlags flags)
|
||||
{
|
||||
RDI_BinarySectionFlags result = 0;
|
||||
if(flags & COFF_SectionFlag_MemRead)
|
||||
{
|
||||
result |= RDI_BinarySectionFlag_Read;
|
||||
}
|
||||
if(flags & COFF_SectionFlag_MemWrite)
|
||||
{
|
||||
result |= RDI_BinarySectionFlag_Write;
|
||||
}
|
||||
if(flags & COFF_SectionFlag_MemExecute)
|
||||
{
|
||||
result |= RDI_BinarySectionFlag_Execute;
|
||||
}
|
||||
return(result);
|
||||
}
|
||||
|
||||
internal RDIM_BinarySectionList
|
||||
c2r_rdi_binary_sections_from_coff_sections(Arena *arena, String8 image_data, String8 string_table, U64 sectab_count, COFF_SectionHeader *sectab)
|
||||
{
|
||||
ProfBeginFunction();
|
||||
|
||||
RDIM_BinarySectionList binary_sections = {0};
|
||||
|
||||
for (U64 isec = 0; isec < sectab_count; ++isec) {
|
||||
COFF_SectionHeader *coff_sec = §ab[isec];
|
||||
RDIM_BinarySection *sec = rdim_binary_section_list_push(arena, &binary_sections);
|
||||
|
||||
sec->name = coff_name_from_section_header(string_table, coff_sec);
|
||||
sec->flags = c2r_rdi_binary_section_flags_from_coff_section_flags(coff_sec->flags);
|
||||
sec->voff_first = coff_sec->voff;
|
||||
sec->voff_opl = coff_sec->voff + coff_sec->vsize;
|
||||
sec->foff_first = coff_sec->foff;
|
||||
sec->foff_opl = coff_sec->foff + coff_sec->fsize;
|
||||
}
|
||||
|
||||
ProfEnd();
|
||||
return binary_sections;
|
||||
}
|
||||
|
||||
@@ -1,12 +0,0 @@
|
||||
// Copyright (c) Epic Games Tools
|
||||
// Licensed under the MIT license (https://opensource.org/license/mit/)
|
||||
|
||||
#ifndef RADCON_COFF_H
|
||||
#define RADCON_COFF_H
|
||||
|
||||
internal RDI_Arch c2r_rdi_arch_from_coff_machine(COFF_MachineType machine);
|
||||
internal RDI_BinarySectionFlags c2r_rdi_binary_section_flags_from_coff_section_flags(COFF_SectionFlags flags);
|
||||
internal RDIM_BinarySectionList c2r_rdi_binary_sections_from_coff_sections(Arena *arena, String8 image_data, String8 string_table, U64 sectab_count, COFF_SectionHeader *sectab);
|
||||
|
||||
#endif // RADCON_COFF_H
|
||||
|
||||
@@ -1,252 +0,0 @@
|
||||
////////////////////////////////
|
||||
//~ rjf: CodeView <-> RDI Canonical Conversions
|
||||
|
||||
internal RDI_Arch
|
||||
cv2r_rdi_arch_from_cv_arch(CV_Arch cv_arch)
|
||||
{
|
||||
RDI_Arch result = 0;
|
||||
switch(cv_arch)
|
||||
{
|
||||
case CV_Arch_8086: result = RDI_Arch_X86; break;
|
||||
case CV_Arch_X64: result = RDI_Arch_X64; break;
|
||||
//case CV_Arch_8080: break;
|
||||
//case CV_Arch_80286: break;
|
||||
//case CV_Arch_80386: break;
|
||||
//case CV_Arch_80486: break;
|
||||
//case CV_Arch_PENTIUM: break;
|
||||
//case CV_Arch_PENTIUMII: break;
|
||||
//case CV_Arch_PENTIUMIII: break;
|
||||
//case CV_Arch_MIPS: break;
|
||||
//case CV_Arch_MIPS16: break;
|
||||
//case CV_Arch_MIPS32: break;
|
||||
//case CV_Arch_MIPS64: break;
|
||||
//case CV_Arch_MIPSI: break;
|
||||
//case CV_Arch_MIPSII: break;
|
||||
//case CV_Arch_MIPSIII: break;
|
||||
//case CV_Arch_MIPSIV: break;
|
||||
//case CV_Arch_MIPSV: break;
|
||||
//case CV_Arch_M68000: break;
|
||||
//case CV_Arch_M68010: break;
|
||||
//case CV_Arch_M68020: break;
|
||||
//case CV_Arch_M68030: break;
|
||||
//case CV_Arch_M68040: break;
|
||||
//case CV_Arch_ALPHA: break;
|
||||
//case CV_Arch_ALPHA_21164: break;
|
||||
//case CV_Arch_ALPHA_21164A: break;
|
||||
//case CV_Arch_ALPHA_21264: break;
|
||||
//case CV_Arch_ALPHA_21364: break;
|
||||
//case CV_Arch_PPC601: break;
|
||||
//case CV_Arch_PPC603: break;
|
||||
//case CV_Arch_PPC604: break;
|
||||
//case CV_Arch_PPC620: break;
|
||||
//case CV_Arch_PPCFP: break;
|
||||
//case CV_Arch_PPCBE: break;
|
||||
//case CV_Arch_SH3: break;
|
||||
//case CV_Arch_SH3E: break;
|
||||
//case CV_Arch_SH3DSP: break;
|
||||
//case CV_Arch_SH4: break;
|
||||
//case CV_Arch_SHMEDIA: break;
|
||||
//case CV_Arch_ARM3: break;
|
||||
//case CV_Arch_ARM4: break;
|
||||
//case CV_Arch_ARM4T: break;
|
||||
//case CV_Arch_ARM5: break;
|
||||
//case CV_Arch_ARM5T: break;
|
||||
//case CV_Arch_ARM6: break;
|
||||
//case CV_Arch_ARM_XMAC: break;
|
||||
//case CV_Arch_ARM_WMMX: break;
|
||||
//case CV_Arch_ARM7: break;
|
||||
//case CV_Arch_OMNI: break;
|
||||
//case CV_Arch_IA64_1: break;
|
||||
//case CV_Arch_IA64_2: break;
|
||||
//case CV_Arch_CEE: break;
|
||||
//case CV_Arch_AM33: break;
|
||||
//case CV_Arch_M32R: break;
|
||||
//case CV_Arch_TRICORE: break;
|
||||
//case CV_Arch_EBC: break;
|
||||
//case CV_Arch_THUMB: break;
|
||||
//case CV_Arch_ARMNT: break;
|
||||
//case CV_Arch_ARM64: break;
|
||||
//case CV_Arch_D3D11_SHADER: break;
|
||||
}
|
||||
return(result);
|
||||
}
|
||||
|
||||
internal RDI_RegCode
|
||||
cv2r_rdi_reg_code_from_cv_reg_code(RDI_Arch arch, CV_Reg reg_code)
|
||||
{
|
||||
RDI_RegCode result = 0;
|
||||
switch(arch)
|
||||
{
|
||||
case RDI_Arch_X86:
|
||||
{
|
||||
switch(reg_code)
|
||||
{
|
||||
#define X(CVN,C,RDN,BP,BZ) case C: result = RDI_RegCodeX86_##RDN; break;
|
||||
CV_Reg_X86_XList(X)
|
||||
#undef X
|
||||
}
|
||||
}break;
|
||||
case RDI_Arch_X64:
|
||||
{
|
||||
switch(reg_code)
|
||||
{
|
||||
#define X(CVN,C,RDN,BP,BZ) case C: result = RDI_RegCodeX64_##RDN; break;
|
||||
CV_Reg_X64_XList(X)
|
||||
#undef X
|
||||
}
|
||||
}break;
|
||||
}
|
||||
return(result);
|
||||
}
|
||||
|
||||
internal RDI_Language
|
||||
cv2r_rdi_language_from_cv_language(CV_Language cv_language)
|
||||
{
|
||||
RDI_Language result = 0;
|
||||
switch(cv_language)
|
||||
{
|
||||
case CV_Language_C: result = RDI_Language_C; break;
|
||||
case CV_Language_CXX: result = RDI_Language_CPlusPlus; break;
|
||||
//case CV_Language_FORTRAN: result = ; break;
|
||||
//case CV_Language_MASM: result = ; break;
|
||||
//case CV_Language_PASCAL: result = ; break;
|
||||
//case CV_Language_BASIC: result = ; break;
|
||||
//case CV_Language_COBOL: result = ; break;
|
||||
//case CV_Language_LINK: result = ; break;
|
||||
//case CV_Language_CVTRES: result = ; break;
|
||||
//case CV_Language_CVTPGD: result = ; break;
|
||||
//case CV_Language_CSHARP: result = ; break;
|
||||
//case CV_Language_VB: result = ; break;
|
||||
//case CV_Language_ILASM: result = ; break;
|
||||
//case CV_Language_JAVA: result = ; break;
|
||||
//case CV_Language_JSCRIPT: result = ; break;
|
||||
//case CV_Language_MSIL: result = ; break;
|
||||
//case CV_Language_HLSL: result = ; break;
|
||||
}
|
||||
return(result);
|
||||
}
|
||||
|
||||
internal RDI_RegCode
|
||||
cv2r_reg_code_from_arch_encoded_fp_reg(RDI_Arch arch, CV_EncodedFramePtrReg encoded_reg)
|
||||
{
|
||||
RDI_RegCode result = 0;
|
||||
switch(arch)
|
||||
{
|
||||
case RDI_Arch_X86:
|
||||
{
|
||||
switch(encoded_reg)
|
||||
{
|
||||
case CV_EncodedFramePtrReg_StackPtr:
|
||||
{
|
||||
// TODO(allen): support CV_AllReg_VFRAME
|
||||
// TODO(allen): error
|
||||
}break;
|
||||
case CV_EncodedFramePtrReg_FramePtr:
|
||||
{
|
||||
result = RDI_RegCodeX86_ebp;
|
||||
}break;
|
||||
case CV_EncodedFramePtrReg_BasePtr:
|
||||
{
|
||||
result = RDI_RegCodeX86_ebx;
|
||||
}break;
|
||||
}
|
||||
}break;
|
||||
case RDI_Arch_X64:
|
||||
{
|
||||
switch(encoded_reg)
|
||||
{
|
||||
case CV_EncodedFramePtrReg_StackPtr:
|
||||
{
|
||||
result = RDI_RegCodeX64_rsp;
|
||||
}break;
|
||||
case CV_EncodedFramePtrReg_FramePtr:
|
||||
{
|
||||
result = RDI_RegCodeX64_rbp;
|
||||
}break;
|
||||
case CV_EncodedFramePtrReg_BasePtr:
|
||||
{
|
||||
result = RDI_RegCodeX64_r13;
|
||||
}break;
|
||||
}
|
||||
}break;
|
||||
}
|
||||
return(result);
|
||||
}
|
||||
|
||||
|
||||
internal RDI_TypeKind
|
||||
cv2r_rdi_type_kind_from_cv_basic_type(CV_BasicType basic_type)
|
||||
{
|
||||
RDI_TypeKind result = RDI_TypeKind_NULL;
|
||||
switch(basic_type)
|
||||
{
|
||||
case CV_BasicType_VOID: {result = RDI_TypeKind_Void;}break;
|
||||
case CV_BasicType_HRESULT: {result = RDI_TypeKind_HResult;}break;
|
||||
|
||||
case CV_BasicType_RCHAR:
|
||||
case CV_BasicType_CHAR:
|
||||
case CV_BasicType_CHAR8:
|
||||
{result = RDI_TypeKind_Char8;}break;
|
||||
|
||||
case CV_BasicType_UCHAR: {result = RDI_TypeKind_UChar8;}break;
|
||||
case CV_BasicType_WCHAR: {result = RDI_TypeKind_UChar16;}break;
|
||||
case CV_BasicType_CHAR16: {result = RDI_TypeKind_Char16;}break;
|
||||
case CV_BasicType_CHAR32: {result = RDI_TypeKind_Char32;}break;
|
||||
|
||||
case CV_BasicType_BOOL8:
|
||||
case CV_BasicType_INT8:
|
||||
{result = RDI_TypeKind_S8;}break;
|
||||
|
||||
case CV_BasicType_BOOL16:
|
||||
case CV_BasicType_INT16:
|
||||
case CV_BasicType_SHORT:
|
||||
{result = RDI_TypeKind_S16;}break;
|
||||
|
||||
case CV_BasicType_BOOL32:
|
||||
case CV_BasicType_INT32:
|
||||
case CV_BasicType_LONG:
|
||||
{result = RDI_TypeKind_S32;}break;
|
||||
|
||||
case CV_BasicType_BOOL64:
|
||||
case CV_BasicType_INT64:
|
||||
case CV_BasicType_QUAD:
|
||||
{result = RDI_TypeKind_S64;}break;
|
||||
|
||||
case CV_BasicType_INT128:
|
||||
case CV_BasicType_OCT:
|
||||
{result = RDI_TypeKind_S128;}break;
|
||||
|
||||
case CV_BasicType_UINT8: {result = RDI_TypeKind_U8;}break;
|
||||
|
||||
case CV_BasicType_UINT16:
|
||||
case CV_BasicType_USHORT:
|
||||
{result = RDI_TypeKind_U16;}break;
|
||||
|
||||
case CV_BasicType_UINT32:
|
||||
case CV_BasicType_ULONG:
|
||||
{result = RDI_TypeKind_U32;}break;
|
||||
|
||||
case CV_BasicType_UINT64:
|
||||
case CV_BasicType_UQUAD:
|
||||
{result = RDI_TypeKind_U64;}break;
|
||||
|
||||
case CV_BasicType_UINT128:
|
||||
case CV_BasicType_UOCT:
|
||||
{result = RDI_TypeKind_U128;}break;
|
||||
|
||||
case CV_BasicType_FLOAT16:{result = RDI_TypeKind_F16;}break;
|
||||
case CV_BasicType_FLOAT32:{result = RDI_TypeKind_F32;}break;
|
||||
case CV_BasicType_FLOAT32PP:{result = RDI_TypeKind_F32PP;}break;
|
||||
case CV_BasicType_FLOAT48:{result = RDI_TypeKind_F48;}break;
|
||||
case CV_BasicType_FLOAT64:{result = RDI_TypeKind_F64;}break;
|
||||
case CV_BasicType_FLOAT80:{result = RDI_TypeKind_F80;}break;
|
||||
case CV_BasicType_FLOAT128:{result = RDI_TypeKind_F128;}break;
|
||||
case CV_BasicType_COMPLEX32:{result = RDI_TypeKind_ComplexF32;}break;
|
||||
case CV_BasicType_COMPLEX64:{result = RDI_TypeKind_ComplexF64;}break;
|
||||
case CV_BasicType_COMPLEX80:{result = RDI_TypeKind_ComplexF80;}break;
|
||||
case CV_BasicType_COMPLEX128:{result = RDI_TypeKind_ComplexF128;}break;
|
||||
case CV_BasicType_PTR:{result = RDI_TypeKind_Handle;}break;
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
@@ -1,10 +0,0 @@
|
||||
#pragma once
|
||||
|
||||
////////////////////////////////
|
||||
//~ rjf: CodeView => RDI Canonical Conversions
|
||||
|
||||
internal RDI_Arch cv2r_rdi_arch_from_cv_arch(CV_Arch arch);
|
||||
internal RDI_RegCode cv2r_rdi_reg_code_from_cv_reg_code(RDI_Arch arch, CV_Reg reg_code);
|
||||
internal RDI_Language cv2r_rdi_language_from_cv_language(CV_Language language);
|
||||
internal RDI_RegCode cv2r_reg_code_from_arch_encoded_fp_reg(RDI_Arch arch, CV_EncodedFramePtrReg encoded_reg);
|
||||
internal RDI_TypeKind cv2r_rdi_type_kind_from_cv_basic_type(CV_BasicType basic_type);
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1,42 +0,0 @@
|
||||
// Copyright (c) Epic Games Tools
|
||||
// Licensed under the MIT license (https://opensource.org/license/mit/)
|
||||
|
||||
#ifndef RADCON_DWARF_H
|
||||
#define RADCON_DWARF_H
|
||||
|
||||
typedef struct D2R_TypeTable
|
||||
{
|
||||
HashTable *ht;
|
||||
RDIM_TypeChunkList *types;
|
||||
U64 type_chunk_cap;
|
||||
RDIM_Type *varg_type;
|
||||
} D2R_TypeTable;
|
||||
|
||||
typedef struct D2R_TagNode
|
||||
{
|
||||
struct D2R_TagNode *next;
|
||||
DW_TagNode *cur_node;
|
||||
RDIM_Type *type;
|
||||
RDIM_Scope *scope;
|
||||
} D2R_TagNode;
|
||||
|
||||
typedef struct D2R_CompUnitContribMap
|
||||
{
|
||||
U64 count;
|
||||
U64 *info_off_arr;
|
||||
RDIM_Rng1U64ChunkList *voff_range_arr;
|
||||
} D2R_CompUnitContribMap;
|
||||
|
||||
////////////////////////////////
|
||||
|
||||
internal RDIM_BakeParams * d2r_convert(Arena *arena, RDIM_LocalState *local_state, RC_Context *in);
|
||||
|
||||
////////////////////////////////
|
||||
|
||||
internal RDI_Language rdi_language_from_dw_language(DW_Language v);
|
||||
internal RDI_RegCodeX86 rdi_reg_from_dw_reg_x86(DW_RegX86 v);
|
||||
internal B32 rdi_reg_from_dw_reg_x64(DW_RegX64 v, RDI_RegCodeX64 *code_out, U64 *off_out, U64 *size_out);
|
||||
internal B32 rdi_reg_from_dw_reg(Arch arch, DW_Reg v, RDI_RegCode *code_out, U64 *off_out, U64 *size_out);
|
||||
|
||||
#endif // RADCON_DWARF_H
|
||||
|
||||
@@ -1,10 +0,0 @@
|
||||
// Copyright (c) Epic Games Tools
|
||||
// Licensed under the MIT license (https://opensource.org/license/mit/)
|
||||
|
||||
internal RDIM_BinarySectionList
|
||||
e2r_rdi_binary_sections_from_elf_section_table(Arena *arena, ELF_Shdr64Array shdrs)
|
||||
{
|
||||
RDIM_BinarySectionList result = {0};
|
||||
return result;
|
||||
}
|
||||
|
||||
@@ -1,9 +0,0 @@
|
||||
// Copyright (c) Epic Games Tools
|
||||
// Licensed under the MIT license (https://opensource.org/license/mit/)
|
||||
|
||||
#ifndef RADCON_ELF_H
|
||||
#define RADCON_ELF_H
|
||||
|
||||
internal RDIM_BinarySectionList e2r_rdi_binary_sections_from_elf_section_table(Arena *arena, ELF_Shdr64Array shdrs);
|
||||
|
||||
#endif // RADCON_ELF_H
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1,238 +0,0 @@
|
||||
// Copyright (c) Epic Games Tools
|
||||
// Licensed under the MIT license (https://opensource.org/license/mit/)
|
||||
|
||||
#ifndef RADCON_PDB_H
|
||||
#define RADCON_PDB_H
|
||||
|
||||
////////////////////////////////
|
||||
//~ rjf: Initial PDB Information Extraction & Conversion Preparation Task Types
|
||||
|
||||
//- rjf: tpi hash parsing
|
||||
|
||||
typedef struct P2R_TPIHashParseIn P2R_TPIHashParseIn;
|
||||
struct P2R_TPIHashParseIn
|
||||
{
|
||||
PDB_Strtbl *strtbl;
|
||||
PDB_TpiParsed *tpi;
|
||||
String8 hash_data;
|
||||
String8 aux_data;
|
||||
};
|
||||
|
||||
//- rjf: tpi leaves parsing
|
||||
|
||||
typedef struct P2R_TPILeafParseIn P2R_TPILeafParseIn;
|
||||
struct P2R_TPILeafParseIn
|
||||
{
|
||||
String8 leaf_data;
|
||||
CV_TypeId itype_first;
|
||||
};
|
||||
|
||||
//- rjf: exe hashing
|
||||
|
||||
typedef struct P2R_EXEHashIn P2R_EXEHashIn;
|
||||
struct P2R_EXEHashIn
|
||||
{
|
||||
String8 exe_data;
|
||||
};
|
||||
|
||||
//- rjf: symbol stream parsing
|
||||
|
||||
typedef struct P2R_SymbolStreamParseIn P2R_SymbolStreamParseIn;
|
||||
struct P2R_SymbolStreamParseIn
|
||||
{
|
||||
String8 data;
|
||||
};
|
||||
|
||||
//- rjf: c13 line info stream parsing
|
||||
|
||||
typedef struct P2R_C13StreamParseIn P2R_C13StreamParseIn;
|
||||
struct P2R_C13StreamParseIn
|
||||
{
|
||||
String8 data;
|
||||
String8 strtbl;
|
||||
COFF_SectionHeaderArray coff_sections;
|
||||
};
|
||||
|
||||
//- rjf: comp unit parsing
|
||||
|
||||
typedef struct P2R_CompUnitParseIn P2R_CompUnitParseIn;
|
||||
struct P2R_CompUnitParseIn
|
||||
{
|
||||
String8 data;
|
||||
};
|
||||
|
||||
//- rjf: comp unit contribution table parsing
|
||||
|
||||
typedef struct P2R_CompUnitContributionsParseIn P2R_CompUnitContributionsParseIn;
|
||||
struct P2R_CompUnitContributionsParseIn
|
||||
{
|
||||
String8 data;
|
||||
COFF_SectionHeaderArray coff_sections;
|
||||
};
|
||||
|
||||
////////////////////////////////
|
||||
//~ rjf: Conversion Data Structure & Task Types
|
||||
|
||||
//- rjf: link name map (voff -> string)
|
||||
|
||||
typedef struct P2R_LinkNameNode P2R_LinkNameNode;
|
||||
struct P2R_LinkNameNode
|
||||
{
|
||||
P2R_LinkNameNode *next;
|
||||
U64 voff;
|
||||
String8 name;
|
||||
};
|
||||
|
||||
typedef struct P2R_LinkNameMap P2R_LinkNameMap;
|
||||
struct P2R_LinkNameMap
|
||||
{
|
||||
P2R_LinkNameNode **buckets;
|
||||
U64 buckets_count;
|
||||
U64 bucket_collision_count;
|
||||
U64 link_name_count;
|
||||
};
|
||||
|
||||
//- rjf: normalized file path -> source file map
|
||||
|
||||
typedef struct P2R_SrcFileNode P2R_SrcFileNode;
|
||||
struct P2R_SrcFileNode
|
||||
{
|
||||
P2R_SrcFileNode *next;
|
||||
RDIM_SrcFile *src_file;
|
||||
};
|
||||
|
||||
typedef struct P2R_SrcFileMap P2R_SrcFileMap;
|
||||
struct P2R_SrcFileMap
|
||||
{
|
||||
P2R_SrcFileNode **slots;
|
||||
U64 slots_count;
|
||||
};
|
||||
|
||||
//- rjf: unit conversion tasks
|
||||
|
||||
typedef struct P2R_UnitConvertIn P2R_UnitConvertIn;
|
||||
struct P2R_UnitConvertIn
|
||||
{
|
||||
PDB_Strtbl *pdb_strtbl;
|
||||
COFF_SectionHeaderArray coff_sections;
|
||||
PDB_CompUnitArray *comp_units;
|
||||
PDB_CompUnitContributionArray *comp_unit_contributions;
|
||||
CV_SymParsed **comp_unit_syms;
|
||||
CV_C13Parsed **comp_unit_c13s;
|
||||
};
|
||||
|
||||
typedef struct P2R_UnitConvertOut P2R_UnitConvertOut;
|
||||
struct P2R_UnitConvertOut
|
||||
{
|
||||
RDIM_UnitChunkList units;
|
||||
RDIM_SrcFileChunkList src_files;
|
||||
RDIM_LineTableChunkList line_tables;
|
||||
RDIM_LineTable **units_first_inline_site_line_tables;
|
||||
};
|
||||
|
||||
//- rjf: link name map building tasks
|
||||
|
||||
typedef struct P2R_LinkNameMapBuildIn P2R_LinkNameMapBuildIn;
|
||||
struct P2R_LinkNameMapBuildIn
|
||||
{
|
||||
CV_SymParsed *sym;
|
||||
COFF_SectionHeaderArray coff_sections;
|
||||
P2R_LinkNameMap *link_name_map;
|
||||
};
|
||||
|
||||
//- rjf: udt conversion
|
||||
|
||||
typedef struct P2R_UDTConvertIn P2R_UDTConvertIn;
|
||||
struct P2R_UDTConvertIn
|
||||
{
|
||||
CV_LeafParsed *tpi_leaf;
|
||||
CV_TypeId itype_first;
|
||||
CV_TypeId itype_opl;
|
||||
RDIM_Type **itype_type_ptrs;
|
||||
};
|
||||
|
||||
//- rjf: symbol stream conversion
|
||||
|
||||
typedef struct P2R_SymbolStreamConvertIn P2R_SymbolStreamConvertIn;
|
||||
struct P2R_SymbolStreamConvertIn
|
||||
{
|
||||
RDI_Arch arch;
|
||||
COFF_SectionHeaderArray coff_sections;
|
||||
PDB_TpiHashParsed *tpi_hash;
|
||||
CV_LeafParsed *tpi_leaf;
|
||||
CV_LeafParsed *ipi_leaf;
|
||||
CV_SymParsed *sym;
|
||||
U64 sym_ranges_first;
|
||||
U64 sym_ranges_opl;
|
||||
RDIM_Type **itype_type_ptrs;
|
||||
P2R_LinkNameMap *link_name_map;
|
||||
RDIM_LineTable *first_inline_site_line_table;
|
||||
};
|
||||
|
||||
typedef struct P2R_SymbolStreamConvertOut P2R_SymbolStreamConvertOut;
|
||||
struct P2R_SymbolStreamConvertOut
|
||||
{
|
||||
RDIM_SymbolChunkList procedures;
|
||||
RDIM_SymbolChunkList global_variables;
|
||||
RDIM_SymbolChunkList thread_variables;
|
||||
RDIM_ScopeChunkList scopes;
|
||||
RDIM_InlineSiteChunkList inline_sites;
|
||||
};
|
||||
|
||||
////////////////////////////////
|
||||
//~ rjf: Basic Helpers
|
||||
|
||||
internal U64 p2r_end_of_cplusplus_container_name(String8 str);
|
||||
internal U64 p2r_hash_from_voff(U64 voff);
|
||||
|
||||
////////////////////////////////
|
||||
//~ rjf: Location Info Building Helpers
|
||||
|
||||
internal RDIM_Location *p2r_location_from_addr_reg_off(Arena *arena, RDI_Arch arch, RDI_RegCode reg_code, U32 reg_byte_size, U32 reg_byte_pos, S64 offset, B32 extra_indirection);
|
||||
internal RDI_RegCode p2r_reg_code_from_arch_encoded_fp_reg(RDI_Arch arch, CV_EncodedFramePtrReg encoded_reg);
|
||||
internal void p2r_location_over_lvar_addr_range(Arena *arena, RDIM_ScopeChunkList *scopes, RDIM_LocationSet *locset, RDIM_Location *location, CV_LvarAddrRange *range, COFF_SectionHeader *section, CV_LvarAddrGap *gaps, U64 gap_count);
|
||||
|
||||
////////////////////////////////
|
||||
//~ rjf: Initial Parsing & Preparation Pass Tasks
|
||||
|
||||
ASYNC_WORK_DEF(p2r_exe_hash_work);
|
||||
ASYNC_WORK_DEF(p2r_tpi_hash_parse_work);
|
||||
ASYNC_WORK_DEF(p2r_tpi_leaf_work);
|
||||
ASYNC_WORK_DEF(p2r_symbol_stream_parse_work);
|
||||
ASYNC_WORK_DEF(p2r_c13_stream_parse_work);
|
||||
ASYNC_WORK_DEF(p2r_comp_unit_parse_work);
|
||||
ASYNC_WORK_DEF(p2r_comp_unit_contributions_parse_work);
|
||||
|
||||
////////////////////////////////
|
||||
//~ rjf: Unit Conversion Tasks
|
||||
|
||||
ASYNC_WORK_DEF(p2r_units_convert_work);
|
||||
|
||||
////////////////////////////////
|
||||
//~ rjf: Link Name Map Building Tasks
|
||||
|
||||
ASYNC_WORK_DEF(p2r_link_name_map_build_work);
|
||||
|
||||
////////////////////////////////
|
||||
//~ rjf: UDT Conversion Tasks
|
||||
|
||||
ASYNC_WORK_DEF(p2r_udt_convert_work);
|
||||
|
||||
////////////////////////////////
|
||||
//~ rjf: Symbol Stream Conversion Tasks
|
||||
|
||||
ASYNC_WORK_DEF(p2r_symbol_stream_convert_work);
|
||||
|
||||
////////////////////////////////
|
||||
//~ rjf: Top-Level Conversion Entry Point
|
||||
|
||||
internal RDIM_BakeParams p2r_convert(Arena *arena, RDIM_LocalState *local_state, RC_Context *in);
|
||||
|
||||
////////////////////////////////
|
||||
|
||||
internal B32 p2r_has_symbol_ref(String8 msf_data, String8List symbol_list, MSF_RawStreamTable *st);
|
||||
internal B32 p2r_has_file_ref(String8 msf_data, String8List file_list, MSF_RawStreamTable *st);
|
||||
internal B32 p2r_has_symbol_or_file_ref(String8 msf_data, String8List symbol_list, String8List file_list);
|
||||
|
||||
#endif // RADCON_PDB_H
|
||||
|
||||
Reference in New Issue
Block a user