mirror of
https://github.com/Ed94/raddebugger.git
synced 2026-08-07 14:28:40 +00:00
special case bss section contribs and fix off by one in range array bsearch
This commit is contained in:
committed by
Ryan Fleury
parent
37689b2e4a
commit
64415e21f0
@@ -750,7 +750,7 @@ rng1u64_array_from_list(Arena *arena, Rng1U64List *list)
|
|||||||
internal U64
|
internal U64
|
||||||
rng_1u64_array_bsearch(Rng1U64Array arr, U64 value)
|
rng_1u64_array_bsearch(Rng1U64Array arr, U64 value)
|
||||||
{
|
{
|
||||||
if(arr.count > 0 && arr.v[0].min <= value && value < arr.v[arr.count-1].max)
|
if(arr.count > 0 && arr.v[0].min < value && value < arr.v[arr.count-1].max)
|
||||||
{
|
{
|
||||||
U64 l = 0;
|
U64 l = 0;
|
||||||
U64 r = arr.count - 1;
|
U64 r = arr.count - 1;
|
||||||
|
|||||||
@@ -2985,20 +2985,31 @@ THREAD_POOL_TASK_FUNC(lnk_push_dbi_sec_contrib_task)
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
U64 sect_number = rng_1u64_array_bsearch(task->image_section_file_ranges, obj_sect_header->foff);
|
U64 sect_number;
|
||||||
String8 sect_data = str8_substr(task->image_data, rng_1u64(obj_sect_header->foff, obj_sect_header->foff + obj_sect_header->fsize));
|
String8 sect_data;
|
||||||
U32 sect_off = obj_sect_header->foff - task->image_section_file_ranges.v[sect_number].min;
|
U32 sect_off;
|
||||||
|
U32 data_crc;
|
||||||
|
if (obj_sect_header->flags & COFF_SectionFlag_CntUninitializedData) {
|
||||||
|
sect_number = rng_1u64_array_bsearch(task->image_section_virt_ranges, obj_sect_header->voff);
|
||||||
|
sect_data = str8_zero();
|
||||||
|
sect_off = obj_sect_header->voff - task->image_section_virt_ranges.v[sect_number].min;
|
||||||
|
data_crc = 0;
|
||||||
|
} else {
|
||||||
|
sect_number = rng_1u64_array_bsearch(task->image_section_file_ranges, obj_sect_header->foff);
|
||||||
|
sect_off = obj_sect_header->foff - task->image_section_file_ranges.v[sect_number].min;
|
||||||
|
data_crc = update_crc32(0, sect_data.str, sect_data.size);
|
||||||
|
}
|
||||||
|
|
||||||
// fill out SC
|
// fill out SC
|
||||||
PDB_DbiSectionContribNode *sc = sc_arr + sc_count++;
|
PDB_DbiSectionContribNode *sc = sc_arr + sc_count++;
|
||||||
sc->data.base.sec = (U16)sect_number;
|
sc->data.base.sec = (U16)sect_number;
|
||||||
sc->data.base.pad0 = 0;
|
sc->data.base.pad0 = 0;
|
||||||
sc->data.base.sec_off = sect_off;
|
sc->data.base.sec_off = sect_off;
|
||||||
sc->data.base.size = obj_sect_header->foff;
|
sc->data.base.size = obj_sect_header->vsize;
|
||||||
sc->data.base.flags = obj_sect_header->flags;
|
sc->data.base.flags = obj_sect_header->flags;
|
||||||
sc->data.base.mod = mod->imod;
|
sc->data.base.mod = mod->imod;
|
||||||
sc->data.base.pad1 = 0;
|
sc->data.base.pad1 = 0;
|
||||||
sc->data.data_crc = update_crc32(0, sect_data.str, sect_data.size);
|
sc->data.data_crc = 0;
|
||||||
sc->data.reloc_crc = 0;
|
sc->data.reloc_crc = 0;
|
||||||
|
|
||||||
dbi_sec_contrib_list_push_node(&task->sc_list[obj_idx], sc);
|
dbi_sec_contrib_list_push_node(&task->sc_list[obj_idx], sc);
|
||||||
|
|||||||
Reference in New Issue
Block a user