diff --git a/src/lib_rdi_format/rdi_format.h b/src/lib_rdi_format/rdi_format.h index e327e9fc..f430a5cb 100644 --- a/src/lib_rdi_format/rdi_format.h +++ b/src/lib_rdi_format/rdi_format.h @@ -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]; diff --git a/src/lib_rdi_make/rdi_make.c b/src/lib_rdi_make/rdi_make.c index a5d9650c..6a39bbc1 100644 --- a/src/lib_rdi_make/rdi_make.c +++ b/src/lib_rdi_make/rdi_make.c @@ -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; diff --git a/src/linker/rdi/rdi.c b/src/linker/rdi/rdi.c index dafd09bf..ee11ca17 100644 --- a/src/linker/rdi/rdi.c +++ b/src/linker/rdi/rdi.c @@ -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; } diff --git a/src/rdi_format/rdi_format.mdesk b/src/rdi_format/rdi_format.mdesk index 99f44788..f0ccd388 100644 --- a/src/rdi_format/rdi_format.mdesk +++ b/src/rdi_format/rdi_format.mdesk @@ -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