mirror of
https://github.com/Ed94/raddebugger.git
synced 2026-08-14 17:28:07 +00:00
pdb -> rdi conversion: be robust to zero itypes in function type parameter lists. was causing, in some cases, local variables to be incorrectly interpreted as parameters, because there was a (nonexistent) parameter to the function recorded in the type info.
This commit is contained in:
@@ -2312,15 +2312,32 @@ p2r_convert(Arena *arena, P2R_ConvertParams *params)
|
|||||||
CV_TypeId *arglist_itypes_base = (CV_TypeId *)(arglist+1);
|
CV_TypeId *arglist_itypes_base = (CV_TypeId *)(arglist+1);
|
||||||
U32 arglist_itypes_count = arglist->count;
|
U32 arglist_itypes_count = arglist->count;
|
||||||
|
|
||||||
// rjf: build param type array
|
// rjf: count non-zero arguments
|
||||||
RDIM_Type **params = push_array(arena, RDIM_Type *, arglist_itypes_count);
|
U32 arglist_itypes_nonzero_count = 0;
|
||||||
for(U32 idx = 0; idx < arglist_itypes_count; idx += 1)
|
for(U32 idx = 0; idx < arglist_itypes_count; idx += 1)
|
||||||
{
|
{
|
||||||
params[idx] = p2r_type_ptr_from_itype(arglist_itypes_base[idx]);
|
if(arglist_itypes_base[idx] != 0)
|
||||||
|
{
|
||||||
|
arglist_itypes_nonzero_count += 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// rjf: build param type array
|
||||||
|
RDIM_Type **params = push_array(arena, RDIM_Type *, arglist_itypes_nonzero_count);
|
||||||
|
{
|
||||||
|
U64 dst_idx = 0;
|
||||||
|
for(U32 idx = 0; idx < arglist_itypes_count; idx += 1)
|
||||||
|
{
|
||||||
|
if(arglist_itypes_base[idx] != 0)
|
||||||
|
{
|
||||||
|
params[dst_idx] = p2r_type_ptr_from_itype(arglist_itypes_base[idx]);
|
||||||
|
dst_idx += 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// rjf: fill dst type
|
// rjf: fill dst type
|
||||||
dst_type->count = arglist_itypes_count;
|
dst_type->count = arglist_itypes_nonzero_count;
|
||||||
dst_type->param_types = params;
|
dst_type->param_types = params;
|
||||||
}break;
|
}break;
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user