pdb -> rdi: more gracefully handle ..s in file paths when building source line maps, normalized file paths, and path tree

This commit is contained in:
Ryan Fleury
2025-05-07 14:58:23 -07:00
parent 4f980c4820
commit a4367e02f2
2 changed files with 120 additions and 79 deletions
+102 -64
View File
@@ -446,13 +446,13 @@ rdim_short_type_from_data_model(RDIM_DataModel data_model)
{ {
switch(data_model) switch(data_model)
{ {
case RDIM_DataModel_Null : break; case RDIM_DataModel_Null : break;
case RDIM_DataModel_ILP32 : return RDI_TypeKind_S16; case RDIM_DataModel_ILP32 : return RDI_TypeKind_S16;
case RDIM_DataModel_LLP64 : return RDI_TypeKind_S16; case RDIM_DataModel_LLP64 : return RDI_TypeKind_S16;
case RDIM_DataModel_LP64 : return RDI_TypeKind_S16; case RDIM_DataModel_LP64 : return RDI_TypeKind_S16;
case RDIM_DataModel_ILP64 : return RDI_TypeKind_S16; case RDIM_DataModel_ILP64 : return RDI_TypeKind_S16;
case RDIM_DataModel_SILP64: return RDI_TypeKind_S64; case RDIM_DataModel_SILP64: return RDI_TypeKind_S64;
default: InvalidPath; default: InvalidPath;
} }
return RDI_TypeKind_NULL; return RDI_TypeKind_NULL;
} }
@@ -462,13 +462,13 @@ rdim_unsigned_short_type_from_data_model(RDIM_DataModel data_model)
{ {
switch(data_model) switch(data_model)
{ {
case RDIM_DataModel_Null : break; case RDIM_DataModel_Null : break;
case RDIM_DataModel_ILP32 : return RDI_TypeKind_U16; case RDIM_DataModel_ILP32 : return RDI_TypeKind_U16;
case RDIM_DataModel_LLP64 : return RDI_TypeKind_U16; case RDIM_DataModel_LLP64 : return RDI_TypeKind_U16;
case RDIM_DataModel_LP64 : return RDI_TypeKind_U16; case RDIM_DataModel_LP64 : return RDI_TypeKind_U16;
case RDIM_DataModel_ILP64 : return RDI_TypeKind_U16; case RDIM_DataModel_ILP64 : return RDI_TypeKind_U16;
case RDIM_DataModel_SILP64: return RDI_TypeKind_U64; case RDIM_DataModel_SILP64: return RDI_TypeKind_U64;
default: InvalidPath; default: InvalidPath;
} }
return RDI_TypeKind_NULL; return RDI_TypeKind_NULL;
} }
@@ -478,13 +478,13 @@ rdim_int_type_from_data_model(RDIM_DataModel data_model)
{ {
switch(data_model) switch(data_model)
{ {
case RDIM_DataModel_Null : break; case RDIM_DataModel_Null : break;
case RDIM_DataModel_ILP32 : return RDI_TypeKind_S32; case RDIM_DataModel_ILP32 : return RDI_TypeKind_S32;
case RDIM_DataModel_LLP64 : return RDI_TypeKind_S32; case RDIM_DataModel_LLP64 : return RDI_TypeKind_S32;
case RDIM_DataModel_LP64 : return RDI_TypeKind_S32; case RDIM_DataModel_LP64 : return RDI_TypeKind_S32;
case RDIM_DataModel_ILP64 : return RDI_TypeKind_S64; case RDIM_DataModel_ILP64 : return RDI_TypeKind_S64;
case RDIM_DataModel_SILP64: return RDI_TypeKind_S64; case RDIM_DataModel_SILP64: return RDI_TypeKind_S64;
default: InvalidPath; default: InvalidPath;
} }
return RDI_TypeKind_NULL; return RDI_TypeKind_NULL;
} }
@@ -494,13 +494,13 @@ rdim_unsigned_int_type_from_data_model(RDIM_DataModel data_model)
{ {
switch(data_model) switch(data_model)
{ {
case RDIM_DataModel_Null : break; case RDIM_DataModel_Null : break;
case RDIM_DataModel_ILP32 : return RDI_TypeKind_U32; case RDIM_DataModel_ILP32 : return RDI_TypeKind_U32;
case RDIM_DataModel_LLP64 : return RDI_TypeKind_U32; case RDIM_DataModel_LLP64 : return RDI_TypeKind_U32;
case RDIM_DataModel_LP64 : return RDI_TypeKind_U32; case RDIM_DataModel_LP64 : return RDI_TypeKind_U32;
case RDIM_DataModel_ILP64 : return RDI_TypeKind_U64; case RDIM_DataModel_ILP64 : return RDI_TypeKind_U64;
case RDIM_DataModel_SILP64: return RDI_TypeKind_U64; case RDIM_DataModel_SILP64: return RDI_TypeKind_U64;
default: InvalidPath; default: InvalidPath;
} }
return RDI_TypeKind_NULL; return RDI_TypeKind_NULL;
} }
@@ -510,13 +510,13 @@ rdim_long_type_from_data_model(RDIM_DataModel data_model)
{ {
switch(data_model) switch(data_model)
{ {
case RDIM_DataModel_Null : break; case RDIM_DataModel_Null : break;
case RDIM_DataModel_ILP32 : return RDI_TypeKind_S32; case RDIM_DataModel_ILP32 : return RDI_TypeKind_S32;
case RDIM_DataModel_LLP64 : return RDI_TypeKind_S32; case RDIM_DataModel_LLP64 : return RDI_TypeKind_S32;
case RDIM_DataModel_LP64 : return RDI_TypeKind_S64; case RDIM_DataModel_LP64 : return RDI_TypeKind_S64;
case RDIM_DataModel_ILP64 : return RDI_TypeKind_S64; case RDIM_DataModel_ILP64 : return RDI_TypeKind_S64;
case RDIM_DataModel_SILP64: return RDI_TypeKind_S64; case RDIM_DataModel_SILP64: return RDI_TypeKind_S64;
default: InvalidPath; default: InvalidPath;
} }
return RDI_TypeKind_NULL; return RDI_TypeKind_NULL;
} }
@@ -526,13 +526,13 @@ rdim_unsigned_long_type_from_data_model(RDIM_DataModel data_model)
{ {
switch(data_model) switch(data_model)
{ {
case RDIM_DataModel_Null : break; case RDIM_DataModel_Null : break;
case RDIM_DataModel_ILP32 : return RDI_TypeKind_U32; case RDIM_DataModel_ILP32 : return RDI_TypeKind_U32;
case RDIM_DataModel_LLP64 : return RDI_TypeKind_U32; case RDIM_DataModel_LLP64 : return RDI_TypeKind_U32;
case RDIM_DataModel_LP64 : return RDI_TypeKind_U64; case RDIM_DataModel_LP64 : return RDI_TypeKind_U64;
case RDIM_DataModel_ILP64 : return RDI_TypeKind_U64; case RDIM_DataModel_ILP64 : return RDI_TypeKind_U64;
case RDIM_DataModel_SILP64: return RDI_TypeKind_U64; case RDIM_DataModel_SILP64: return RDI_TypeKind_U64;
default: InvalidPath; default: InvalidPath;
} }
return RDI_TypeKind_NULL; return RDI_TypeKind_NULL;
} }
@@ -542,13 +542,13 @@ rdim_long_long_type_from_data_model(RDIM_DataModel data_model)
{ {
switch(data_model) switch(data_model)
{ {
case RDIM_DataModel_Null : break; case RDIM_DataModel_Null : break;
case RDIM_DataModel_ILP32 : return RDI_TypeKind_S64; case RDIM_DataModel_ILP32 : return RDI_TypeKind_S64;
case RDIM_DataModel_LLP64 : return RDI_TypeKind_S64; case RDIM_DataModel_LLP64 : return RDI_TypeKind_S64;
case RDIM_DataModel_LP64 : return RDI_TypeKind_S64; case RDIM_DataModel_LP64 : return RDI_TypeKind_S64;
case RDIM_DataModel_ILP64 : return RDI_TypeKind_S64; case RDIM_DataModel_ILP64 : return RDI_TypeKind_S64;
case RDIM_DataModel_SILP64: return RDI_TypeKind_S64; case RDIM_DataModel_SILP64: return RDI_TypeKind_S64;
default: InvalidPath; default: InvalidPath;
} }
return RDI_TypeKind_NULL; return RDI_TypeKind_NULL;
} }
@@ -558,13 +558,13 @@ rdim_unsigned_long_long_type_from_data_model(RDIM_DataModel data_model)
{ {
switch(data_model) switch(data_model)
{ {
case RDIM_DataModel_Null : break; case RDIM_DataModel_Null : break;
case RDIM_DataModel_ILP32 : return RDI_TypeKind_U64; case RDIM_DataModel_ILP32 : return RDI_TypeKind_U64;
case RDIM_DataModel_LLP64 : return RDI_TypeKind_U64; case RDIM_DataModel_LLP64 : return RDI_TypeKind_U64;
case RDIM_DataModel_LP64 : return RDI_TypeKind_U64; case RDIM_DataModel_LP64 : return RDI_TypeKind_U64;
case RDIM_DataModel_ILP64 : return RDI_TypeKind_U64; case RDIM_DataModel_ILP64 : return RDI_TypeKind_U64;
case RDIM_DataModel_SILP64: return RDI_TypeKind_U64; case RDIM_DataModel_SILP64: return RDI_TypeKind_U64;
default: InvalidPath; default: InvalidPath;
} }
return RDI_TypeKind_NULL; return RDI_TypeKind_NULL;
} }
@@ -574,13 +574,13 @@ rdim_pointer_size_t_type_from_data_model(RDIM_DataModel data_model)
{ {
switch(data_model) switch(data_model)
{ {
case RDIM_DataModel_Null : break; case RDIM_DataModel_Null : break;
case RDIM_DataModel_ILP32 : return RDI_TypeKind_U32; case RDIM_DataModel_ILP32 : return RDI_TypeKind_U32;
case RDIM_DataModel_LLP64 : return RDI_TypeKind_U64; case RDIM_DataModel_LLP64 : return RDI_TypeKind_U64;
case RDIM_DataModel_LP64 : return RDI_TypeKind_U64; case RDIM_DataModel_LP64 : return RDI_TypeKind_U64;
case RDIM_DataModel_ILP64 : return RDI_TypeKind_U64; case RDIM_DataModel_ILP64 : return RDI_TypeKind_U64;
case RDIM_DataModel_SILP64: return RDI_TypeKind_U64; case RDIM_DataModel_SILP64: return RDI_TypeKind_U64;
default: InvalidPath; default: InvalidPath;
} }
return RDI_TypeKind_NULL; return RDI_TypeKind_NULL;
} }
@@ -1921,6 +1921,25 @@ rdim_bake_path_node_from_string(RDIM_BakePathTree *tree, RDIM_String8 string)
} }
} }
// rjf: .. -> go up
if(sub_dir.RDIM_String8_SizeMember == 2 &&
sub_dir.RDIM_String8_BaseMember[0] == '.' &&
sub_dir.RDIM_String8_BaseMember[1] == '.')
{
sub_dir_node = node->parent;
if(sub_dir_node == 0)
{
sub_dir_node = &tree->root;
}
}
// rjf: . -> stay here
else if(sub_dir.RDIM_String8_SizeMember == 1 &&
sub_dir.RDIM_String8_BaseMember[0] == '.')
{
sub_dir_node = node;
}
// rjf: descend to child // rjf: descend to child
node = sub_dir_node; node = sub_dir_node;
} }
@@ -1975,8 +1994,27 @@ rdim_bake_path_tree_insert(RDIM_Arena *arena, RDIM_BakePathTree *tree, RDIM_Stri
} }
} }
// rjf: .. -> go up
if(sub_dir.RDIM_String8_SizeMember == 2 &&
sub_dir.RDIM_String8_BaseMember[0] == '.' &&
sub_dir.RDIM_String8_BaseMember[1] == '.')
{
sub_dir_node = node->parent;
if(sub_dir_node == 0)
{
sub_dir_node = &tree->root;
}
}
// rjf: . -> stay here
else if(sub_dir.RDIM_String8_SizeMember == 1 &&
sub_dir.RDIM_String8_BaseMember[0] == '.')
{
sub_dir_node = node;
}
// rjf: no child -> make one // rjf: no child -> make one
if(sub_dir_node == 0) else if(sub_dir_node == 0)
{ {
sub_dir_node = rdim_push_array(arena, RDIM_BakePathNode, 1); sub_dir_node = rdim_push_array(arena, RDIM_BakePathNode, 1);
RDIM_SLLQueuePush_N(tree->first, tree->last, sub_dir_node, next_order); RDIM_SLLQueuePush_N(tree->first, tree->last, sub_dir_node, next_order);
+6 -3
View File
@@ -641,12 +641,15 @@ ASYNC_WORK_DEF(p2r_units_convert_work)
// rjf: file name -> normalized file path // rjf: file name -> normalized file path
String8 file_path = lines->file_name; String8 file_path = lines->file_name;
String8 file_path_normalized = lower_from_str8(scratch.arena, str8_skip_chop_whitespace(file_path)); String8 file_path_normalized = lower_from_str8(scratch.arena, str8_skip_chop_whitespace(file_path));
for(U64 idx = 0; idx < file_path_normalized.size; idx += 1)
{ {
if(file_path_normalized.str[idx] == '\\') for(U64 idx = 0; idx < file_path_normalized.size; idx += 1)
{ {
file_path_normalized.str[idx] = '/'; if(file_path_normalized.str[idx] == '\\')
{
file_path_normalized.str[idx] = '/';
}
} }
file_path_normalized = path_normalized_from_string(scratch.arena, file_path_normalized);
} }
// rjf: normalized file path -> source file node // rjf: normalized file path -> source file node