new debug info loading layer debugging & fixes

This commit is contained in:
Ryan Fleury
2025-09-29 15:07:08 -07:00
parent 08904c9e2d
commit 92809ee6b6
3 changed files with 38 additions and 29 deletions
+20 -16
View File
@@ -27,12 +27,12 @@ di2_init(void)
Arena *arena = arena_alloc(); Arena *arena = arena_alloc();
di2_shared = push_array(arena, DI2_Shared, 1); di2_shared = push_array(arena, DI2_Shared, 1);
di2_shared->arena = arena; di2_shared->arena = arena;
di2_shared->key_slots_count = 4096; di2_shared->key2path_slots_count = 4096;
di2_shared->key_slots = push_array(arena, DI2_KeySlot, di2_shared->key_slots_count); di2_shared->key2path_slots = push_array(arena, DI2_KeySlot, di2_shared->key2path_slots_count);
di2_shared->key_stripes = stripe_array_alloc(arena); di2_shared->key2path_stripes = stripe_array_alloc(arena);
di2_shared->key_path_slots_count = 4096; di2_shared->path2key_slots_count = 4096;
di2_shared->key_path_slots = push_array(arena, DI2_KeySlot, di2_shared->key_path_slots_count); di2_shared->path2key_slots = push_array(arena, DI2_KeySlot, di2_shared->path2key_slots_count);
di2_shared->key_path_stripes = stripe_array_alloc(arena); di2_shared->path2key_stripes = stripe_array_alloc(arena);
di2_shared->slots_count = 4096; di2_shared->slots_count = 4096;
di2_shared->slots = push_array(arena, DI2_Slot, di2_shared->slots_count); di2_shared->slots = push_array(arena, DI2_Slot, di2_shared->slots_count);
di2_shared->stripes = stripe_array_alloc(arena); di2_shared->stripes = stripe_array_alloc(arena);
@@ -51,9 +51,9 @@ di2_key_from_path_timestamp(String8 path, U64 min_timestamp)
{ {
//- rjf: unpack key //- rjf: unpack key
U64 hash = u64_hash_from_str8(path); U64 hash = u64_hash_from_str8(path);
U64 slot_idx = hash%di2_shared->key_slots_count; U64 slot_idx = hash%di2_shared->path2key_slots_count;
DI2_KeySlot *slot = &di2_shared->key_slots[slot_idx]; DI2_KeySlot *slot = &di2_shared->path2key_slots[slot_idx];
Stripe *stripe = stripe_from_slot_idx(&di2_shared->key_stripes, slot_idx); Stripe *stripe = stripe_from_slot_idx(&di2_shared->path2key_stripes, slot_idx);
//- rjf: look up key, create if needed //- rjf: look up key, create if needed
DI2_Key key = {0}; DI2_Key key = {0};
@@ -117,6 +117,7 @@ di2_key_from_path_timestamp(String8 path, U64 min_timestamp)
B32 is_pdb = 0; B32 is_pdb = 0;
if(!is_pdb) if(!is_pdb)
{ {
read_only local_persist char msf_msf20_magic[] = "Microsoft C/C++ program database 2.00\r\n\x1aJG\0\0";
U8 msf20_magic_maybe[sizeof(msf_msf20_magic)] = {0}; U8 msf20_magic_maybe[sizeof(msf_msf20_magic)] = {0};
os_file_read(file, r1u64(0, sizeof(msf20_magic_maybe)), msf20_magic_maybe); os_file_read(file, r1u64(0, sizeof(msf20_magic_maybe)), msf20_magic_maybe);
if(MemoryMatch(msf20_magic_maybe, msf_msf20_magic, sizeof(msf20_magic_maybe))) if(MemoryMatch(msf20_magic_maybe, msf_msf20_magic, sizeof(msf20_magic_maybe)))
@@ -126,6 +127,7 @@ di2_key_from_path_timestamp(String8 path, U64 min_timestamp)
} }
if(!is_pdb) if(!is_pdb)
{ {
read_only local_persist char msf_msf70_magic[] = "Microsoft C/C++ MSF 7.00\r\n\032DS\0\0";
U8 msf70_magic_maybe[sizeof(msf_msf70_magic)] = {0}; U8 msf70_magic_maybe[sizeof(msf_msf70_magic)] = {0};
os_file_read(file, r1u64(0, sizeof(msf70_magic_maybe)), msf70_magic_maybe); os_file_read(file, r1u64(0, sizeof(msf70_magic_maybe)), msf70_magic_maybe);
if(MemoryMatch(msf70_magic_maybe, msf_msf70_magic, sizeof(msf70_magic_maybe))) if(MemoryMatch(msf70_magic_maybe, msf_msf70_magic, sizeof(msf70_magic_maybe)))
@@ -154,9 +156,9 @@ di2_key_from_path_timestamp(String8 path, U64 min_timestamp)
if(made_key) if(made_key)
{ {
U64 key_hash = u64_hash_from_str8(str8_struct(&key)); U64 key_hash = u64_hash_from_str8(str8_struct(&key));
U64 key_slot_idx = key_hash%di2_shared->key_path_slots_count; U64 key_slot_idx = key_hash%di2_shared->key2path_slots_count;
DI2_KeySlot *key_slot = &di2_shared->key_path_slots[key_slot_idx]; DI2_KeySlot *key_slot = &di2_shared->key2path_slots[key_slot_idx];
Stripe *key_stripe = stripe_from_slot_idx(&di2_shared->key_path_stripes, key_slot_idx); Stripe *key_stripe = stripe_from_slot_idx(&di2_shared->key2path_stripes, key_slot_idx);
RWMutexScope(key_stripe->rw_mutex, 1) RWMutexScope(key_stripe->rw_mutex, 1)
{ {
DI2_KeyNode *node = 0; DI2_KeyNode *node = 0;
@@ -486,9 +488,9 @@ di2_async_tick(void)
//- rjf: unpack key //- rjf: unpack key
DI2_Key key = t->key; DI2_Key key = t->key;
U64 key_hash = u64_hash_from_str8(str8_struct(&key)); U64 key_hash = u64_hash_from_str8(str8_struct(&key));
U64 key_slot_idx = key_hash%di2_shared->key_slots_count; U64 key_slot_idx = key_hash%di2_shared->key2path_slots_count;
DI2_KeySlot *key_slot = &di2_shared->key_slots[key_slot_idx]; DI2_KeySlot *key_slot = &di2_shared->key2path_slots[key_slot_idx];
Stripe *key_stripe = stripe_from_slot_idx(&di2_shared->key_stripes, key_slot_idx); Stripe *key_stripe = stripe_from_slot_idx(&di2_shared->key2path_stripes, key_slot_idx);
//- rjf: get key's O.G. path //- rjf: get key's O.G. path
String8 og_path = {0}; String8 og_path = {0};
@@ -646,6 +648,8 @@ di2_async_tick(void)
} }
} }
} }
lane_sync_u64(&parse_tasks, 0);
lane_sync_u64(&parse_tasks_count, 0);
lane_sync(); lane_sync();
////////////////////////////// //////////////////////////////
@@ -662,7 +666,7 @@ di2_async_tick(void)
for(;;) for(;;)
{ {
//- rjf: take next task //- rjf: take next task
U64 parse_task_idx = ins_atomic_u64_inc_eval(parse_task_take_counter_ptr); U64 parse_task_idx = ins_atomic_u64_inc_eval(parse_task_take_counter_ptr) - 1;
if(parse_task_idx >= parse_tasks_count) if(parse_task_idx >= parse_tasks_count)
{ {
break; break;
+7 -7
View File
@@ -135,14 +135,14 @@ struct DI2_Shared
Arena *arena; Arena *arena;
// rjf: key -> path cache // rjf: key -> path cache
U64 key_slots_count; U64 key2path_slots_count;
DI2_KeySlot *key_slots; DI2_KeySlot *key2path_slots;
StripeArray key_stripes; StripeArray key2path_stripes;
// rjf: path -> key cache // rjf: path -> key cache
U64 key_path_slots_count; U64 path2key_slots_count;
DI2_KeySlot *key_path_slots; DI2_KeySlot *path2key_slots;
StripeArray key_path_stripes; StripeArray path2key_stripes;
// rjf: debug info cache // rjf: debug info cache
U64 slots_count; U64 slots_count;
@@ -179,7 +179,7 @@ internal void di2_init(void);
//////////////////////////////// ////////////////////////////////
//~ rjf: Path * Timestamp Cache Submission & Lookup //~ rjf: Path * Timestamp Cache Submission & Lookup
internal DI2_Key di2_key_from_path_timestamp(String8 path, U64 timestamp); internal DI2_Key di2_key_from_path_timestamp(String8 path, U64 min_timestamp);
//////////////////////////////// ////////////////////////////////
//~ rjf: Debug Info Opening / Closing //~ rjf: Debug Info Opening / Closing
+11 -6
View File
@@ -16,6 +16,8 @@
#include "content/content.h" #include "content/content.h"
#include "artifact_cache/artifact_cache.h" #include "artifact_cache/artifact_cache.h"
#include "file_stream/file_stream.h" #include "file_stream/file_stream.h"
#include "rdi/rdi_local.h"
#include "dbg_info/dbg_info2.h"
//- rjf: [c] //- rjf: [c]
#include "base/base_inc.c" #include "base/base_inc.c"
@@ -23,6 +25,8 @@
#include "content/content.c" #include "content/content.c"
#include "artifact_cache/artifact_cache.c" #include "artifact_cache/artifact_cache.c"
#include "file_stream/file_stream.c" #include "file_stream/file_stream.c"
#include "rdi/rdi_local.c"
#include "dbg_info/dbg_info2.c"
//////////////////////////////// ////////////////////////////////
//~ rjf: Entry Point //~ rjf: Entry Point
@@ -30,15 +34,16 @@
internal void internal void
entry_point(CmdLine *cmdline) entry_point(CmdLine *cmdline)
{ {
DI2_Key key = di2_key_from_path_timestamp(str8_lit("C:/devel/raddebugger/build/raddbg.pdb"), 0);
di2_open(key);
for(;;) for(;;)
{ {
C_Key key = fs_key_from_path(str8_lit("C:/devel/raddebugger/build/x.dump"), os_now_microseconds() + 100000); Access *access = access_open();
U128 hash = c_hash_from_key(key, 0); RDI_Parsed *rdi = di2_rdi_from_key(access, key, 1, 0);
printf("hash: 0x%I64x, 0x%I64x\n", hash.u64[0], hash.u64[1]); if(rdi != &rdi_parsed_nil)
fflush(stdout);
if(!u128_match(u128_zero(), hash))
{ {
break; int x = 0;
} }
access_close(access);
} }
} }