mirror of
https://github.com/Ed94/raddebugger.git
synced 2026-08-07 14:28:40 +00:00
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:
+102
-64
@@ -446,13 +446,13 @@ rdim_short_type_from_data_model(RDIM_DataModel data_model)
|
||||
{
|
||||
switch(data_model)
|
||||
{
|
||||
case RDIM_DataModel_Null : break;
|
||||
case RDIM_DataModel_ILP32 : return RDI_TypeKind_S16;
|
||||
case RDIM_DataModel_LLP64 : return RDI_TypeKind_S16;
|
||||
case RDIM_DataModel_LP64 : return RDI_TypeKind_S16;
|
||||
case RDIM_DataModel_ILP64 : return RDI_TypeKind_S16;
|
||||
case RDIM_DataModel_SILP64: return RDI_TypeKind_S64;
|
||||
default: InvalidPath;
|
||||
case RDIM_DataModel_Null : break;
|
||||
case RDIM_DataModel_ILP32 : return RDI_TypeKind_S16;
|
||||
case RDIM_DataModel_LLP64 : return RDI_TypeKind_S16;
|
||||
case RDIM_DataModel_LP64 : return RDI_TypeKind_S16;
|
||||
case RDIM_DataModel_ILP64 : return RDI_TypeKind_S16;
|
||||
case RDIM_DataModel_SILP64: return RDI_TypeKind_S64;
|
||||
default: InvalidPath;
|
||||
}
|
||||
return RDI_TypeKind_NULL;
|
||||
}
|
||||
@@ -462,13 +462,13 @@ rdim_unsigned_short_type_from_data_model(RDIM_DataModel data_model)
|
||||
{
|
||||
switch(data_model)
|
||||
{
|
||||
case RDIM_DataModel_Null : break;
|
||||
case RDIM_DataModel_ILP32 : return RDI_TypeKind_U16;
|
||||
case RDIM_DataModel_LLP64 : return RDI_TypeKind_U16;
|
||||
case RDIM_DataModel_LP64 : return RDI_TypeKind_U16;
|
||||
case RDIM_DataModel_ILP64 : return RDI_TypeKind_U16;
|
||||
case RDIM_DataModel_SILP64: return RDI_TypeKind_U64;
|
||||
default: InvalidPath;
|
||||
case RDIM_DataModel_Null : break;
|
||||
case RDIM_DataModel_ILP32 : return RDI_TypeKind_U16;
|
||||
case RDIM_DataModel_LLP64 : return RDI_TypeKind_U16;
|
||||
case RDIM_DataModel_LP64 : return RDI_TypeKind_U16;
|
||||
case RDIM_DataModel_ILP64 : return RDI_TypeKind_U16;
|
||||
case RDIM_DataModel_SILP64: return RDI_TypeKind_U64;
|
||||
default: InvalidPath;
|
||||
}
|
||||
return RDI_TypeKind_NULL;
|
||||
}
|
||||
@@ -478,13 +478,13 @@ rdim_int_type_from_data_model(RDIM_DataModel data_model)
|
||||
{
|
||||
switch(data_model)
|
||||
{
|
||||
case RDIM_DataModel_Null : break;
|
||||
case RDIM_DataModel_ILP32 : return RDI_TypeKind_S32;
|
||||
case RDIM_DataModel_LLP64 : return RDI_TypeKind_S32;
|
||||
case RDIM_DataModel_LP64 : return RDI_TypeKind_S32;
|
||||
case RDIM_DataModel_ILP64 : return RDI_TypeKind_S64;
|
||||
case RDIM_DataModel_SILP64: return RDI_TypeKind_S64;
|
||||
default: InvalidPath;
|
||||
case RDIM_DataModel_Null : break;
|
||||
case RDIM_DataModel_ILP32 : return RDI_TypeKind_S32;
|
||||
case RDIM_DataModel_LLP64 : return RDI_TypeKind_S32;
|
||||
case RDIM_DataModel_LP64 : return RDI_TypeKind_S32;
|
||||
case RDIM_DataModel_ILP64 : return RDI_TypeKind_S64;
|
||||
case RDIM_DataModel_SILP64: return RDI_TypeKind_S64;
|
||||
default: InvalidPath;
|
||||
}
|
||||
return RDI_TypeKind_NULL;
|
||||
}
|
||||
@@ -494,13 +494,13 @@ rdim_unsigned_int_type_from_data_model(RDIM_DataModel data_model)
|
||||
{
|
||||
switch(data_model)
|
||||
{
|
||||
case RDIM_DataModel_Null : break;
|
||||
case RDIM_DataModel_ILP32 : return RDI_TypeKind_U32;
|
||||
case RDIM_DataModel_LLP64 : return RDI_TypeKind_U32;
|
||||
case RDIM_DataModel_LP64 : return RDI_TypeKind_U32;
|
||||
case RDIM_DataModel_ILP64 : return RDI_TypeKind_U64;
|
||||
case RDIM_DataModel_SILP64: return RDI_TypeKind_U64;
|
||||
default: InvalidPath;
|
||||
case RDIM_DataModel_Null : break;
|
||||
case RDIM_DataModel_ILP32 : return RDI_TypeKind_U32;
|
||||
case RDIM_DataModel_LLP64 : return RDI_TypeKind_U32;
|
||||
case RDIM_DataModel_LP64 : return RDI_TypeKind_U32;
|
||||
case RDIM_DataModel_ILP64 : return RDI_TypeKind_U64;
|
||||
case RDIM_DataModel_SILP64: return RDI_TypeKind_U64;
|
||||
default: InvalidPath;
|
||||
}
|
||||
return RDI_TypeKind_NULL;
|
||||
}
|
||||
@@ -510,13 +510,13 @@ rdim_long_type_from_data_model(RDIM_DataModel data_model)
|
||||
{
|
||||
switch(data_model)
|
||||
{
|
||||
case RDIM_DataModel_Null : break;
|
||||
case RDIM_DataModel_ILP32 : return RDI_TypeKind_S32;
|
||||
case RDIM_DataModel_LLP64 : return RDI_TypeKind_S32;
|
||||
case RDIM_DataModel_LP64 : return RDI_TypeKind_S64;
|
||||
case RDIM_DataModel_ILP64 : return RDI_TypeKind_S64;
|
||||
case RDIM_DataModel_SILP64: return RDI_TypeKind_S64;
|
||||
default: InvalidPath;
|
||||
case RDIM_DataModel_Null : break;
|
||||
case RDIM_DataModel_ILP32 : return RDI_TypeKind_S32;
|
||||
case RDIM_DataModel_LLP64 : return RDI_TypeKind_S32;
|
||||
case RDIM_DataModel_LP64 : return RDI_TypeKind_S64;
|
||||
case RDIM_DataModel_ILP64 : return RDI_TypeKind_S64;
|
||||
case RDIM_DataModel_SILP64: return RDI_TypeKind_S64;
|
||||
default: InvalidPath;
|
||||
}
|
||||
return RDI_TypeKind_NULL;
|
||||
}
|
||||
@@ -526,13 +526,13 @@ rdim_unsigned_long_type_from_data_model(RDIM_DataModel data_model)
|
||||
{
|
||||
switch(data_model)
|
||||
{
|
||||
case RDIM_DataModel_Null : break;
|
||||
case RDIM_DataModel_ILP32 : return RDI_TypeKind_U32;
|
||||
case RDIM_DataModel_LLP64 : return RDI_TypeKind_U32;
|
||||
case RDIM_DataModel_LP64 : return RDI_TypeKind_U64;
|
||||
case RDIM_DataModel_ILP64 : return RDI_TypeKind_U64;
|
||||
case RDIM_DataModel_SILP64: return RDI_TypeKind_U64;
|
||||
default: InvalidPath;
|
||||
case RDIM_DataModel_Null : break;
|
||||
case RDIM_DataModel_ILP32 : return RDI_TypeKind_U32;
|
||||
case RDIM_DataModel_LLP64 : return RDI_TypeKind_U32;
|
||||
case RDIM_DataModel_LP64 : return RDI_TypeKind_U64;
|
||||
case RDIM_DataModel_ILP64 : return RDI_TypeKind_U64;
|
||||
case RDIM_DataModel_SILP64: return RDI_TypeKind_U64;
|
||||
default: InvalidPath;
|
||||
}
|
||||
return RDI_TypeKind_NULL;
|
||||
}
|
||||
@@ -542,13 +542,13 @@ rdim_long_long_type_from_data_model(RDIM_DataModel data_model)
|
||||
{
|
||||
switch(data_model)
|
||||
{
|
||||
case RDIM_DataModel_Null : break;
|
||||
case RDIM_DataModel_ILP32 : return RDI_TypeKind_S64;
|
||||
case RDIM_DataModel_LLP64 : return RDI_TypeKind_S64;
|
||||
case RDIM_DataModel_LP64 : return RDI_TypeKind_S64;
|
||||
case RDIM_DataModel_ILP64 : return RDI_TypeKind_S64;
|
||||
case RDIM_DataModel_SILP64: return RDI_TypeKind_S64;
|
||||
default: InvalidPath;
|
||||
case RDIM_DataModel_Null : break;
|
||||
case RDIM_DataModel_ILP32 : return RDI_TypeKind_S64;
|
||||
case RDIM_DataModel_LLP64 : return RDI_TypeKind_S64;
|
||||
case RDIM_DataModel_LP64 : return RDI_TypeKind_S64;
|
||||
case RDIM_DataModel_ILP64 : return RDI_TypeKind_S64;
|
||||
case RDIM_DataModel_SILP64: return RDI_TypeKind_S64;
|
||||
default: InvalidPath;
|
||||
}
|
||||
return RDI_TypeKind_NULL;
|
||||
}
|
||||
@@ -558,13 +558,13 @@ rdim_unsigned_long_long_type_from_data_model(RDIM_DataModel data_model)
|
||||
{
|
||||
switch(data_model)
|
||||
{
|
||||
case RDIM_DataModel_Null : break;
|
||||
case RDIM_DataModel_ILP32 : return RDI_TypeKind_U64;
|
||||
case RDIM_DataModel_LLP64 : return RDI_TypeKind_U64;
|
||||
case RDIM_DataModel_LP64 : return RDI_TypeKind_U64;
|
||||
case RDIM_DataModel_ILP64 : return RDI_TypeKind_U64;
|
||||
case RDIM_DataModel_SILP64: return RDI_TypeKind_U64;
|
||||
default: InvalidPath;
|
||||
case RDIM_DataModel_Null : break;
|
||||
case RDIM_DataModel_ILP32 : return RDI_TypeKind_U64;
|
||||
case RDIM_DataModel_LLP64 : return RDI_TypeKind_U64;
|
||||
case RDIM_DataModel_LP64 : return RDI_TypeKind_U64;
|
||||
case RDIM_DataModel_ILP64 : return RDI_TypeKind_U64;
|
||||
case RDIM_DataModel_SILP64: return RDI_TypeKind_U64;
|
||||
default: InvalidPath;
|
||||
}
|
||||
return RDI_TypeKind_NULL;
|
||||
}
|
||||
@@ -574,13 +574,13 @@ rdim_pointer_size_t_type_from_data_model(RDIM_DataModel data_model)
|
||||
{
|
||||
switch(data_model)
|
||||
{
|
||||
case RDIM_DataModel_Null : break;
|
||||
case RDIM_DataModel_ILP32 : return RDI_TypeKind_U32;
|
||||
case RDIM_DataModel_LLP64 : return RDI_TypeKind_U64;
|
||||
case RDIM_DataModel_LP64 : return RDI_TypeKind_U64;
|
||||
case RDIM_DataModel_ILP64 : return RDI_TypeKind_U64;
|
||||
case RDIM_DataModel_SILP64: return RDI_TypeKind_U64;
|
||||
default: InvalidPath;
|
||||
case RDIM_DataModel_Null : break;
|
||||
case RDIM_DataModel_ILP32 : return RDI_TypeKind_U32;
|
||||
case RDIM_DataModel_LLP64 : return RDI_TypeKind_U64;
|
||||
case RDIM_DataModel_LP64 : return RDI_TypeKind_U64;
|
||||
case RDIM_DataModel_ILP64 : return RDI_TypeKind_U64;
|
||||
case RDIM_DataModel_SILP64: return RDI_TypeKind_U64;
|
||||
default: InvalidPath;
|
||||
}
|
||||
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
|
||||
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
|
||||
if(sub_dir_node == 0)
|
||||
else if(sub_dir_node == 0)
|
||||
{
|
||||
sub_dir_node = rdim_push_array(arena, RDIM_BakePathNode, 1);
|
||||
RDIM_SLLQueuePush_N(tree->first, tree->last, sub_dir_node, next_order);
|
||||
|
||||
@@ -641,12 +641,15 @@ ASYNC_WORK_DEF(p2r_units_convert_work)
|
||||
// rjf: file name -> normalized file path
|
||||
String8 file_path = lines->file_name;
|
||||
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
|
||||
|
||||
Reference in New Issue
Block a user