d2r2: fix line table register reset conditions in line table conversion

This commit is contained in:
Ryan Fleury
2026-05-05 10:49:33 -07:00
parent fb04768002
commit 384cf11eed
+20 -8
View File
@@ -922,10 +922,6 @@ d2r2_convert(Arena *arena, D2R2_ConvertParams *params)
vm_regs.address += addr_advance; vm_regs.address += addr_advance;
vm_regs.vliw_op_index = (vm_regs.vliw_op_index + op_advance) % line_table_header->max_ops_per_inst; vm_regs.vliw_op_index = (vm_regs.vliw_op_index + op_advance) % line_table_header->max_ops_per_inst;
vm_regs.line += line_advance; vm_regs.line += line_advance;
vm_regs.basic_block = 0;
vm_regs.prologue_end = 0;
vm_regs.epilogue_begin = 0;
vm_regs.discriminator = 0;
emit_line = 1; emit_line = 1;
} }
@@ -949,10 +945,6 @@ d2r2_convert(Arena *arena, D2R2_ConvertParams *params)
case DW_StdOpcode_Copy: case DW_StdOpcode_Copy:
{ {
emit_line = 1; emit_line = 1;
vm_regs.discriminator = 0;
vm_regs.basic_block = 0;
vm_regs.prologue_end = 0;
vm_regs.epilogue_begin = 0;
}break; }break;
//- rjf: PC advances //- rjf: PC advances
@@ -1159,11 +1151,14 @@ d2r2_convert(Arena *arena, D2R2_ConvertParams *params)
first_line_seq_chunk = last_line_seq_chunk = 0; first_line_seq_chunk = last_line_seq_chunk = 0;
total_line_seq_count = 0; total_line_seq_count = 0;
line_seq_src_file = 0; line_seq_src_file = 0;
if(vm_regs.end_sequence)
{
MemoryZeroStruct(&vm_regs); MemoryZeroStruct(&vm_regs);
vm_regs.file_index = 1; vm_regs.file_index = 1;
vm_regs.line = 1; vm_regs.line = 1;
vm_regs.is_stmt = line_table_header->default_is_stmt; vm_regs.is_stmt = line_table_header->default_is_stmt;
} }
}
//- rjf: emit lines //- rjf: emit lines
if(emit_line && vm_regs.address != 0 && vm_regs.line != 0) if(emit_line && vm_regs.address != 0 && vm_regs.line != 0)
@@ -1186,6 +1181,23 @@ d2r2_convert(Arena *arena, D2R2_ConvertParams *params)
chunk->line_count += 1; chunk->line_count += 1;
total_line_seq_count += 1; total_line_seq_count += 1;
line_seq_src_file = src_file; line_seq_src_file = src_file;
// 0x0000000000030b80 141 0 201 0 0 0 is_stmt
printf("0x%016I64x %6i %6i %6i %3i %13I64x %7i %s%s%s%s\n",
vm_regs.address,
(int)vm_regs.line,
(int)vm_regs.column,
(int)vm_regs.file_index,
(int)vm_regs.isa,
vm_regs.discriminator,
(int)vm_regs.vliw_op_index,
vm_regs.is_stmt ? " is_stmt" : "",
vm_regs.prologue_end ? " prologue_end" : "",
vm_regs.epilogue_begin ? " epilogue_begin" : "",
vm_regs.end_sequence ? " end_sequence" : "");
vm_regs.discriminator = 0;
vm_regs.basic_block = 0;
vm_regs.prologue_end = 0;
vm_regs.epilogue_begin = 0;
} }
} }