mirror of
https://github.com/Ed94/raddebugger.git
synced 2026-08-06 22:08:41 +00:00
grab ranges in compile unit tag for the unit vmap
This commit is contained in:
@@ -708,12 +708,19 @@ rgba_from_u32(U32 hex)
|
|||||||
//~ rjf: List Type Functions
|
//~ rjf: List Type Functions
|
||||||
|
|
||||||
internal void
|
internal void
|
||||||
|
rng1u64_list_push_node(Rng1U64List *list, Rng1U64Node *n)
|
||||||
|
{
|
||||||
|
SLLQueuePush(list->first, list->last, n);
|
||||||
|
list->count += 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
internal Rng1U64Node *
|
||||||
rng1u64_list_push(Arena *arena, Rng1U64List *list, Rng1U64 rng)
|
rng1u64_list_push(Arena *arena, Rng1U64List *list, Rng1U64 rng)
|
||||||
{
|
{
|
||||||
Rng1U64Node *n = push_array(arena, Rng1U64Node, 1);
|
Rng1U64Node *n = push_array(arena, Rng1U64Node, 1);
|
||||||
MemoryCopyStruct(&n->v, &rng);
|
MemoryCopyStruct(&n->v, &rng);
|
||||||
SLLQueuePush(list->first, list->last, n);
|
rng1u64_list_push_node(list, n);
|
||||||
list->count += 1;
|
return n;
|
||||||
}
|
}
|
||||||
|
|
||||||
internal void
|
internal void
|
||||||
|
|||||||
@@ -678,7 +678,8 @@ internal Vec4F32 rgba_from_u32(U32 hex);
|
|||||||
////////////////////////////////
|
////////////////////////////////
|
||||||
//~ rjf: List Type Functions
|
//~ rjf: List Type Functions
|
||||||
|
|
||||||
internal void rng1u64_list_push(Arena *arena, Rng1U64List *list, Rng1U64 rng);
|
internal void rng1u64_list_push_node(Rng1U64List *list, Rng1U64Node *n);
|
||||||
|
internal Rng1U64Node * rng1u64_list_push(Arena *arena, Rng1U64List *list, Rng1U64 rng);
|
||||||
internal void rng1u64_list_concat(Rng1U64List *list, Rng1U64List *to_concat);
|
internal void rng1u64_list_concat(Rng1U64List *list, Rng1U64List *to_concat);
|
||||||
internal Rng1U64Array rng1u64_array_from_list(Arena *arena, Rng1U64List *list);
|
internal Rng1U64Array rng1u64_array_from_list(Arena *arena, Rng1U64List *list);
|
||||||
internal U64 rng_1u64_array_bsearch(Rng1U64Array arr, U64 value);
|
internal U64 rng_1u64_array_bsearch(Rng1U64Array arr, U64 value);
|
||||||
|
|||||||
@@ -169,13 +169,20 @@ internal Rng1U64List
|
|||||||
d2r_range_list_from_tag(Arena *arena, DW_Input *input, DW_CompUnit *cu, U64 image_base, DW_Tag tag)
|
d2r_range_list_from_tag(Arena *arena, DW_Input *input, DW_CompUnit *cu, U64 image_base, DW_Tag tag)
|
||||||
{
|
{
|
||||||
// collect non-contiguous range
|
// collect non-contiguous range
|
||||||
Rng1U64List ranges = dw_rnglist_from_tag_attrib_kind(arena, input, cu, tag, DW_AttribKind_Ranges);
|
Rng1U64List raw_ranges = dw_rnglist_from_tag_attrib_kind(arena, input, cu, tag, DW_AttribKind_Ranges);
|
||||||
|
|
||||||
|
// exclude invalid ranges caused by linker optimizations
|
||||||
|
Rng1U64List ranges = {0};
|
||||||
|
for (Rng1U64Node *n = raw_ranges.first, *next = 0; n != 0; n = next) {
|
||||||
|
next = n->next;
|
||||||
|
if (n->v.min < image_base || n->v.min > n->v.max) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
rng1u64_list_push_node(&ranges, n);
|
||||||
|
}
|
||||||
|
|
||||||
// debase ranges
|
// debase ranges
|
||||||
for EachNode(r, Rng1U64Node, ranges.first) {
|
for EachNode(r, Rng1U64Node, ranges.first) {
|
||||||
// TODO: error handling
|
|
||||||
AssertAlways(r->v.min >= image_base);
|
|
||||||
AssertAlways(r->v.max >= image_base);
|
|
||||||
r->v.min -= image_base;
|
r->v.min -= image_base;
|
||||||
r->v.max -= image_base;
|
r->v.max -= image_base;
|
||||||
}
|
}
|
||||||
@@ -2808,8 +2815,10 @@ d2r_convert(Arena *arena, D2R_ConvertParams *params)
|
|||||||
if (cu_idx < cu_contrib_map.count) {
|
if (cu_idx < cu_contrib_map.count) {
|
||||||
cu_voff_ranges = d2r_voff_ranges_from_cu_info_off(cu_contrib_map, cu_ranges.v[cu_idx].min);
|
cu_voff_ranges = d2r_voff_ranges_from_cu_info_off(cu_contrib_map, cu_ranges.v[cu_idx].min);
|
||||||
} else {
|
} else {
|
||||||
// TODO: synthesize cu ranges from scopes
|
Rng1U64List range_list = d2r_range_list_from_tag(scratch.arena, &input, cu, image_base, cu->tag);
|
||||||
NotImplemented;
|
for EachNode(n, Rng1U64Node, range_list.first) {
|
||||||
|
rdim_rng1u64_chunk_list_push(arena, &cu_voff_ranges, 512, (RDIM_Rng1U64){ .min = n->v.min, .max = n->v.max });
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// convert compile unit
|
// convert compile unit
|
||||||
|
|||||||
Reference in New Issue
Block a user