From f7ce1b73bc2d8f98700e19b2f18f04a5ea155bc8 Mon Sep 17 00:00:00 2001 From: Ryan Fleury Date: Sun, 2 Jun 2024 21:22:01 -0700 Subject: [PATCH] introduce separate rdi table element types for isolated line tables & inline sites --- src/lib_rdi_format/rdi_format.h | 22 +++++++++++++++++++ src/rdi_format/rdi_format.mdesk | 38 ++++++++++++++++++++++++++++++--- 2 files changed, 57 insertions(+), 3 deletions(-) diff --git a/src/lib_rdi_format/rdi_format.h b/src/lib_rdi_format/rdi_format.h index ddd1cf7e..ea5a20ce 100644 --- a/src/lib_rdi_format/rdi_format.h +++ b/src/lib_rdi_format/rdi_format.h @@ -797,6 +797,16 @@ RDI_U32 line_info_col_data_idx; RDI_U32 line_info_count; }; +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; +}; + typedef struct RDI_Line RDI_Line; struct RDI_Line { @@ -934,6 +944,18 @@ RDI_U32 static_local_idx_run_first; RDI_U32 static_local_count; }; +typedef struct RDI_InlineSite RDI_InlineSite; +struct RDI_InlineSite +{ +RDI_U32 name_string_idx; +RDI_U32 call_src_file_idx; +RDI_U32 call_line_num; +RDI_U32 call_col_num; +RDI_U32 type_idx; +RDI_U32 owner_type_idx; +RDI_U32 line_table_idx; +}; + typedef struct RDI_Local RDI_Local; struct RDI_Local { diff --git a/src/rdi_format/rdi_format.mdesk b/src/rdi_format/rdi_format.mdesk index 89f284be..578b5a93 100644 --- a/src/rdi_format/rdi_format.mdesk +++ b/src/rdi_format/rdi_format.mdesk @@ -507,6 +507,16 @@ RDI_UnitMemberTable: //////////////////////////////// //~ rjf: Line Info Type Tables +@table(name type desc) +RDI_LineTableMemberTable: +{ + {voffs_base_idx RDI_U32 ""} // U64[lines_count+1] (sorted ranges) + {lines_base_idx RDI_U32 ""} // RDI_Line[lines_count] + {cols_base_idx RDI_U32 ""} // RDI_Column[cols_count] + {lines_count RDI_U32 ""} + {cols_count RDI_U32 ""} +} + @table(name type desc) RDI_LineMemberTable: { @@ -521,6 +531,11 @@ RDI_ColumnMemberTable: {col_opl RDI_U16 ""} } +@struct RDI_LineTable: +{ + @expand(RDI_LineTableMemberTable a) `$(a.type) $(a.name)` +} + @struct RDI_Line: { @expand(RDI_LineMemberTable a) `$(a.type) $(a.name)` @@ -808,9 +823,9 @@ RDI_LocalKindTable: @table(name value) RDI_LocationKindTable: { - {NULL 0x0} - {AddrBytecodeStream 0x1} - {ValBytecodeStream 0x2} + {NULL 0x0} + {AddrBytecodeStream 0x1} + {ValBytecodeStream 0x2} {AddrRegPlusU16 0x3} {AddrAddrRegPlusU16 0x4} {ValReg 0x5} @@ -862,6 +877,18 @@ RDI_ScopeMemberTable: {static_local_count RDI_U32 ""} } +@table(name type desc) +RDI_InlineSiteMemberTable: +{ + {name_string_idx RDI_U32 ""} + {call_src_file_idx RDI_U32 ""} + {call_line_num RDI_U32 ""} + {call_col_num RDI_U32 ""} + {type_idx RDI_U32 ""} + {owner_type_idx RDI_U32 ""} + {line_table_idx RDI_U32 ""} +} + @table(name type desc) RDI_LocalMemberTable: { @@ -953,6 +980,11 @@ RDI_LocationRegMemberTable: @expand(RDI_ScopeMemberTable a) `$(a.type) $(a.name)` } +@struct RDI_InlineSite: +{ + @expand(RDI_InlineSiteMemberTable a) `$(a.type) $(a.name)` +} + @struct RDI_Local: { @expand(RDI_LocalMemberTable a) `$(a.type) $(a.name)`