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_GlobalVariables = 1,
RDI_NameMapKind_ThreadVariables = 2,
RDI_NameMapKind_Procedures = 3,
RDI_NameMapKind_Types = 4,
RDI_NameMapKind_LinkNameProcedures = 5,
RDI_NameMapKind_NormalSourcePaths = 6,
RDI_NameMapKind_COUNT = 7,
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 \
@@ -1097,6 +1098,7 @@ X(FromOther)\
X(NULL)\
X(GlobalVariables)\
X(ThreadVariables)\
X(Constants)\
X(Procedures)\
X(Types)\
X(LinkNameProcedures)\
@@ -1558,12 +1560,12 @@ typedef RDI_NameMapBucket RDI_SectionElementType_NameMapBuckets;
typedef RDI_NameMapNode RDI_SectionElementType_NameMapNodes;
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_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_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_string_from_type_kind(RDI_TypeKind kind, RDI_U64 *size_out);
extern RDI_U16 rdi_section_element_size_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;
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:
{
map->slots_count = params->procedures.total_count*2;
+8 -9
View File
@@ -1,15 +1,14 @@
internal String8
rdi_string_from_name_map_kind(RDI_NameMapKind kind)
{
switch (kind) {
case RDI_NameMapKind_NULL : return str8_lit("NULL");
case RDI_NameMapKind_GlobalVariables : return str8_lit("GlobalVariables");
case RDI_NameMapKind_ThreadVariables : return str8_lit("ThreadVariables");
case RDI_NameMapKind_Procedures : return str8_lit("Procedures");
case RDI_NameMapKind_Types : return str8_lit("Types");
case RDI_NameMapKind_LinkNameProcedures: return str8_lit("LinkNameProcedures");
case RDI_NameMapKind_NormalSourcePaths : return str8_lit("NormalSourcePaths");
String8 result = {0};
switch(kind)
{
default:{}break;
#define X(name) case RDI_NameMapKind_##name:{result = str8_lit_comp(#name);}break;
RDI_NameMapKind_XList
#undef X
}
return str8_lit("");
return result;
}
+7 -6
View File
@@ -1404,11 +1404,12 @@ RDI_NameMapKindTable:
{NULL 0}
{GlobalVariables 1}
{ThreadVariables 2}
{Procedures 3}
{Types 4}
{LinkNameProcedures 5}
{NormalSourcePaths 6}
{COUNT 7}
{Constants 3}
{Procedures 4}
{Types 5}
{LinkNameProcedures 6}
{NormalSourcePaths 7}
{COUNT 8}
}
@table(name type desc)
@@ -1483,12 +1484,12 @@ RDI_NameMapNodeMemberTable:
@gen(functions)
```
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_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_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_string_from_type_kind(RDI_TypeKind kind, RDI_U64 *size_out);
```
@gen(functions) @c_file