constant name map

This commit is contained in:
Ryan Fleury
2025-05-29 16:57:08 -07:00
parent ae139fea05
commit 89cc73eca6
4 changed files with 36 additions and 21 deletions
+8 -6
View File
@@ -525,11 +525,12 @@ typedef enum RDI_NameMapKindEnum
RDI_NameMapKind_NULL = 0, RDI_NameMapKind_NULL = 0,
RDI_NameMapKind_GlobalVariables = 1, RDI_NameMapKind_GlobalVariables = 1,
RDI_NameMapKind_ThreadVariables = 2, RDI_NameMapKind_ThreadVariables = 2,
RDI_NameMapKind_Procedures = 3, RDI_NameMapKind_Constants = 3,
RDI_NameMapKind_Types = 4, RDI_NameMapKind_Procedures = 4,
RDI_NameMapKind_LinkNameProcedures = 5, RDI_NameMapKind_Types = 5,
RDI_NameMapKind_NormalSourcePaths = 6, RDI_NameMapKind_LinkNameProcedures = 6,
RDI_NameMapKind_COUNT = 7, RDI_NameMapKind_NormalSourcePaths = 7,
RDI_NameMapKind_COUNT = 8,
} RDI_NameMapKindEnum; } RDI_NameMapKindEnum;
#define RDI_Header_XList \ #define RDI_Header_XList \
@@ -1097,6 +1098,7 @@ X(FromOther)\
X(NULL)\ X(NULL)\
X(GlobalVariables)\ X(GlobalVariables)\
X(ThreadVariables)\ X(ThreadVariables)\
X(Constants)\
X(Procedures)\ X(Procedures)\
X(Types)\ X(Types)\
X(LinkNameProcedures)\ X(LinkNameProcedures)\
@@ -1558,12 +1560,12 @@ typedef RDI_NameMapBucket RDI_SectionElementType_NameMapBuckets;
typedef RDI_NameMapNode RDI_SectionElementType_NameMapNodes; typedef RDI_NameMapNode RDI_SectionElementType_NameMapNodes;
RDI_PROC RDI_U64 rdi_hash(RDI_U8 *ptr, RDI_U64 size); RDI_PROC RDI_U64 rdi_hash(RDI_U8 *ptr, RDI_U64 size);
RDI_PROC RDI_U8 *rdi_string_from_type_kind(RDI_TypeKind kind, RDI_U64 *size_out);
RDI_PROC RDI_U32 rdi_size_from_basic_type_kind(RDI_TypeKind kind); RDI_PROC RDI_U32 rdi_size_from_basic_type_kind(RDI_TypeKind kind);
RDI_PROC RDI_U32 rdi_addr_size_from_arch(RDI_Arch arch); RDI_PROC RDI_U32 rdi_addr_size_from_arch(RDI_Arch arch);
RDI_PROC RDI_EvalConversionKind rdi_eval_conversion_kind_from_typegroups(RDI_EvalTypeGroup in, RDI_EvalTypeGroup out); RDI_PROC RDI_EvalConversionKind rdi_eval_conversion_kind_from_typegroups(RDI_EvalTypeGroup in, RDI_EvalTypeGroup out);
RDI_PROC RDI_S32 rdi_eval_op_typegroup_are_compatible(RDI_EvalOp op, RDI_EvalTypeGroup group); 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); RDI_PROC RDI_U8 *rdi_explanation_string_from_eval_conversion_kind(RDI_EvalConversionKind kind, RDI_U64 *size_out);
RDI_PROC RDI_U8 *rdi_string_from_type_kind(RDI_TypeKind kind, RDI_U64 *size_out);
extern RDI_U16 rdi_section_element_size_table[40]; extern RDI_U16 rdi_section_element_size_table[40];
extern RDI_U8 rdi_section_is_required_table[40]; extern RDI_U8 rdi_section_is_required_table[40];
+13
View File
@@ -2350,6 +2350,19 @@ rdim_bake_name_map_from_kind_params(RDIM_Arena *arena, RDI_NameMapKind kind, RDI
} }
} }
}break; }break;
case RDI_NameMapKind_Constants:
{
map->slots_count = params->constants.total_count*2;
map->slots = rdim_push_array(arena, RDIM_BakeNameMapNode *, map->slots_count);
for(RDIM_SymbolChunkNode *n = params->constants.first; n != 0; n = n->next)
{
for(RDI_U64 idx = 0; idx < n->count; idx += 1)
{
RDI_U32 symbol_idx = (RDI_U32)rdim_idx_from_symbol(&n->v[idx]); // TODO(rjf): @u64_to_u32
rdim_bake_name_map_push(arena, map, n->v[idx].name, symbol_idx);
}
}
}break;
case RDI_NameMapKind_Procedures: case RDI_NameMapKind_Procedures:
{ {
map->slots_count = params->procedures.total_count*2; map->slots_count = params->procedures.total_count*2;
+8 -9
View File
@@ -1,15 +1,14 @@
internal String8 internal String8
rdi_string_from_name_map_kind(RDI_NameMapKind kind) rdi_string_from_name_map_kind(RDI_NameMapKind kind)
{ {
switch (kind) { String8 result = {0};
case RDI_NameMapKind_NULL : return str8_lit("NULL"); switch(kind)
case RDI_NameMapKind_GlobalVariables : return str8_lit("GlobalVariables"); {
case RDI_NameMapKind_ThreadVariables : return str8_lit("ThreadVariables"); default:{}break;
case RDI_NameMapKind_Procedures : return str8_lit("Procedures"); #define X(name) case RDI_NameMapKind_##name:{result = str8_lit_comp(#name);}break;
case RDI_NameMapKind_Types : return str8_lit("Types"); RDI_NameMapKind_XList
case RDI_NameMapKind_LinkNameProcedures: return str8_lit("LinkNameProcedures"); #undef X
case RDI_NameMapKind_NormalSourcePaths : return str8_lit("NormalSourcePaths");
} }
return str8_lit(""); return result;
} }
+7 -6
View File
@@ -1404,11 +1404,12 @@ RDI_NameMapKindTable:
{NULL 0} {NULL 0}
{GlobalVariables 1} {GlobalVariables 1}
{ThreadVariables 2} {ThreadVariables 2}
{Procedures 3} {Constants 3}
{Types 4} {Procedures 4}
{LinkNameProcedures 5} {Types 5}
{NormalSourcePaths 6} {LinkNameProcedures 6}
{COUNT 7} {NormalSourcePaths 7}
{COUNT 8}
} }
@table(name type desc) @table(name type desc)
@@ -1483,12 +1484,12 @@ RDI_NameMapNodeMemberTable:
@gen(functions) @gen(functions)
``` ```
RDI_PROC RDI_U64 rdi_hash(RDI_U8 *ptr, RDI_U64 size); RDI_PROC RDI_U64 rdi_hash(RDI_U8 *ptr, RDI_U64 size);
RDI_PROC RDI_U8 *rdi_string_from_type_kind(RDI_TypeKind kind, RDI_U64 *size_out);
RDI_PROC RDI_U32 rdi_size_from_basic_type_kind(RDI_TypeKind kind); RDI_PROC RDI_U32 rdi_size_from_basic_type_kind(RDI_TypeKind kind);
RDI_PROC RDI_U32 rdi_addr_size_from_arch(RDI_Arch arch); RDI_PROC RDI_U32 rdi_addr_size_from_arch(RDI_Arch arch);
RDI_PROC RDI_EvalConversionKind rdi_eval_conversion_kind_from_typegroups(RDI_EvalTypeGroup in, RDI_EvalTypeGroup out); RDI_PROC RDI_EvalConversionKind rdi_eval_conversion_kind_from_typegroups(RDI_EvalTypeGroup in, RDI_EvalTypeGroup out);
RDI_PROC RDI_S32 rdi_eval_op_typegroup_are_compatible(RDI_EvalOp op, RDI_EvalTypeGroup group); 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); RDI_PROC RDI_U8 *rdi_explanation_string_from_eval_conversion_kind(RDI_EvalConversionKind kind, RDI_U64 *size_out);
RDI_PROC RDI_U8 *rdi_string_from_type_kind(RDI_TypeKind kind, RDI_U64 *size_out);
``` ```
@gen(functions) @c_file @gen(functions) @c_file