mirror of
https://github.com/Ed94/raddebugger.git
synced 2026-08-05 21:38: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)
|
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);
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user