mirror of
https://github.com/Ed94/raddebugger.git
synced 2026-08-14 17:28:07 +00:00
flush on end sequence opcode and correctly debase addresses
This commit is contained in:
@@ -2887,7 +2887,9 @@ d2r_convert(Arena *arena, D2R_ConvertParams *params)
|
|||||||
if (vm->state.file_index >= vm->header.file_table.count) { continue; }
|
if (vm->state.file_index >= vm->header.file_table.count) { continue; }
|
||||||
|
|
||||||
// time to flush the buffer?
|
// time to flush the buffer?
|
||||||
if ((line_buffer_size >= D2R_LineBufferMax || line_buffer->file_index != vm->state.file_index) && line_buffer_size > 0) {
|
if (((vm->opcode == DW_StdOpcode_ExtendedOpcode && vm->ext_opcode == DW_ExtOpcode_EndSequence) ||
|
||||||
|
(line_buffer_size >= D2R_LineBufferMax || line_buffer->file_index != vm->state.file_index))
|
||||||
|
&& line_buffer_size > 0) {
|
||||||
// lookup source file
|
// lookup source file
|
||||||
DW_LineFile *file = &vm->header.file_table.v[vm->state.file_index];
|
DW_LineFile *file = &vm->header.file_table.v[vm->state.file_index];
|
||||||
U64 hash = d2r_hash_line_file(vm->header.dir_table.v[file->dir_idx], file);
|
U64 hash = d2r_hash_line_file(vm->header.dir_table.v[file->dir_idx], file);
|
||||||
@@ -2897,7 +2899,7 @@ d2r_convert(Arena *arena, D2R_ConvertParams *params)
|
|||||||
// copy line info
|
// copy line info
|
||||||
U64 *voffs = push_array_no_zero(arena, U64, line_buffer_size + 1);
|
U64 *voffs = push_array_no_zero(arena, U64, line_buffer_size + 1);
|
||||||
U32 *line_nums = push_array_no_zero(arena, U32, line_buffer_size);
|
U32 *line_nums = push_array_no_zero(arena, U32, line_buffer_size);
|
||||||
voffs[line_buffer_size] = vm->state.address;
|
voffs[line_buffer_size] = vm->state.address - image_base;
|
||||||
MemoryCopyTyped(voffs, line_buffer->voffs, line_buffer_size);
|
MemoryCopyTyped(voffs, line_buffer->voffs, line_buffer_size);
|
||||||
MemoryCopyTyped(line_nums, line_buffer->line_nums, line_buffer_size);
|
MemoryCopyTyped(line_nums, line_buffer->line_nums, line_buffer_size);
|
||||||
|
|
||||||
@@ -2936,7 +2938,7 @@ d2r_convert(Arena *arena, D2R_ConvertParams *params)
|
|||||||
} else {
|
} else {
|
||||||
// append line to the buffer
|
// append line to the buffer
|
||||||
line_buffer->file_index = vm->state.file_index;
|
line_buffer->file_index = vm->state.file_index;
|
||||||
line_buffer->voffs[line_buffer_size] = vm->state.address;
|
line_buffer->voffs[line_buffer_size] = vm->state.address - image_base;
|
||||||
line_buffer->line_nums[line_buffer_size] = safe_cast_u32(vm->state.line);
|
line_buffer->line_nums[line_buffer_size] = safe_cast_u32(vm->state.line);
|
||||||
line_buffer_size += 1;
|
line_buffer_size += 1;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user