float codeview, msf, pdb layers up as regular codebase layers, and out of converter-specific code; clangify some builds

This commit is contained in:
Ryan Fleury
2024-02-13 09:51:50 -08:00
parent 017116aee9
commit 7defce94c7
25 changed files with 359 additions and 428 deletions
+7 -40
View File
@@ -158,57 +158,24 @@ demon_accel_write_regs(DEMON_Entity *thread, void *data){
// get accel data
DEMON_AccelThread *accel = demon_accel_from_thread(thread);
// low level write
B32 success = 0;
U64 data_size = 0;
switch (thread->arch){
case Architecture_x86:
{
data_size = sizeof(REGS_RegBlockX86);
success = demon_os_write_regs_x86(thread, (REGS_RegBlockX86*)data);
}break;
case Architecture_x64:
{
data_size = sizeof(REGS_RegBlockX64);
success = demon_os_write_regs_x64(thread, (REGS_RegBlockX64*)data);
}break;
}
// write
U64 data_size = regs_block_size_from_architecture(thread->arch);
B32 success = demon_os_write_regs(thread, data);
// update cache
if (success){
if(success)
{
accel->reg_cache_time = demon_time;
MemoryCopy(&accel->regs, data, data_size);
}
}
internal void
demon_accel_low_level_write_regs(DEMON_Entity *thread){
// NOTE(allen): This is a tricky one. It's just a way to enable some internal
// optimizations. Instead of forcing the user to pass in register data
// to write out and copy to the cache, the "user" is other demon code that
// knows what it's doing. So it grabs the cache memory (through a call to
// `demon_accel_read_regs`) modifies it in place and then calls this.
// So we just have to write the cache contents directly out to OS.
// get accel data
DEMON_AccelThread *accel = demon_accel_from_thread(thread);
switch (thread->arch){
case Architecture_x86:
{
demon_os_write_regs_x86(thread, &accel->regs.x86);
}break;
case Architecture_x64:
{
demon_os_write_regs_x64(thread, &accel->regs.x64);
}break;
}
}
//- entity accel free
internal void
demon_accel_free(DEMON_Entity *entity){
switch (entity->kind){
default:{}break;
case DEMON_EntityKind_Module:
{
if (entity->accel != 0){
-2
View File
@@ -58,8 +58,6 @@ internal U64 demon_accel_tls_root_vaddr_from_thread(DEMON_Entity *threa
internal void* demon_accel_read_regs(DEMON_Entity *thread);
internal void demon_accel_write_regs(DEMON_Entity *thread, void *data);
internal void demon_accel_low_level_write_regs(DEMON_Entity *thread);
//- entity accel free
internal void demon_accel_free(DEMON_Entity *entity);
+1
View File
@@ -134,6 +134,7 @@ demon_ent_new(DEMON_Entity *parent, DEMON_EntityKind kind, U64 id){
internal void
demon_ent_release_single(DEMON_Entity *entity){
switch (entity->kind){
default:{}break;
case DEMON_EntityKind_Process: demon_proc_count -= 1; break;
case DEMON_EntityKind_Thread: demon_thread_count -= 1; break;
case DEMON_EntityKind_Module: demon_module_count -= 1; break;
+16 -9
View File
@@ -460,7 +460,9 @@ demon_os_run(Arena *arena, DEMON_OS_RunCtrls *ctrls){
// set single step bit
if (single_step_thread != 0){
// TODO(allen): possibly buggy
switch (single_step_thread->arch){
switch(single_step_thread->arch)
{
default:{NotImplemented;}break;
case Architecture_x86:
{
REGS_RegBlockX86 regs = {0};
@@ -1287,7 +1289,9 @@ demon_os_run(Arena *arena, DEMON_OS_RunCtrls *ctrls){
// confound us later; so here we're just being sure it's taken out.
if (single_step_thread != 0){
// TODO(allen): possibly buggy
switch (single_step_thread->arch){
switch(single_step_thread->arch)
{
default:{NotImplemented;}break;
case Architecture_x86:
{
REGS_RegBlockX86 regs = {0};
@@ -1585,34 +1589,37 @@ demon_os_full_path_from_module(Arena *arena, DEMON_Entity *module){
}
internal U64
demon_os_stack_base_vaddr_from_thread(DEMON_Entity *thread){
demon_os_stack_base_vaddr_from_thread(DEMON_Entity *thread)
{
DEMON_Entity *process = thread->parent;
DEMON_W32_Ext *thread_ext = demon_w32_ext(thread);
U64 tlb = thread_ext->thread.thread_local_base;
U64 result = 0;
switch (thread->arch){
switch (thread->arch)
{
default:{NotImplemented;}break;
case Architecture_x64:
{
U64 stack_base_addr = tlb + 0x8;
demon_os_read_memory(process, &result, stack_base_addr, 8);
}break;
case Architecture_x86:
{
U64 stack_base_addr = tlb + 0x4;
demon_os_read_memory(process, &result, stack_base_addr, 4);
}break;
}
return(result);
}
internal U64
demon_os_tls_root_vaddr_from_thread(DEMON_Entity *thread){
demon_os_tls_root_vaddr_from_thread(DEMON_Entity *thread)
{
DEMON_W32_Ext *thread_ext = demon_w32_ext(thread);
U64 result = thread_ext->thread.thread_local_base;
switch (thread->arch){
switch(thread->arch)
{
default:{NotImplemented;}break;
case Architecture_x64:
{
result += 88;