From e2b9618101ee63f302ab183e5f0c069a80b67748 Mon Sep 17 00:00:00 2001 From: Ryan Fleury Date: Mon, 9 Mar 2026 09:37:50 -0700 Subject: [PATCH] rdi format - namespaces --- build.bat | 11 +- src/lib_rdi/rdi.c | 3 +- src/lib_rdi/rdi.h | 967 ++++++++++++++++++---------------- src/lib_rdi_make/rdi_make.c | 24 + src/lib_rdi_make/rdi_make.h | 53 +- src/rdi/rdi.mdesk | 98 +++- src/rdi_make/rdi_make_local.c | 13 + 7 files changed, 665 insertions(+), 504 deletions(-) diff --git a/build.bat b/build.bat index 67c197d3..604bac55 100644 --- a/build.bat +++ b/build.bat @@ -123,13 +123,16 @@ for /f %%i in ('call git describe --always --dirty') do set compile=%compile% for /f %%i in ('call git rev-parse HEAD') do set compile=%compile% -DBUILD_GIT_HASH_FULL=\"%%i\" :: --- Build & Run Metaprogram ------------------------------------------------ +pushd build if "%meta%"=="1" ( - echo [doing metagen] - pushd build + echo [building metagen] %compile_debug% ..\src\metagen\metagen_main.c %compile_link% %out%metagen.exe || exit /b 1 - metagen.exe || exit /b 1 - popd ) +if "%no_meta%"=="" ( + echo [running metagen] + metagen.exe || exit /b 1 +) +popd :: --- Build Everything (@build_targets) -------------------------------------- pushd build diff --git a/src/lib_rdi/rdi.c b/src/lib_rdi/rdi.c index adfe99bd..d68158f4 100644 --- a/src/lib_rdi/rdi.c +++ b/src/lib_rdi/rdi.c @@ -10,7 +10,7 @@ #ifndef RDI_C #define RDI_C -RDI_U16 rdi_section_element_size_table[44] = +RDI_U16 rdi_section_element_size_table[45] = { sizeof(RDI_U8), sizeof(RDI_TopLevelInfo), @@ -30,6 +30,7 @@ sizeof(RDI_U32), sizeof(RDI_U64), sizeof(RDI_Unit), sizeof(RDI_VMapEntry), +sizeof(RDI_Namespace), sizeof(RDI_TypeNode), sizeof(RDI_UDT), sizeof(RDI_Member), diff --git a/src/lib_rdi/rdi.h b/src/lib_rdi/rdi.h index a7b8b476..af756bb7 100644 --- a/src/lib_rdi/rdi.h +++ b/src/lib_rdi/rdi.h @@ -67,7 +67,7 @@ union RDI_GUID {RDI_U8 u8[16]; RDI_U64 u64[2];}; // "raddbg\0\0" #define RDI_MAGIC_CONSTANT 0x0000676264646172 -#define RDI_ENCODING_VERSION 18 +#define RDI_ENCODING_VERSION 19 //////////////////////////////////////////////////////////////// //~ Format Types & Functions @@ -75,428 +75,444 @@ union RDI_GUID {RDI_U8 u8[16]; RDI_U64 u64[2];}; typedef RDI_U32 RDI_SectionKind; typedef enum RDI_SectionKindEnum { - RDI_SectionKind_NULL = 0x0000, - RDI_SectionKind_TopLevelInfo = 0x0001, - RDI_SectionKind_StringData = 0x0002, - RDI_SectionKind_StringTable = 0x0003, - RDI_SectionKind_IndexRuns = 0x0004, - RDI_SectionKind_BinarySections = 0x0005, - RDI_SectionKind_FilePathNodes = 0x0006, - RDI_SectionKind_SourceFiles = 0x0007, - RDI_SectionKind_LineTables = 0x0008, - RDI_SectionKind_LineInfoVOffs = 0x0009, - RDI_SectionKind_LineInfoLines = 0x000A, - RDI_SectionKind_LineInfoColumns = 0x000B, - RDI_SectionKind_SourceLineMaps = 0x000C, - RDI_SectionKind_SourceLineMapNumbers = 0x000D, - RDI_SectionKind_SourceLineMapRanges = 0x000E, - RDI_SectionKind_SourceLineMapVOffs = 0x000F, - RDI_SectionKind_Units = 0x0010, - RDI_SectionKind_UnitVMap = 0x0011, - RDI_SectionKind_TypeNodes = 0x0012, - RDI_SectionKind_UDTs = 0x0013, - RDI_SectionKind_Members = 0x0014, - RDI_SectionKind_EnumMembers = 0x0015, - RDI_SectionKind_GlobalVariables = 0x0016, - RDI_SectionKind_GlobalVMap = 0x0017, - RDI_SectionKind_ThreadVariables = 0x0018, - RDI_SectionKind_Constants = 0x0019, - RDI_SectionKind_Procedures = 0x001A, - RDI_SectionKind_Scopes = 0x001B, - RDI_SectionKind_ScopeVOffData = 0x001C, - RDI_SectionKind_ScopeVMap = 0x001D, - RDI_SectionKind_InlineSites = 0x001E, - RDI_SectionKind_Locals = 0x001F, - RDI_SectionKind_LocationBlocks = 0x0020, - RDI_SectionKind_LocationData = 0x0021, - RDI_SectionKind_ConstantValueData = 0x0022, - RDI_SectionKind_ConstantValueTable = 0x0023, - RDI_SectionKind_MD5Checksums = 0x0024, - RDI_SectionKind_SHA1Checksums = 0x0025, - RDI_SectionKind_SHA256Checksums = 0x0026, - RDI_SectionKind_Timestamps = 0x0027, - RDI_SectionKind_NameMaps = 0x0028, - RDI_SectionKind_NameMapBuckets = 0x0029, - RDI_SectionKind_NameMapNodes = 0x002A, - RDI_SectionKind_COUNT = 0x002B, +RDI_SectionKind_NULL = 0x0000, +RDI_SectionKind_TopLevelInfo = 0x0001, +RDI_SectionKind_StringData = 0x0002, +RDI_SectionKind_StringTable = 0x0003, +RDI_SectionKind_IndexRuns = 0x0004, +RDI_SectionKind_BinarySections = 0x0005, +RDI_SectionKind_FilePathNodes = 0x0006, +RDI_SectionKind_SourceFiles = 0x0007, +RDI_SectionKind_LineTables = 0x0008, +RDI_SectionKind_LineInfoVOffs = 0x0009, +RDI_SectionKind_LineInfoLines = 0x000A, +RDI_SectionKind_LineInfoColumns = 0x000B, +RDI_SectionKind_SourceLineMaps = 0x000C, +RDI_SectionKind_SourceLineMapNumbers = 0x000D, +RDI_SectionKind_SourceLineMapRanges = 0x000E, +RDI_SectionKind_SourceLineMapVOffs = 0x000F, +RDI_SectionKind_Units = 0x0010, +RDI_SectionKind_UnitVMap = 0x0011, +RDI_SectionKind_Namespaces = 0x0012, +RDI_SectionKind_TypeNodes = 0x0013, +RDI_SectionKind_UDTs = 0x0014, +RDI_SectionKind_Members = 0x0015, +RDI_SectionKind_EnumMembers = 0x0016, +RDI_SectionKind_GlobalVariables = 0x0017, +RDI_SectionKind_GlobalVMap = 0x0018, +RDI_SectionKind_ThreadVariables = 0x0019, +RDI_SectionKind_Constants = 0x001A, +RDI_SectionKind_Procedures = 0x001B, +RDI_SectionKind_Scopes = 0x001C, +RDI_SectionKind_ScopeVOffData = 0x001D, +RDI_SectionKind_ScopeVMap = 0x001E, +RDI_SectionKind_InlineSites = 0x001F, +RDI_SectionKind_Locals = 0x0020, +RDI_SectionKind_LocationBlocks = 0x0021, +RDI_SectionKind_LocationData = 0x0022, +RDI_SectionKind_ConstantValueData = 0x0023, +RDI_SectionKind_ConstantValueTable = 0x0024, +RDI_SectionKind_MD5Checksums = 0x0025, +RDI_SectionKind_SHA1Checksums = 0x0026, +RDI_SectionKind_SHA256Checksums = 0x0027, +RDI_SectionKind_Timestamps = 0x0028, +RDI_SectionKind_NameMaps = 0x0029, +RDI_SectionKind_NameMapBuckets = 0x002A, +RDI_SectionKind_NameMapNodes = 0x002B, +RDI_SectionKind_COUNT = 0x002C, } RDI_SectionKindEnum; typedef RDI_U32 RDI_SectionEncoding; typedef enum RDI_SectionEncodingEnum { - RDI_SectionEncoding_Unpacked = 0, - RDI_SectionEncoding_LZB = 1, +RDI_SectionEncoding_Unpacked = 0, +RDI_SectionEncoding_LZB = 1, } RDI_SectionEncodingEnum; typedef RDI_U32 RDI_Arch; typedef enum RDI_ArchEnum { - RDI_Arch_NULL = 0, - RDI_Arch_X64 = 1, +RDI_Arch_NULL = 0, +RDI_Arch_X64 = 1, } RDI_ArchEnum; typedef RDI_U8 RDI_RegCode; typedef enum RDI_RegCodeEnum { - RDI_RegCode_nil, +RDI_RegCode_nil, } RDI_RegCodeEnum; typedef RDI_U8 RDI_RegCodeX64; typedef enum RDI_RegCodeX64Enum { - RDI_RegCodeX64_nil = 0, - RDI_RegCodeX64_rax = 1, - RDI_RegCodeX64_rcx = 2, - RDI_RegCodeX64_rdx = 3, - RDI_RegCodeX64_rbx = 4, - RDI_RegCodeX64_rsp = 5, - RDI_RegCodeX64_rbp = 6, - RDI_RegCodeX64_rsi = 7, - RDI_RegCodeX64_rdi = 8, - RDI_RegCodeX64_r8 = 9, - RDI_RegCodeX64_r9 = 10, - RDI_RegCodeX64_r10 = 11, - RDI_RegCodeX64_r11 = 12, - RDI_RegCodeX64_r12 = 13, - RDI_RegCodeX64_r13 = 14, - RDI_RegCodeX64_r14 = 15, - RDI_RegCodeX64_r15 = 16, - RDI_RegCodeX64_es = 17, - RDI_RegCodeX64_cs = 18, - RDI_RegCodeX64_ss = 19, - RDI_RegCodeX64_ds = 20, - RDI_RegCodeX64_fs = 21, - RDI_RegCodeX64_gs = 22, - RDI_RegCodeX64_rip = 23, - RDI_RegCodeX64_rflags = 24, - RDI_RegCodeX64_dr0 = 25, - RDI_RegCodeX64_dr1 = 26, - RDI_RegCodeX64_dr2 = 27, - RDI_RegCodeX64_dr3 = 28, - RDI_RegCodeX64_dr4 = 29, - RDI_RegCodeX64_dr5 = 30, - RDI_RegCodeX64_dr6 = 31, - RDI_RegCodeX64_dr7 = 32, - RDI_RegCodeX64_st0 = 33, - RDI_RegCodeX64_st1 = 34, - RDI_RegCodeX64_st2 = 35, - RDI_RegCodeX64_st3 = 36, - RDI_RegCodeX64_st4 = 37, - RDI_RegCodeX64_st5 = 38, - RDI_RegCodeX64_st6 = 39, - RDI_RegCodeX64_st7 = 40, - RDI_RegCodeX64_zmm0 = 41, - RDI_RegCodeX64_zmm1 = 42, - RDI_RegCodeX64_zmm2 = 43, - RDI_RegCodeX64_zmm3 = 44, - RDI_RegCodeX64_zmm4 = 45, - RDI_RegCodeX64_zmm5 = 46, - RDI_RegCodeX64_zmm6 = 47, - RDI_RegCodeX64_zmm7 = 48, - RDI_RegCodeX64_zmm8 = 49, - RDI_RegCodeX64_zmm9 = 50, - RDI_RegCodeX64_zmm10 = 51, - RDI_RegCodeX64_zmm11 = 52, - RDI_RegCodeX64_zmm12 = 53, - RDI_RegCodeX64_zmm13 = 54, - RDI_RegCodeX64_zmm14 = 55, - RDI_RegCodeX64_zmm15 = 56, - RDI_RegCodeX64_zmm16 = 57, - RDI_RegCodeX64_zmm17 = 58, - RDI_RegCodeX64_zmm18 = 59, - RDI_RegCodeX64_zmm19 = 60, - RDI_RegCodeX64_zmm20 = 61, - RDI_RegCodeX64_zmm21 = 62, - RDI_RegCodeX64_zmm22 = 63, - RDI_RegCodeX64_zmm23 = 64, - RDI_RegCodeX64_zmm24 = 65, - RDI_RegCodeX64_zmm25 = 66, - RDI_RegCodeX64_zmm26 = 67, - RDI_RegCodeX64_zmm27 = 68, - RDI_RegCodeX64_zmm28 = 69, - RDI_RegCodeX64_zmm29 = 70, - RDI_RegCodeX64_zmm30 = 71, - RDI_RegCodeX64_zmm31 = 72, - RDI_RegCodeX64_k0 = 73, - RDI_RegCodeX64_k1 = 74, - RDI_RegCodeX64_k2 = 75, - RDI_RegCodeX64_k3 = 76, - RDI_RegCodeX64_k4 = 77, - RDI_RegCodeX64_k5 = 78, - RDI_RegCodeX64_k6 = 79, - RDI_RegCodeX64_k7 = 80, - RDI_RegCodeX64_mxcsr = 81, - RDI_RegCodeX64_fsbase = 82, - RDI_RegCodeX64_gsbase = 83, - RDI_RegCodeX64_fcw = 84, - RDI_RegCodeX64_fsw = 85, - RDI_RegCodeX64_ftw = 86, - RDI_RegCodeX64_fop = 87, - RDI_RegCodeX64_fcs = 88, - RDI_RegCodeX64_fds = 89, - RDI_RegCodeX64_fip = 90, - RDI_RegCodeX64_fdp = 91, - RDI_RegCodeX64_mxcsr_mask = 92, - RDI_RegCodeX64_cetmsr = 93, - RDI_RegCodeX64_cetssp = 94, +RDI_RegCodeX64_nil = 0, +RDI_RegCodeX64_rax = 1, +RDI_RegCodeX64_rcx = 2, +RDI_RegCodeX64_rdx = 3, +RDI_RegCodeX64_rbx = 4, +RDI_RegCodeX64_rsp = 5, +RDI_RegCodeX64_rbp = 6, +RDI_RegCodeX64_rsi = 7, +RDI_RegCodeX64_rdi = 8, +RDI_RegCodeX64_r8 = 9, +RDI_RegCodeX64_r9 = 10, +RDI_RegCodeX64_r10 = 11, +RDI_RegCodeX64_r11 = 12, +RDI_RegCodeX64_r12 = 13, +RDI_RegCodeX64_r13 = 14, +RDI_RegCodeX64_r14 = 15, +RDI_RegCodeX64_r15 = 16, +RDI_RegCodeX64_es = 17, +RDI_RegCodeX64_cs = 18, +RDI_RegCodeX64_ss = 19, +RDI_RegCodeX64_ds = 20, +RDI_RegCodeX64_fs = 21, +RDI_RegCodeX64_gs = 22, +RDI_RegCodeX64_rip = 23, +RDI_RegCodeX64_rflags = 24, +RDI_RegCodeX64_dr0 = 25, +RDI_RegCodeX64_dr1 = 26, +RDI_RegCodeX64_dr2 = 27, +RDI_RegCodeX64_dr3 = 28, +RDI_RegCodeX64_dr4 = 29, +RDI_RegCodeX64_dr5 = 30, +RDI_RegCodeX64_dr6 = 31, +RDI_RegCodeX64_dr7 = 32, +RDI_RegCodeX64_st0 = 33, +RDI_RegCodeX64_st1 = 34, +RDI_RegCodeX64_st2 = 35, +RDI_RegCodeX64_st3 = 36, +RDI_RegCodeX64_st4 = 37, +RDI_RegCodeX64_st5 = 38, +RDI_RegCodeX64_st6 = 39, +RDI_RegCodeX64_st7 = 40, +RDI_RegCodeX64_zmm0 = 41, +RDI_RegCodeX64_zmm1 = 42, +RDI_RegCodeX64_zmm2 = 43, +RDI_RegCodeX64_zmm3 = 44, +RDI_RegCodeX64_zmm4 = 45, +RDI_RegCodeX64_zmm5 = 46, +RDI_RegCodeX64_zmm6 = 47, +RDI_RegCodeX64_zmm7 = 48, +RDI_RegCodeX64_zmm8 = 49, +RDI_RegCodeX64_zmm9 = 50, +RDI_RegCodeX64_zmm10 = 51, +RDI_RegCodeX64_zmm11 = 52, +RDI_RegCodeX64_zmm12 = 53, +RDI_RegCodeX64_zmm13 = 54, +RDI_RegCodeX64_zmm14 = 55, +RDI_RegCodeX64_zmm15 = 56, +RDI_RegCodeX64_zmm16 = 57, +RDI_RegCodeX64_zmm17 = 58, +RDI_RegCodeX64_zmm18 = 59, +RDI_RegCodeX64_zmm19 = 60, +RDI_RegCodeX64_zmm20 = 61, +RDI_RegCodeX64_zmm21 = 62, +RDI_RegCodeX64_zmm22 = 63, +RDI_RegCodeX64_zmm23 = 64, +RDI_RegCodeX64_zmm24 = 65, +RDI_RegCodeX64_zmm25 = 66, +RDI_RegCodeX64_zmm26 = 67, +RDI_RegCodeX64_zmm27 = 68, +RDI_RegCodeX64_zmm28 = 69, +RDI_RegCodeX64_zmm29 = 70, +RDI_RegCodeX64_zmm30 = 71, +RDI_RegCodeX64_zmm31 = 72, +RDI_RegCodeX64_k0 = 73, +RDI_RegCodeX64_k1 = 74, +RDI_RegCodeX64_k2 = 75, +RDI_RegCodeX64_k3 = 76, +RDI_RegCodeX64_k4 = 77, +RDI_RegCodeX64_k5 = 78, +RDI_RegCodeX64_k6 = 79, +RDI_RegCodeX64_k7 = 80, +RDI_RegCodeX64_mxcsr = 81, +RDI_RegCodeX64_fsbase = 82, +RDI_RegCodeX64_gsbase = 83, +RDI_RegCodeX64_fcw = 84, +RDI_RegCodeX64_fsw = 85, +RDI_RegCodeX64_ftw = 86, +RDI_RegCodeX64_fop = 87, +RDI_RegCodeX64_fcs = 88, +RDI_RegCodeX64_fds = 89, +RDI_RegCodeX64_fip = 90, +RDI_RegCodeX64_fdp = 91, +RDI_RegCodeX64_mxcsr_mask = 92, +RDI_RegCodeX64_cetmsr = 93, +RDI_RegCodeX64_cetssp = 94, } RDI_RegCodeX64Enum; typedef RDI_U32 RDI_BinarySectionFlags; typedef enum RDI_BinarySectionFlagsEnum { - RDI_BinarySectionFlag_Read = 1<<0, - RDI_BinarySectionFlag_Write = 1<<1, - RDI_BinarySectionFlag_Execute = 1<<2, +RDI_BinarySectionFlag_Read = 1<<0, +RDI_BinarySectionFlag_Write = 1<<1, +RDI_BinarySectionFlag_Execute = 1<<2, } RDI_BinarySectionFlagsEnum; typedef RDI_U32 RDI_ChecksumKind; typedef enum RDI_ChecksumKindEnum { - RDI_ChecksumKind_NULL = 0, - RDI_ChecksumKind_MD5 = 1, - RDI_ChecksumKind_SHA1 = 2, - RDI_ChecksumKind_SHA256 = 3, - RDI_ChecksumKind_Timestamp = 4, - RDI_ChecksumKind_COUNT = 5, +RDI_ChecksumKind_NULL = 0, +RDI_ChecksumKind_MD5 = 1, +RDI_ChecksumKind_SHA1 = 2, +RDI_ChecksumKind_SHA256 = 3, +RDI_ChecksumKind_Timestamp = 4, +RDI_ChecksumKind_COUNT = 5, } RDI_ChecksumKindEnum; typedef RDI_U32 RDI_Language; typedef enum RDI_LanguageEnum { - RDI_Language_NULL = 0, - RDI_Language_C = 1, - RDI_Language_CPlusPlus = 2, - RDI_Language_Masm = 3, - RDI_Language_COUNT = 4, +RDI_Language_NULL = 0, +RDI_Language_C = 1, +RDI_Language_CPlusPlus = 2, +RDI_Language_Masm = 3, +RDI_Language_COUNT = 4, } RDI_LanguageEnum; typedef RDI_U16 RDI_TypeKind; typedef enum RDI_TypeKindEnum { - RDI_TypeKind_NULL = 0x0000, - RDI_TypeKind_Void = 0x0001, - RDI_TypeKind_Handle = 0x0002, - RDI_TypeKind_HResult = 0x0003, - RDI_TypeKind_Char8 = 0x0004, - RDI_TypeKind_Char16 = 0x0005, - RDI_TypeKind_Char32 = 0x0006, - RDI_TypeKind_UChar8 = 0x0007, - RDI_TypeKind_UChar16 = 0x0008, - RDI_TypeKind_UChar32 = 0x0009, - RDI_TypeKind_U8 = 0x000A, - RDI_TypeKind_U16 = 0x000B, - RDI_TypeKind_U32 = 0x000C, - RDI_TypeKind_U64 = 0x000D, - RDI_TypeKind_U128 = 0x000E, - RDI_TypeKind_U256 = 0x000F, - RDI_TypeKind_U512 = 0x0010, - RDI_TypeKind_S8 = 0x0011, - RDI_TypeKind_S16 = 0x0012, - RDI_TypeKind_S32 = 0x0013, - RDI_TypeKind_S64 = 0x0014, - RDI_TypeKind_S128 = 0x0015, - RDI_TypeKind_S256 = 0x0016, - RDI_TypeKind_S512 = 0x0017, - RDI_TypeKind_Bool = 0x0018, - RDI_TypeKind_BF16 = 0x0019, - RDI_TypeKind_F16 = 0x001A, - RDI_TypeKind_F32 = 0x001B, - RDI_TypeKind_F32PP = 0x001C, - RDI_TypeKind_F48 = 0x001D, - RDI_TypeKind_F64 = 0x001E, - RDI_TypeKind_F80 = 0x001F, - RDI_TypeKind_F96 = 0x0020, - RDI_TypeKind_F128 = 0x0021, - RDI_TypeKind_ComplexF32 = 0x0022, - RDI_TypeKind_ComplexF64 = 0x0023, - RDI_TypeKind_ComplexF80 = 0x0024, - RDI_TypeKind_ComplexF128 = 0x0025, - RDI_TypeKind_Decimal32 = 0x0026, - RDI_TypeKind_Decimal64 = 0x0027, - RDI_TypeKind_Decimal128 = 0x0028, - RDI_TypeKind_Modifier = 0x1000, - RDI_TypeKind_Ptr = 0x1001, - RDI_TypeKind_LRef = 0x1002, - RDI_TypeKind_RRef = 0x1003, - RDI_TypeKind_Array = 0x1004, - RDI_TypeKind_Function = 0x1005, - RDI_TypeKind_Method = 0x1006, - RDI_TypeKind_MemberPtr = 0x1007, - RDI_TypeKind_Struct = 0x2000, - RDI_TypeKind_Class = 0x2001, - RDI_TypeKind_Union = 0x2002, - RDI_TypeKind_Enum = 0x2003, - RDI_TypeKind_Alias = 0x2004, - RDI_TypeKind_IncompleteStruct = 0x2005, - RDI_TypeKind_IncompleteUnion = 0x2006, - RDI_TypeKind_IncompleteClass = 0x2007, - RDI_TypeKind_IncompleteEnum = 0x2008, - RDI_TypeKind_Bitfield = 0xF000, - RDI_TypeKind_Variadic = 0xF001, - RDI_TypeKind_Count = 0xF002, - RDI_TypeKind_FirstBuiltIn = RDI_TypeKind_Void, - RDI_TypeKind_LastBuiltIn = RDI_TypeKind_Decimal128, - RDI_TypeKind_FirstConstructed = RDI_TypeKind_Modifier, - RDI_TypeKind_LastConstructed = RDI_TypeKind_MemberPtr, - RDI_TypeKind_FirstUserDefined = RDI_TypeKind_Struct, - RDI_TypeKind_LastRecord = RDI_TypeKind_Union, - RDI_TypeKind_FirstIncomplete = RDI_TypeKind_IncompleteStruct, - RDI_TypeKind_LastIncomplete = RDI_TypeKind_IncompleteEnum, - RDI_TypeKind_FirstRecord = RDI_TypeKind_Struct, - RDI_TypeKind_LastUserDefined = RDI_TypeKind_IncompleteEnum, +RDI_TypeKind_NULL = 0x0000, +RDI_TypeKind_Void = 0x0001, +RDI_TypeKind_Handle = 0x0002, +RDI_TypeKind_HResult = 0x0003, +RDI_TypeKind_Char8 = 0x0004, +RDI_TypeKind_Char16 = 0x0005, +RDI_TypeKind_Char32 = 0x0006, +RDI_TypeKind_UChar8 = 0x0007, +RDI_TypeKind_UChar16 = 0x0008, +RDI_TypeKind_UChar32 = 0x0009, +RDI_TypeKind_U8 = 0x000A, +RDI_TypeKind_U16 = 0x000B, +RDI_TypeKind_U32 = 0x000C, +RDI_TypeKind_U64 = 0x000D, +RDI_TypeKind_U128 = 0x000E, +RDI_TypeKind_U256 = 0x000F, +RDI_TypeKind_U512 = 0x0010, +RDI_TypeKind_S8 = 0x0011, +RDI_TypeKind_S16 = 0x0012, +RDI_TypeKind_S32 = 0x0013, +RDI_TypeKind_S64 = 0x0014, +RDI_TypeKind_S128 = 0x0015, +RDI_TypeKind_S256 = 0x0016, +RDI_TypeKind_S512 = 0x0017, +RDI_TypeKind_Bool = 0x0018, +RDI_TypeKind_BF16 = 0x0019, +RDI_TypeKind_F16 = 0x001A, +RDI_TypeKind_F32 = 0x001B, +RDI_TypeKind_F32PP = 0x001C, +RDI_TypeKind_F48 = 0x001D, +RDI_TypeKind_F64 = 0x001E, +RDI_TypeKind_F80 = 0x001F, +RDI_TypeKind_F96 = 0x0020, +RDI_TypeKind_F128 = 0x0021, +RDI_TypeKind_ComplexF32 = 0x0022, +RDI_TypeKind_ComplexF64 = 0x0023, +RDI_TypeKind_ComplexF80 = 0x0024, +RDI_TypeKind_ComplexF128 = 0x0025, +RDI_TypeKind_Decimal32 = 0x0026, +RDI_TypeKind_Decimal64 = 0x0027, +RDI_TypeKind_Decimal128 = 0x0028, +RDI_TypeKind_Modifier = 0x1000, +RDI_TypeKind_Ptr = 0x1001, +RDI_TypeKind_LRef = 0x1002, +RDI_TypeKind_RRef = 0x1003, +RDI_TypeKind_Array = 0x1004, +RDI_TypeKind_Function = 0x1005, +RDI_TypeKind_Method = 0x1006, +RDI_TypeKind_MemberPtr = 0x1007, +RDI_TypeKind_Struct = 0x2000, +RDI_TypeKind_Class = 0x2001, +RDI_TypeKind_Union = 0x2002, +RDI_TypeKind_Enum = 0x2003, +RDI_TypeKind_Alias = 0x2004, +RDI_TypeKind_IncompleteStruct = 0x2005, +RDI_TypeKind_IncompleteUnion = 0x2006, +RDI_TypeKind_IncompleteClass = 0x2007, +RDI_TypeKind_IncompleteEnum = 0x2008, +RDI_TypeKind_Bitfield = 0xF000, +RDI_TypeKind_Variadic = 0xF001, +RDI_TypeKind_Count = 0xF002, +RDI_TypeKind_FirstBuiltIn = RDI_TypeKind_Void, +RDI_TypeKind_LastBuiltIn = RDI_TypeKind_Decimal128, +RDI_TypeKind_FirstConstructed = RDI_TypeKind_Modifier, +RDI_TypeKind_LastConstructed = RDI_TypeKind_MemberPtr, +RDI_TypeKind_FirstUserDefined = RDI_TypeKind_Struct, +RDI_TypeKind_LastRecord = RDI_TypeKind_Union, +RDI_TypeKind_FirstIncomplete = RDI_TypeKind_IncompleteStruct, +RDI_TypeKind_LastIncomplete = RDI_TypeKind_IncompleteEnum, +RDI_TypeKind_FirstRecord = RDI_TypeKind_Struct, +RDI_TypeKind_LastUserDefined = RDI_TypeKind_IncompleteEnum, } RDI_TypeKindEnum; typedef RDI_U16 RDI_TypeModifierFlags; typedef enum RDI_TypeModifierFlagsEnum { - RDI_TypeModifierFlag_Const = 1<<0, - RDI_TypeModifierFlag_Volatile = 1<<1, - RDI_TypeModifierFlag_Restrict = 1<<2, +RDI_TypeModifierFlag_Const = 1<<0, +RDI_TypeModifierFlag_Volatile = 1<<1, +RDI_TypeModifierFlag_Restrict = 1<<2, } RDI_TypeModifierFlagsEnum; typedef RDI_U32 RDI_UDTFlags; typedef enum RDI_UDTFlagsEnum { - RDI_UDTFlag_EnumMembers = 1<<0, +RDI_UDTFlag_EnumMembers = 1<<0, } RDI_UDTFlagsEnum; typedef RDI_U16 RDI_MemberKind; typedef enum RDI_MemberKindEnum { - RDI_MemberKind_NULL = 0x0000, - RDI_MemberKind_DataField = 0x0001, - RDI_MemberKind_StaticData = 0x0002, - RDI_MemberKind_Method = 0x0100, - RDI_MemberKind_StaticMethod = 0x0101, - RDI_MemberKind_VirtualMethod = 0x0102, - RDI_MemberKind_VTablePtr = 0x0200, - RDI_MemberKind_Base = 0x0201, - RDI_MemberKind_VirtualBase = 0x0202, - RDI_MemberKind_NestedType = 0x0300, +RDI_MemberKind_NULL = 0x0000, +RDI_MemberKind_DataField = 0x0001, +RDI_MemberKind_StaticData = 0x0002, +RDI_MemberKind_Method = 0x0100, +RDI_MemberKind_StaticMethod = 0x0101, +RDI_MemberKind_VirtualMethod = 0x0102, +RDI_MemberKind_VTablePtr = 0x0200, +RDI_MemberKind_Base = 0x0201, +RDI_MemberKind_VirtualBase = 0x0202, +RDI_MemberKind_NestedType = 0x0300, } RDI_MemberKindEnum; +typedef RDI_U8 RDI_ContainerKind; +typedef enum RDI_ContainerKindEnum +{ +RDI_ContainerKind_Type = 0x0, +RDI_ContainerKind_Scope = 0x1, +RDI_ContainerKind_Namespace = 0x2, +} RDI_ContainerKindEnum; + +typedef RDI_U32 RDI_ContainerFlags; +typedef enum RDI_ContainerFlagsEnum +{ +RDI_ContainerFlag_External = 1<<8, +RDI_ContainerFlag_KindMask = 0xff, +} RDI_ContainerFlagsEnum; + typedef RDI_U32 RDI_LinkFlags; typedef enum RDI_LinkFlagsEnum { - RDI_LinkFlag_External = 1<<0, - RDI_LinkFlag_TypeScoped = 1<<1, - RDI_LinkFlag_ProcScoped = 1<<2, +RDI_LinkFlag_External = 1<<0, +RDI_LinkFlag_TypeScoped = 1<<1, +RDI_LinkFlag_ProcScoped = 1<<2, } RDI_LinkFlagsEnum; typedef RDI_U32 RDI_LocalKind; typedef enum RDI_LocalKindEnum { - RDI_LocalKind_NULL = 0x0, - RDI_LocalKind_Parameter = 0x1, - RDI_LocalKind_Variable = 0x2, +RDI_LocalKind_NULL = 0x0, +RDI_LocalKind_Parameter = 0x1, +RDI_LocalKind_Variable = 0x2, } RDI_LocalKindEnum; typedef RDI_U8 RDI_LocationKind; typedef enum RDI_LocationKindEnum { - RDI_LocationKind_NULL = 0x0, - RDI_LocationKind_AddrBytecodeStream = 0x1, - RDI_LocationKind_ValBytecodeStream = 0x2, - RDI_LocationKind_AddrRegPlusU16 = 0x3, - RDI_LocationKind_AddrAddrRegPlusU16 = 0x4, - RDI_LocationKind_ValReg = 0x5, +RDI_LocationKind_NULL = 0x0, +RDI_LocationKind_AddrBytecodeStream = 0x1, +RDI_LocationKind_ValBytecodeStream = 0x2, +RDI_LocationKind_AddrRegPlusU16 = 0x3, +RDI_LocationKind_AddrAddrRegPlusU16 = 0x4, +RDI_LocationKind_ValReg = 0x5, } RDI_LocationKindEnum; typedef RDI_U8 RDI_EvalOp; typedef enum RDI_EvalOpEnum { - RDI_EvalOp_Stop = 0, - RDI_EvalOp_Noop = 1, - RDI_EvalOp_Cond = 2, - RDI_EvalOp_Skip = 3, - RDI_EvalOp_MemRead = 4, - RDI_EvalOp_RegRead = 5, - RDI_EvalOp_RegReadDyn = 6, - RDI_EvalOp_FrameOff = 7, - RDI_EvalOp_ModuleOff = 8, - RDI_EvalOp_TLSOff = 9, - RDI_EvalOp_ObjectOff = 10, - RDI_EvalOp_CFA = 11, - RDI_EvalOp_ConstU8 = 12, - RDI_EvalOp_ConstU16 = 13, - RDI_EvalOp_ConstU32 = 14, - RDI_EvalOp_ConstU64 = 15, - RDI_EvalOp_ConstU128 = 16, - RDI_EvalOp_ConstString = 17, - RDI_EvalOp_Abs = 18, - RDI_EvalOp_Neg = 19, - RDI_EvalOp_Add = 20, - RDI_EvalOp_Sub = 21, - RDI_EvalOp_Mul = 22, - RDI_EvalOp_Div = 23, - RDI_EvalOp_Mod = 24, - RDI_EvalOp_LShift = 25, - RDI_EvalOp_RShift = 26, - RDI_EvalOp_BitAnd = 27, - RDI_EvalOp_BitOr = 28, - RDI_EvalOp_BitXor = 29, - RDI_EvalOp_BitNot = 30, - RDI_EvalOp_LogAnd = 31, - RDI_EvalOp_LogOr = 32, - RDI_EvalOp_LogNot = 33, - RDI_EvalOp_EqEq = 34, - RDI_EvalOp_NtEq = 35, - RDI_EvalOp_LsEq = 36, - RDI_EvalOp_GrEq = 37, - RDI_EvalOp_Less = 38, - RDI_EvalOp_Grtr = 39, - RDI_EvalOp_Trunc = 40, - RDI_EvalOp_TruncSigned = 41, - RDI_EvalOp_Convert = 42, - RDI_EvalOp_Pick = 43, - RDI_EvalOp_Pop = 44, - RDI_EvalOp_Insert = 45, - RDI_EvalOp_ValueRead = 46, - RDI_EvalOp_ByteSwap = 47, - RDI_EvalOp_CallSiteValue = 48, - RDI_EvalOp_PartialValue = 49, - RDI_EvalOp_PartialValueBit = 50, - RDI_EvalOp_Swap = 51, - RDI_EvalOp_PushCfa = 52, - RDI_EvalOp_COUNT = 53, +RDI_EvalOp_Stop = 0, +RDI_EvalOp_Noop = 1, +RDI_EvalOp_Cond = 2, +RDI_EvalOp_Skip = 3, +RDI_EvalOp_MemRead = 4, +RDI_EvalOp_RegRead = 5, +RDI_EvalOp_RegReadDyn = 6, +RDI_EvalOp_FrameOff = 7, +RDI_EvalOp_ModuleOff = 8, +RDI_EvalOp_TLSOff = 9, +RDI_EvalOp_ObjectOff = 10, +RDI_EvalOp_CFA = 11, +RDI_EvalOp_ConstU8 = 12, +RDI_EvalOp_ConstU16 = 13, +RDI_EvalOp_ConstU32 = 14, +RDI_EvalOp_ConstU64 = 15, +RDI_EvalOp_ConstU128 = 16, +RDI_EvalOp_ConstString = 17, +RDI_EvalOp_Abs = 18, +RDI_EvalOp_Neg = 19, +RDI_EvalOp_Add = 20, +RDI_EvalOp_Sub = 21, +RDI_EvalOp_Mul = 22, +RDI_EvalOp_Div = 23, +RDI_EvalOp_Mod = 24, +RDI_EvalOp_LShift = 25, +RDI_EvalOp_RShift = 26, +RDI_EvalOp_BitAnd = 27, +RDI_EvalOp_BitOr = 28, +RDI_EvalOp_BitXor = 29, +RDI_EvalOp_BitNot = 30, +RDI_EvalOp_LogAnd = 31, +RDI_EvalOp_LogOr = 32, +RDI_EvalOp_LogNot = 33, +RDI_EvalOp_EqEq = 34, +RDI_EvalOp_NtEq = 35, +RDI_EvalOp_LsEq = 36, +RDI_EvalOp_GrEq = 37, +RDI_EvalOp_Less = 38, +RDI_EvalOp_Grtr = 39, +RDI_EvalOp_Trunc = 40, +RDI_EvalOp_TruncSigned = 41, +RDI_EvalOp_Convert = 42, +RDI_EvalOp_Pick = 43, +RDI_EvalOp_Pop = 44, +RDI_EvalOp_Insert = 45, +RDI_EvalOp_ValueRead = 46, +RDI_EvalOp_ByteSwap = 47, +RDI_EvalOp_CallSiteValue = 48, +RDI_EvalOp_PartialValue = 49, +RDI_EvalOp_PartialValueBit = 50, +RDI_EvalOp_Swap = 51, +RDI_EvalOp_PushCfa = 52, +RDI_EvalOp_COUNT = 53, } RDI_EvalOpEnum; typedef RDI_U8 RDI_EvalTypeGroup; typedef enum RDI_EvalTypeGroupEnum { - RDI_EvalTypeGroup_Other = 0, - RDI_EvalTypeGroup_U = 1, - RDI_EvalTypeGroup_S = 2, - RDI_EvalTypeGroup_F32 = 3, - RDI_EvalTypeGroup_F64 = 4, - RDI_EvalTypeGroup_F80 = 5, - RDI_EvalTypeGroup_F128 = 6, - RDI_EvalTypeGroup_COUNT = 7, +RDI_EvalTypeGroup_Other = 0, +RDI_EvalTypeGroup_U = 1, +RDI_EvalTypeGroup_S = 2, +RDI_EvalTypeGroup_F32 = 3, +RDI_EvalTypeGroup_F64 = 4, +RDI_EvalTypeGroup_F80 = 5, +RDI_EvalTypeGroup_F128 = 6, +RDI_EvalTypeGroup_COUNT = 7, } RDI_EvalTypeGroupEnum; typedef RDI_U8 RDI_EvalConversionKind; typedef enum RDI_EvalConversionKindEnum { - RDI_EvalConversionKind_Noop = 0, - RDI_EvalConversionKind_Legal = 1, - RDI_EvalConversionKind_OtherToOther = 2, - RDI_EvalConversionKind_ToOther = 3, - RDI_EvalConversionKind_FromOther = 4, - RDI_EvalConversionKind_COUNT = 5, +RDI_EvalConversionKind_Noop = 0, +RDI_EvalConversionKind_Legal = 1, +RDI_EvalConversionKind_OtherToOther = 2, +RDI_EvalConversionKind_ToOther = 3, +RDI_EvalConversionKind_FromOther = 4, +RDI_EvalConversionKind_COUNT = 5, } RDI_EvalConversionKindEnum; typedef RDI_U32 RDI_NameMapKind; typedef enum RDI_NameMapKindEnum { - RDI_NameMapKind_NULL = 0, - RDI_NameMapKind_GlobalVariables = 1, - RDI_NameMapKind_ThreadVariables = 2, - RDI_NameMapKind_Constants = 3, - RDI_NameMapKind_Procedures = 4, - RDI_NameMapKind_Types = 5, - RDI_NameMapKind_LinkNameProcedures = 6, - RDI_NameMapKind_NormalSourcePaths = 7, - RDI_NameMapKind_COUNT = 8, +RDI_NameMapKind_NULL = 0, +RDI_NameMapKind_GlobalVariables = 1, +RDI_NameMapKind_ThreadVariables = 2, +RDI_NameMapKind_Constants = 3, +RDI_NameMapKind_Procedures = 4, +RDI_NameMapKind_Types = 5, +RDI_NameMapKind_LinkNameProcedures = 6, +RDI_NameMapKind_NormalSourcePaths = 7, +RDI_NameMapKind_COUNT = 8, } RDI_NameMapKindEnum; #define RDI_Header_XList \ @@ -524,6 +540,7 @@ X(SourceLineMapRanges, source_line_map_ranges, RDI_U32)\ X(SourceLineMapVOffs, source_line_map_voffs, RDI_U64)\ X(Units, units, RDI_Unit)\ X(UnitVMap, unit_vmap, RDI_VMapEntry)\ +X(Namespaces, namespaces, RDI_Namespace)\ X(TypeNodes, type_nodes, RDI_TypeNode)\ X(UDTs, udts, RDI_UDT)\ X(Members, members, RDI_Member)\ @@ -875,6 +892,11 @@ X(AddrRegPlusU16)\ X(AddrAddrRegPlusU16)\ X(ValReg)\ +#define RDI_Namespace_XList \ +X(RDI_U32, name_string_idx)\ +X(RDI_ContainerFlags, container_flags)\ +X(RDI_U32, container_idx)\ + #define RDI_GlobalVariable_XList \ X(RDI_U32, name_string_idx)\ X(RDI_LinkFlags, link_flags)\ @@ -1052,6 +1074,7 @@ typedef struct RDI_U32_SourceLineMapNumbers { RDI_U32 v; } RDI_U32_Source typedef struct RDI_U32_SourceLineMapRanges { RDI_U32 v; } RDI_U32_SourceLineMapRanges; typedef struct RDI_U32_SourceLineMapVOffs { RDI_U32 v; } RDI_U32_SourceLineMapVOffs; typedef struct RDI_U32_Units { RDI_U32 v; } RDI_U32_Units; +typedef struct RDI_U32_Namespaces { RDI_U32 v; } RDI_U32_Namespaces; typedef struct RDI_U32_TypeNodes { RDI_U32 v; } RDI_U32_TypeNodes; typedef struct RDI_U32_UDTs { RDI_U32 v; } RDI_U32_UDTs; typedef struct RDI_U32_Members { RDI_U32 v; } RDI_U32_Members; @@ -1092,6 +1115,7 @@ typedef RDI_U32_Table RDI_U32_SourceLineMapNumbers; typedef RDI_U32_Table RDI_U32_SourceLineMapRanges; typedef RDI_U32_Table RDI_U32_SourceLineMapVOffs; typedef RDI_U32_Table RDI_U32_Units; +typedef RDI_U32_Table RDI_U32_Namespaces; typedef RDI_U32_Table RDI_U32_TypeNodes; typedef RDI_U32_Table RDI_U32_UDTs; typedef RDI_U32_Table RDI_U32_Members; @@ -1126,126 +1150,126 @@ typedef RDI_U32_Table RDI_U32_NameMapNodes; typedef struct RDI_Header RDI_Header; struct RDI_Header { - RDI_U64 magic; - RDI_U32 encoding_version; - RDI_U32 data_section_off; - RDI_U32 data_section_count; +RDI_U64 magic; +RDI_U32 encoding_version; +RDI_U32 data_section_off; +RDI_U32 data_section_count; }; typedef struct RDI_Section RDI_Section; struct RDI_Section { - RDI_SectionEncoding encoding; - RDI_U32 pad; - RDI_U64 off; - RDI_U64 encoded_size; - RDI_U64 unpacked_size; +RDI_SectionEncoding encoding; +RDI_U32 pad; +RDI_U64 off; +RDI_U64 encoded_size; +RDI_U64 unpacked_size; }; typedef struct RDI_VMapEntry RDI_VMapEntry; struct RDI_VMapEntry { - RDI_U64 voff; - RDI_U64 idx; +RDI_U64 voff; +RDI_U64 idx; }; typedef struct RDI_TopLevelInfo RDI_TopLevelInfo; struct RDI_TopLevelInfo { - RDI_Arch arch; - RDI_U32 exe_name_string_idx; - RDI_U64 exe_hash; - RDI_U64 voff_max; - RDI_GUID guid; - RDI_U32 producer_name_string_idx; +RDI_Arch arch; +RDI_U32 exe_name_string_idx; +RDI_U64 exe_hash; +RDI_U64 voff_max; +RDI_GUID guid; +RDI_U32 producer_name_string_idx; }; typedef struct RDI_BinarySection RDI_BinarySection; struct RDI_BinarySection { - RDI_U32 name_string_idx; - RDI_BinarySectionFlags flags; - RDI_U64 voff_first; - RDI_U64 voff_opl; - RDI_U64 foff_first; - RDI_U64 foff_opl; +RDI_U32 name_string_idx; +RDI_BinarySectionFlags flags; +RDI_U64 voff_first; +RDI_U64 voff_opl; +RDI_U64 foff_first; +RDI_U64 foff_opl; }; typedef struct RDI_FilePathNode RDI_FilePathNode; struct RDI_FilePathNode { - RDI_U32 name_string_idx; - RDI_U32 parent_path_node; - RDI_U32 first_child; - RDI_U32 next_sibling; - RDI_U32 source_file_idx; +RDI_U32 name_string_idx; +RDI_U32 parent_path_node; +RDI_U32 first_child; +RDI_U32 next_sibling; +RDI_U32 source_file_idx; }; typedef struct RDI_SourceFile RDI_SourceFile; struct RDI_SourceFile { - RDI_U32 file_path_node_idx; - RDI_U32 normal_full_path_string_idx; - RDI_U32 source_line_map_idx; - RDI_ChecksumKind checksum_kind; - RDI_U32 checksum_idx; +RDI_U32 file_path_node_idx; +RDI_U32 normal_full_path_string_idx; +RDI_U32 source_line_map_idx; +RDI_ChecksumKind checksum_kind; +RDI_U32 checksum_idx; }; typedef struct RDI_Unit RDI_Unit; struct RDI_Unit { - RDI_U32 unit_name_string_idx; - RDI_U32 compiler_name_string_idx; - RDI_U32 source_file_path_node; - RDI_U32 object_file_path_node; - RDI_U32 archive_file_path_node; - RDI_U32 build_path_node; - RDI_Language language; - RDI_U32 line_table_idx; +RDI_U32 unit_name_string_idx; +RDI_U32 compiler_name_string_idx; +RDI_U32 source_file_path_node; +RDI_U32 object_file_path_node; +RDI_U32 archive_file_path_node; +RDI_U32 build_path_node; +RDI_Language language; +RDI_U32 line_table_idx; }; typedef struct RDI_LineTable RDI_LineTable; struct RDI_LineTable { - RDI_U32 voffs_base_idx; - RDI_U32 lines_base_idx; - RDI_U32 cols_base_idx; - RDI_U32 lines_count; - RDI_U32 cols_count; +RDI_U32 voffs_base_idx; +RDI_U32 lines_base_idx; +RDI_U32 cols_base_idx; +RDI_U32 lines_count; +RDI_U32 cols_count; }; typedef struct RDI_Line RDI_Line; struct RDI_Line { - RDI_U32 file_idx; - RDI_U32 line_num; +RDI_U32 file_idx; +RDI_U32 line_num; }; typedef struct RDI_Column RDI_Column; struct RDI_Column { - RDI_U16 col_first; - RDI_U16 col_opl; +RDI_U16 col_first; +RDI_U16 col_opl; }; typedef struct RDI_SourceLineMap RDI_SourceLineMap; struct RDI_SourceLineMap { - RDI_U32 line_count; - RDI_U32 voff_count; - RDI_U32 line_map_nums_base_idx; - RDI_U32 line_map_range_base_idx; - RDI_U32 line_map_voff_base_idx; +RDI_U32 line_count; +RDI_U32 voff_count; +RDI_U32 line_map_nums_base_idx; +RDI_U32 line_map_range_base_idx; +RDI_U32 line_map_voff_base_idx; }; typedef struct RDI_TypeNode RDI_TypeNode; struct RDI_TypeNode { - RDI_TypeKind kind; - RDI_U16 flags; - RDI_U32 byte_size; - - union +RDI_TypeKind kind; +RDI_U16 flags; +RDI_U32 byte_size; + + union { // kind is 'built-in' struct @@ -1292,159 +1316,167 @@ struct RDI_TypeNode typedef struct RDI_UDT RDI_UDT; struct RDI_UDT { - RDI_U32 self_type_idx; - RDI_UDTFlags flags; - RDI_U32 member_first; - RDI_U32 member_count; - RDI_U32 file_idx; - RDI_U32 line; - RDI_U32 col; +RDI_U32 self_type_idx; +RDI_UDTFlags flags; +RDI_U32 member_first; +RDI_U32 member_count; +RDI_U32 file_idx; +RDI_U32 line; +RDI_U32 col; }; typedef struct RDI_Member RDI_Member; struct RDI_Member { - RDI_MemberKind kind; - RDI_U16 pad; - RDI_U32 name_string_idx; - RDI_U32 type_idx; - RDI_U32 off; +RDI_MemberKind kind; +RDI_U16 pad; +RDI_U32 name_string_idx; +RDI_U32 type_idx; +RDI_U32 off; }; typedef struct RDI_EnumMember RDI_EnumMember; struct RDI_EnumMember { - RDI_U32 name_string_idx; - RDI_U32 pad; - RDI_U64 val; +RDI_U32 name_string_idx; +RDI_U32 pad; +RDI_U64 val; +}; + +typedef struct RDI_Namespace RDI_Namespace; +struct RDI_Namespace +{ +RDI_U32 name_string_idx; +RDI_ContainerFlags container_flags; +RDI_U32 container_idx; }; typedef struct RDI_GlobalVariable RDI_GlobalVariable; struct RDI_GlobalVariable { - RDI_U32 name_string_idx; - RDI_LinkFlags link_flags; - RDI_U64 voff; - RDI_U32 type_idx; - RDI_U32 container_idx; +RDI_U32 name_string_idx; +RDI_LinkFlags link_flags; +RDI_U64 voff; +RDI_U32 type_idx; +RDI_U32 container_idx; }; typedef struct RDI_ThreadVariable RDI_ThreadVariable; struct RDI_ThreadVariable { - RDI_U32 name_string_idx; - RDI_LinkFlags link_flags; - RDI_U32 tls_off; - RDI_U32 type_idx; - RDI_U32 container_idx; +RDI_U32 name_string_idx; +RDI_LinkFlags link_flags; +RDI_U32 tls_off; +RDI_U32 type_idx; +RDI_U32 container_idx; }; typedef struct RDI_Constant RDI_Constant; struct RDI_Constant { - RDI_U32 name_string_idx; - RDI_U32 type_idx; - RDI_U32 constant_value_idx; +RDI_U32 name_string_idx; +RDI_U32 type_idx; +RDI_U32 constant_value_idx; }; typedef struct RDI_Procedure RDI_Procedure; struct RDI_Procedure { - RDI_U32 name_string_idx; - RDI_U32 link_name_string_idx; - RDI_LinkFlags link_flags; - RDI_U32 type_idx; - RDI_U32 root_scope_idx; - RDI_U32 container_idx; - RDI_U32 frame_base_location_first; - RDI_U32 frame_base_location_opl; +RDI_U32 name_string_idx; +RDI_U32 link_name_string_idx; +RDI_LinkFlags link_flags; +RDI_U32 type_idx; +RDI_U32 root_scope_idx; +RDI_U32 container_idx; +RDI_U32 frame_base_location_first; +RDI_U32 frame_base_location_opl; }; typedef struct RDI_Scope RDI_Scope; struct RDI_Scope { - RDI_U32 proc_idx; - RDI_U32 parent_scope_idx; - RDI_U32 first_child_scope_idx; - RDI_U32 next_sibling_scope_idx; - RDI_U32 voff_range_first; - RDI_U32 voff_range_opl; - RDI_U32 local_first; - RDI_U32 local_count; - RDI_U32 inline_site_idx; +RDI_U32 proc_idx; +RDI_U32 parent_scope_idx; +RDI_U32 first_child_scope_idx; +RDI_U32 next_sibling_scope_idx; +RDI_U32 voff_range_first; +RDI_U32 voff_range_opl; +RDI_U32 local_first; +RDI_U32 local_count; +RDI_U32 inline_site_idx; }; typedef struct RDI_InlineSite RDI_InlineSite; struct RDI_InlineSite { - RDI_U32 name_string_idx; - RDI_U32 type_idx; - RDI_U32 owner_type_idx; - RDI_U32 line_table_idx; +RDI_U32 name_string_idx; +RDI_U32 type_idx; +RDI_U32 owner_type_idx; +RDI_U32 line_table_idx; }; typedef struct RDI_Local RDI_Local; struct RDI_Local { - RDI_LocalKind kind; - RDI_U32 name_string_idx; - RDI_U32 type_idx; - RDI_U32 pad; - RDI_U32 location_first; - RDI_U32 location_opl; +RDI_LocalKind kind; +RDI_U32 name_string_idx; +RDI_U32 type_idx; +RDI_U32 pad; +RDI_U32 location_first; +RDI_U32 location_opl; }; typedef struct RDI_LocationBlock RDI_LocationBlock; struct RDI_LocationBlock { - RDI_U32 scope_off_first; - RDI_U32 scope_off_opl; - RDI_U32 location_data_off; +RDI_U32 scope_off_first; +RDI_U32 scope_off_opl; +RDI_U32 location_data_off; }; typedef struct RDI_LocationBytecodeStream RDI_LocationBytecodeStream; struct RDI_LocationBytecodeStream { - RDI_LocationKind kind; +RDI_LocationKind kind; }; typedef struct RDI_LocationRegPlusU16 RDI_LocationRegPlusU16; struct RDI_LocationRegPlusU16 { - RDI_LocationKind kind; - RDI_RegCode reg_code; - RDI_U16 offset; +RDI_LocationKind kind; +RDI_RegCode reg_code; +RDI_U16 offset; }; typedef struct RDI_LocationReg RDI_LocationReg; struct RDI_LocationReg { - RDI_LocationKind kind; - RDI_RegCode reg_code; +RDI_LocationKind kind; +RDI_RegCode reg_code; }; typedef struct RDI_NameMap RDI_NameMap; struct RDI_NameMap { - RDI_U32 bucket_base_idx; - RDI_U32 node_base_idx; - RDI_U32 bucket_count; - RDI_U32 node_count; +RDI_U32 bucket_base_idx; +RDI_U32 node_base_idx; +RDI_U32 bucket_count; +RDI_U32 node_count; }; typedef struct RDI_NameMapBucket RDI_NameMapBucket; struct RDI_NameMapBucket { - RDI_U32 first_node; - RDI_U32 node_count; +RDI_U32 first_node; +RDI_U32 node_count; }; typedef struct RDI_NameMapNode RDI_NameMapNode; struct RDI_NameMapNode { - RDI_U32 string_idx; - RDI_U32 match_count; - RDI_U32 match_idx_or_idx_run_first; +RDI_U32 string_idx; +RDI_U32 match_count; +RDI_U32 match_idx_or_idx_run_first; }; typedef RDI_TopLevelInfo RDI_SectionElementType_TopLevelInfo; @@ -1464,6 +1496,7 @@ typedef RDI_U32 RDI_SectionElementType_SourceLineMapRan typedef RDI_U64 RDI_SectionElementType_SourceLineMapVOffs; typedef RDI_Unit RDI_SectionElementType_Units; typedef RDI_VMapEntry RDI_SectionElementType_UnitVMap; +typedef RDI_Namespace RDI_SectionElementType_Namespaces; typedef RDI_TypeNode RDI_SectionElementType_TypeNodes; typedef RDI_UDT RDI_SectionElementType_UDTs; typedef RDI_Member RDI_SectionElementType_Members; @@ -1498,7 +1531,7 @@ RDI_PROC RDI_EvalConversionKind rdi_eval_conversion_kind_from_typegroups(RDI_Eva RDI_PROC RDI_S32 rdi_eval_op_typegroup_are_compatible(RDI_EvalOp op, RDI_EvalTypeGroup group); RDI_PROC RDI_U8 *rdi_explanation_string_from_eval_conversion_kind(RDI_EvalConversionKind kind, RDI_U64 *size_out); -extern RDI_U16 rdi_section_element_size_table[44]; +extern RDI_U16 rdi_section_element_size_table[45]; extern RDI_U16 rdi_eval_op_ctrlbits_table[54]; #endif // RDI_H diff --git a/src/lib_rdi_make/rdi_make.c b/src/lib_rdi_make/rdi_make.c index 6537fca1..413033aa 100644 --- a/src/lib_rdi_make/rdi_make.c +++ b/src/lib_rdi_make/rdi_make.c @@ -806,6 +806,29 @@ rdim_unit_chunk_list_concat_in_place(RDIM_UnitChunkList *dst, RDIM_UnitChunkList RDIM_IdxedChunkListConcatInPlace(RDIM_UnitChunkNode, dst, to_push); } +//////////////////////////////// +//~ rjf: [Building] Namespace Info Building + +RDI_PROC RDIM_Namespace * +rdim_namespace_chunk_list_push(RDIM_Arena *arena, RDIM_NamespaceChunkList *list, RDI_U64 cap) +{ + RDIM_IdxedChunkListPush(arena, list, RDIM_NamespaceChunkNode, RDIM_Namespace, cap, result); + return result; +} + +RDI_PROC RDI_U64 +rdim_idx_from_namespace(RDIM_Namespace *ns) +{ + RDIM_IdxedChunkListElementGetIdx(ns, idx); + return idx; +} + +RDI_PROC void +rdim_namespace_chunk_list_concat_in_place(RDIM_NamespaceChunkList *dst, RDIM_NamespaceChunkList *to_push) +{ + RDIM_IdxedChunkListConcatInPlace(RDIM_NamespaceChunkNode, dst, to_push); +} + //////////////////////////////// //~ rjf: [Building] Type Info Building @@ -2162,6 +2185,7 @@ rdim_serialized_section_bundle_from_bake_results(RDIM_BakeResults *results) bundle.sections[RDI_SectionKind_SourceLineMapVOffs] = rdim_serialized_section_make_unpacked_array(results->src_files.source_line_map_voffs, results->src_files.source_line_map_voffs_count); bundle.sections[RDI_SectionKind_Units] = rdim_serialized_section_make_unpacked_array(results->units.units, results->units.units_count); bundle.sections[RDI_SectionKind_UnitVMap] = rdim_serialized_section_make_unpacked_array(results->unit_vmap.vmap.vmap, results->unit_vmap.vmap.count); + bundle.sections[RDI_SectionKind_Namespaces] = rdim_serialized_section_make_unpacked_array(results->namespaces.namespaces, results->namespaces.namespaces_count); bundle.sections[RDI_SectionKind_TypeNodes] = rdim_serialized_section_make_unpacked_array(results->type_nodes.type_nodes, results->type_nodes.type_nodes_count); bundle.sections[RDI_SectionKind_UDTs] = rdim_serialized_section_make_unpacked_array(results->udts.udts, results->udts.udts_count); bundle.sections[RDI_SectionKind_Members] = rdim_serialized_section_make_unpacked_array(results->udts.members, results->udts.members_count); diff --git a/src/lib_rdi_make/rdi_make.h b/src/lib_rdi_make/rdi_make.h index 70a82105..6ef897af 100644 --- a/src/lib_rdi_make/rdi_make.h +++ b/src/lib_rdi_make/rdi_make.h @@ -665,6 +665,38 @@ struct RDIM_UnitChunkList RDI_U64 total_count; }; +//////////////////////////////// +//~ rjf: Namespace Types + +typedef struct RDIM_Namespace RDIM_Namespace; +struct RDIM_Namespace +{ + struct RDIM_NamespaceChunkNode *chunk; + RDIM_Namespace *parent_namespace; + struct RDIM_Scope *parent_scope; + struct RDIM_UDT *parent_udt; + RDIM_String8 name; +}; + +typedef struct RDIM_NamespaceChunkNode RDIM_NamespaceChunkNode; +struct RDIM_NamespaceChunkNode +{ + RDIM_NamespaceChunkNode *next; + RDIM_Namespace *v; + RDI_U64 count; + RDI_U64 cap; + RDI_U64 base_idx; +}; + +typedef struct RDIM_NamespaceChunkList RDIM_NamespaceChunkList; +struct RDIM_NamespaceChunkList +{ + RDIM_NamespaceChunkNode *first; + RDIM_NamespaceChunkNode *last; + RDI_U64 chunk_count; + RDI_U64 total_count; +}; + //////////////////////////////// //~ rjf: Type System Node Types @@ -1010,6 +1042,7 @@ struct RDIM_BakeParams RDIM_TopLevelInfo top_level_info; RDIM_BinarySectionList binary_sections; RDIM_UnitChunkList units; + RDIM_NamespaceChunkList namespaces; RDIM_TypeChunkList types; RDIM_UDTChunkList udts; RDIM_SrcFileChunkList src_files; @@ -1349,6 +1382,13 @@ struct RDIM_LineTableBakeResult RDI_U64 line_table_columns_count; }; +typedef struct RDIM_NamespaceBakeResult RDIM_NamespaceBakeResult; +struct RDIM_NamespaceBakeResult +{ + RDI_Namespace *namespaces; + RDI_U64 namespaces_count; +}; + typedef struct RDIM_TypeNodeBakeResult RDIM_TypeNodeBakeResult; struct RDIM_TypeNodeBakeResult { @@ -1492,6 +1532,7 @@ struct RDIM_BakeResults RDIM_SrcFileBakeResult src_files; RDIM_ChecksumBakeResult checksums; RDIM_LineTableBakeResult line_tables; + RDIM_NamespaceBakeResult namespaces; RDIM_TypeNodeBakeResult type_nodes; RDIM_UDTBakeResult udts; RDIM_GlobalVariableBakeResult global_variables; @@ -1626,6 +1667,13 @@ RDI_PROC RDIM_Unit *rdim_unit_chunk_list_push(RDIM_Arena *arena, RDIM_UnitChunkL RDI_PROC RDI_U64 rdim_idx_from_unit(RDIM_Unit *unit); RDI_PROC void rdim_unit_chunk_list_concat_in_place(RDIM_UnitChunkList *dst, RDIM_UnitChunkList *to_push); +//////////////////////////////// +//~ rjf: [Building] Namespace Info Building + +RDI_PROC RDIM_Namespace *rdim_namespace_chunk_list_push(RDIM_Arena *arena, RDIM_NamespaceChunkList *list, RDI_U64 cap); +RDI_PROC RDI_U64 rdim_idx_from_namespace(RDIM_Namespace *ns); +RDI_PROC void rdim_namespace_chunk_list_concat_in_place(RDIM_NamespaceChunkList *dst, RDIM_NamespaceChunkList *to_push); + //////////////////////////////// //~ rjf: [Building] Type Info & UDT Building @@ -1757,9 +1805,4 @@ RDI_PROC RDIM_SerializedSection rdim_serialized_section_make_unpacked(void *data RDI_PROC RDIM_SerializedSectionBundle rdim_serialized_section_bundle_from_bake_results(RDIM_BakeResults *results); RDI_PROC RDIM_String8List rdim_file_blobs_from_section_bundle(RDIM_Arena *arena, RDIM_SerializedSectionBundle *bundle); -//////////////////////////////// -//~ rjf: [Serializing] Parsed RDI -> Bake Results - -RDI_PROC RDIM_BakeResults *rdim_bake_results_from_rdi(RDIM_Arena *arena, RDI_Parsed *rdi); - #endif // RDI_MAKE_H diff --git a/src/rdi/rdi.mdesk b/src/rdi/rdi.mdesk index f194532b..32188395 100644 --- a/src/rdi/rdi.mdesk +++ b/src/rdi/rdi.mdesk @@ -77,7 +77,7 @@ ""; "// \"raddbg\\0\\0\""; "#define RDI_MAGIC_CONSTANT 0x0000676264646172"; - "#define RDI_ENCODING_VERSION 18"; + "#define RDI_ENCODING_VERSION 19"; ""; "////////////////////////////////////////////////////////////////"; "//~ Format Types & Functions"; @@ -153,32 +153,33 @@ RDI_SectionTable: {SourceLineMapVOffs source_line_map_voffs RDI_U64 0x000F U32 ""} {Units units RDI_Unit 0x0010 U32 ""} {UnitVMap unit_vmap RDI_VMapEntry 0x0011 - ""} - {TypeNodes type_nodes RDI_TypeNode 0x0012 U32 ""} - {UDTs udts RDI_UDT 0x0013 U32 ""} - {Members members RDI_Member 0x0014 U32 ""} - {EnumMembers enum_members RDI_EnumMember 0x0015 U32 ""} - {GlobalVariables global_variables RDI_GlobalVariable 0x0016 U32 ""} - {GlobalVMap global_vmap RDI_VMapEntry 0x0017 - ""} - {ThreadVariables thread_variables RDI_ThreadVariable 0x0018 U32 ""} - {Constants constants RDI_Constant 0x0019 U32 ""} - {Procedures procedures RDI_Procedure 0x001A U32 ""} - {Scopes scopes RDI_Scope 0x001B U32 ""} - {ScopeVOffData scope_voff_data RDI_U64 0x001C U32 ""} - {ScopeVMap scope_vmap RDI_VMapEntry 0x001D - ""} - {InlineSites inline_sites RDI_InlineSite 0x001E U32 ""} - {Locals locals RDI_Local 0x001F U32 ""} - {LocationBlocks location_blocks RDI_LocationBlock 0x0020 U32 ""} - {LocationData location_data RDI_U8 0x0021 U32 ""} - {ConstantValueData constant_value_data RDI_U8 0x0022 U32 ""} - {ConstantValueTable constant_value_table RDI_U32 0x0023 U32 ""} - {MD5Checksums md5_checksums RDI_MD5 0x0024 U32 ""} - {SHA1Checksums sha1_checksums RDI_SHA1 0x0025 U32 ""} - {SHA256Checksums sha256_checksums RDI_SHA256 0x0026 U32 ""} - {Timestamps timestamps RDI_U64 0x0027 U32 ""} - {NameMaps name_maps RDI_NameMap 0x0028 U32 ""} - {NameMapBuckets name_map_buckets RDI_NameMapBucket 0x0029 U32 ""} - {NameMapNodes name_map_nodes RDI_NameMapNode 0x002A U32 ""} - {COUNT count RDI_U8 0x002B - ""} + {Namespaces namespaces RDI_Namespace 0x0012 U32 ""} + {TypeNodes type_nodes RDI_TypeNode 0x0013 U32 ""} + {UDTs udts RDI_UDT 0x0014 U32 ""} + {Members members RDI_Member 0x0015 U32 ""} + {EnumMembers enum_members RDI_EnumMember 0x0016 U32 ""} + {GlobalVariables global_variables RDI_GlobalVariable 0x0017 U32 ""} + {GlobalVMap global_vmap RDI_VMapEntry 0x0018 - ""} + {ThreadVariables thread_variables RDI_ThreadVariable 0x0019 U32 ""} + {Constants constants RDI_Constant 0x001A U32 ""} + {Procedures procedures RDI_Procedure 0x001B U32 ""} + {Scopes scopes RDI_Scope 0x001C U32 ""} + {ScopeVOffData scope_voff_data RDI_U64 0x001D U32 ""} + {ScopeVMap scope_vmap RDI_VMapEntry 0x001E - ""} + {InlineSites inline_sites RDI_InlineSite 0x001F U32 ""} + {Locals locals RDI_Local 0x0020 U32 ""} + {LocationBlocks location_blocks RDI_LocationBlock 0x0021 U32 ""} + {LocationData location_data RDI_U8 0x0022 U32 ""} + {ConstantValueData constant_value_data RDI_U8 0x0023 U32 ""} + {ConstantValueTable constant_value_table RDI_U32 0x0024 U32 ""} + {MD5Checksums md5_checksums RDI_MD5 0x0025 U32 ""} + {SHA1Checksums sha1_checksums RDI_SHA1 0x0026 U32 ""} + {SHA256Checksums sha256_checksums RDI_SHA256 0x0027 U32 ""} + {Timestamps timestamps RDI_U64 0x0028 U32 ""} + {NameMaps name_maps RDI_NameMap 0x0029 U32 ""} + {NameMapBuckets name_map_buckets RDI_NameMapBucket 0x002A U32 ""} + {NameMapNodes name_map_nodes RDI_NameMapNode 0x002B U32 ""} + {COUNT count RDI_U8 0x002C - ""} } @table(name value) @@ -943,6 +944,20 @@ RDI_EnumMemberTable: //- rjf: tables +@table(name value) +RDI_ContainerKindTable: +{ + {Type 0x0} + {Scope 0x1} + {Namespace 0x2} +} + +@table(name value) +RDI_ContainerFlagTable: +{ + {External `1<<8`} +} + @table(name value) RDI_LinkFlagTable: { @@ -970,6 +985,14 @@ RDI_LocationKindTable: {ValReg 0x5} } +@table(name type desc) +RDI_NamespaceMemberTable: +{ + {name_string_idx RDI_U32 ""} + {container_flags RDI_ContainerFlags ""} + {container_idx RDI_U32 ""} +} + @table(name type desc) RDI_GlobalVariableMemberTable: { @@ -1077,6 +1100,17 @@ RDI_LocationRegMemberTable: //- rjf: enums +@enum(RDI_U8) RDI_ContainerKind: +{ + @expand(RDI_ContainerKindTable a) `$(a.name .. =>20) = $(a.value)` +} + +@enum(RDI_U32) RDI_ContainerFlags: +{ + @expand(RDI_ContainerFlagTable a) `$(a.name .. =>20) = $(a.value)`, + `KindMask = 0xff`, +} + @enum(RDI_U32) RDI_LinkFlags: { @expand(RDI_LinkFlagTable a) `$(a.name .. =>20) = $(a.value)` @@ -1109,6 +1143,11 @@ RDI_LocationRegMemberTable: @expand(RDI_LocationKindTable a) `$(a.name != COUNT -> a.name)`; } +@xlist RDI_Namespace_XList: +{ + @expand(RDI_NamespaceMemberTable a) `$(a.type), $(a.name)` +} + @xlist RDI_GlobalVariable_XList: { @expand(RDI_GlobalVariableMemberTable a) `$(a.type), $(a.name)` @@ -1161,6 +1200,11 @@ RDI_LocationRegMemberTable: //- rjf: structs +@struct RDI_Namespace: +{ + @expand(RDI_NamespaceMemberTable a) `$(a.type) $(a.name)` +} + @struct RDI_GlobalVariable: { @expand(RDI_GlobalVariableMemberTable a) `$(a.type) $(a.name)` diff --git a/src/rdi_make/rdi_make_local.c b/src/rdi_make/rdi_make_local.c index d4790190..3112eb07 100644 --- a/src/rdi_make/rdi_make_local.c +++ b/src/rdi_make/rdi_make_local.c @@ -1110,6 +1110,19 @@ rdim_bake(Arena *arena, RDIM_BakeParams *params) } } + // rjf: push strings from namespaces + ProfScope("namespaces") + { + for EachNode(n, RDIM_NamespaceChunkNode, params->namespaces.first) + { + Rng1U64 range = lane_range(n->count); + for EachInRange(n_idx, range) + { + rdim_bake_string_map_loose_insert(arena, top, lane_map, 4, n->v[n_idx].name); + } + } + } + // rjf: push strings from types ProfScope("types") {