Ignore S_REGREL32 during conversion of optimized procedures.

In optimized builds, MSVC emits parameters as both S_LOCAL and S_REGREL32.
Most likely because their debugger relies on S_REGREL32 to format
parameters in the call stack window.
This commit is contained in:
Nikita Smith
2026-01-20 14:47:03 -08:00
parent a51d3fb752
commit d1b055c62f
+4 -1
View File
@@ -3437,6 +3437,7 @@ p2r_convert(Arena *arena, P2R_ConvertParams *params)
B32 defrange_target_is_param = 0;
U64 procedure_num = 0;
U64 procedure_base_voff = 0;
CV_ProcFlags proc_flags = 0;
U64 regrel_idx = 0;
RDIM_Symbol *curr_proc_symbol = 0;
CV_RecRange *rec_ranges_first = sym->sym_ranges.ranges + sym_rec_range.min;
@@ -3706,12 +3707,14 @@ p2r_convert(Arena *arena, P2R_ConvertParams *params)
// reset S_REGREL32 index
regrel_idx = 0;
proc_flags = proc32->flags;
}break;
//- rjf: REGREL32
case CV_SymKind_REGREL32:
{
if(params->subset_flags & RDIM_SubsetFlag_Locals)
if(params->subset_flags & RDIM_SubsetFlag_Locals && !(proc_flags & CV_ProcFlag_OptDbgInfo))
{
// TODO(rjf): apparently some of the information here may end up being
// redundant with "better" information from CV_SymKind_LOCAL record.