mirror of
https://github.com/Ed94/raddebugger.git
synced 2026-07-28 02:10:13 +00:00
float codeview, msf, pdb layers up as regular codebase layers, and out of converter-specific code; clangify some builds
This commit is contained in:
+7
-40
@@ -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){
|
||||
|
||||
@@ -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);
|
||||
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user