mirror of
https://github.com/Ed94/raddebugger.git
synced 2026-06-17 09:32:22 -07:00
first pass at integrating new demon2 layer into debugger, need to change ctrl a bit to adopt some of the things that were previously being left up to demon layers
This commit is contained in:
+479
-342
File diff suppressed because it is too large
Load Diff
+176
-97
@@ -10,16 +10,7 @@
|
||||
typedef U64 CTRL_MsgID;
|
||||
typedef U64 CTRL_MachineID;
|
||||
|
||||
#define CTRL_MachineID_Client (1)
|
||||
|
||||
////////////////////////////////
|
||||
//~ rjf: Handle Type
|
||||
|
||||
typedef struct CTRL_Handle CTRL_Handle;
|
||||
struct CTRL_Handle
|
||||
{
|
||||
U64 u64[1];
|
||||
};
|
||||
#define CTRL_MachineID_Local (1)
|
||||
|
||||
////////////////////////////////
|
||||
//~ rjf: Machine/Handle Pair Types
|
||||
@@ -28,7 +19,7 @@ typedef struct CTRL_MachineIDHandlePair CTRL_MachineIDHandlePair;
|
||||
struct CTRL_MachineIDHandlePair
|
||||
{
|
||||
CTRL_MachineID machine_id;
|
||||
CTRL_Handle handle;
|
||||
DMN_Handle handle;
|
||||
};
|
||||
|
||||
typedef struct CTRL_MachineIDHandlePairNode CTRL_MachineIDHandlePairNode;
|
||||
@@ -46,6 +37,52 @@ struct CTRL_MachineIDHandlePairList
|
||||
U64 count;
|
||||
};
|
||||
|
||||
////////////////////////////////
|
||||
//~ rjf: Entity Types
|
||||
|
||||
typedef enum CTRL_EntityKind
|
||||
{
|
||||
CTRL_EntityKind_Null,
|
||||
CTRL_EntityKind_Root,
|
||||
CTRL_EntityKind_Machine,
|
||||
CTRL_EntityKind_Process,
|
||||
CTRL_EntityKind_Thread,
|
||||
CTRL_EntityKind_Module,
|
||||
CTRL_EntityKind_COUNT
|
||||
}
|
||||
CTRL_EntityKind;
|
||||
|
||||
typedef struct CTRL_Entity CTRL_Entity;
|
||||
struct CTRL_Entity
|
||||
{
|
||||
CTRL_Entity *first;
|
||||
CTRL_Entity *last;
|
||||
CTRL_Entity *next;
|
||||
CTRL_Entity *prev;
|
||||
CTRL_Entity *parent;
|
||||
CTRL_EntityKind kind;
|
||||
Architecture arch;
|
||||
CTRL_MachineID machine_id;
|
||||
DMN_Handle handle;
|
||||
Rng1U64 vaddr_range;
|
||||
String8 name;
|
||||
};
|
||||
|
||||
typedef struct CTRL_EntityHashNode CTRL_EntityHashNode;
|
||||
struct CTRL_EntityHashNode
|
||||
{
|
||||
CTRL_EntityHashNode *next;
|
||||
CTRL_EntityHashNode *prev;
|
||||
CTRL_Entity *entity;
|
||||
};
|
||||
|
||||
typedef struct CTRL_EntityHashSlot CTRL_EntityHashSlot;
|
||||
struct CTRL_EntityHashSlot
|
||||
{
|
||||
CTRL_EntityHashNode *first;
|
||||
CTRL_EntityHashNode *last;
|
||||
};
|
||||
|
||||
////////////////////////////////
|
||||
//~ rjf: Unwind Types
|
||||
|
||||
@@ -105,8 +142,8 @@ struct CTRL_TrapList
|
||||
typedef struct CTRL_Spoof CTRL_Spoof;
|
||||
struct CTRL_Spoof
|
||||
{
|
||||
CTRL_Handle process;
|
||||
CTRL_Handle thread;
|
||||
DMN_Handle process;
|
||||
DMN_Handle thread;
|
||||
U64 vaddr;
|
||||
U64 new_ip_value;
|
||||
};
|
||||
@@ -177,8 +214,8 @@ struct CTRL_Msg
|
||||
CTRL_MsgKind kind;
|
||||
CTRL_MsgID msg_id;
|
||||
CTRL_MachineID machine_id;
|
||||
CTRL_Handle entity;
|
||||
CTRL_Handle parent;
|
||||
DMN_Handle entity;
|
||||
DMN_Handle parent;
|
||||
U32 entity_id;
|
||||
U32 exit_code;
|
||||
B32 env_inherit;
|
||||
@@ -281,8 +318,8 @@ struct CTRL_Event
|
||||
CTRL_ExceptionKind exception_kind;
|
||||
CTRL_MsgID msg_id;
|
||||
CTRL_MachineID machine_id;
|
||||
CTRL_Handle entity;
|
||||
CTRL_Handle parent;
|
||||
DMN_Handle entity;
|
||||
DMN_Handle parent;
|
||||
Architecture arch;
|
||||
U64 u64_code;
|
||||
U32 entity_id;
|
||||
@@ -338,7 +375,7 @@ struct CTRL_ProcessMemoryCacheNode
|
||||
CTRL_ProcessMemoryCacheNode *prev;
|
||||
Arena *arena;
|
||||
CTRL_MachineID machine_id;
|
||||
CTRL_Handle process;
|
||||
DMN_Handle process;
|
||||
U64 range_hash_slots_count;
|
||||
CTRL_ProcessMemoryRangeHashSlot *range_hash_slots;
|
||||
};
|
||||
@@ -374,6 +411,42 @@ struct CTRL_ProcessMemorySlice
|
||||
U64 *byte_changed_flags;
|
||||
};
|
||||
|
||||
////////////////////////////////
|
||||
//~ rjf: Thread Register Cache Types
|
||||
|
||||
typedef struct CTRL_ThreadRegCacheNode CTRL_ThreadRegCacheNode;
|
||||
struct CTRL_ThreadRegCacheNode
|
||||
{
|
||||
CTRL_ThreadRegCacheNode *next;
|
||||
CTRL_ThreadRegCacheNode *prev;
|
||||
CTRL_MachineID machine_id;
|
||||
DMN_Handle thread;
|
||||
U128 regs_hash;
|
||||
};
|
||||
|
||||
typedef struct CTRL_ThreadRegCacheSlot CTRL_ThreadRegCacheSlot;
|
||||
struct CTRL_ThreadRegCacheSlot
|
||||
{
|
||||
CTRL_ThreadRegCacheNode *first;
|
||||
CTRL_ThreadRegCacheNode *last;
|
||||
};
|
||||
|
||||
typedef struct CTRL_ThreadRegCacheStripe CTRL_ThreadRegCacheStripe;
|
||||
struct CTRL_ThreadRegCacheStripe
|
||||
{
|
||||
Arena *arena;
|
||||
OS_Handle rw_mutex;
|
||||
};
|
||||
|
||||
typedef struct CTRL_ThreadRegCache CTRL_ThreadRegCache;
|
||||
struct CTRL_ThreadRegCache
|
||||
{
|
||||
U64 slots_count;
|
||||
CTRL_ThreadRegCacheSlot *slots;
|
||||
U64 stripes_count;
|
||||
CTRL_ThreadRegCacheStripe *stripes;
|
||||
};
|
||||
|
||||
////////////////////////////////
|
||||
//~ rjf: Wakeup Hook Function Types
|
||||
|
||||
@@ -396,8 +469,9 @@ struct CTRL_State
|
||||
EVAL_String2NumMap arch_string2reg_tables[Architecture_COUNT];
|
||||
EVAL_String2NumMap arch_string2alias_tables[Architecture_COUNT];
|
||||
|
||||
// rjf: process memory cache
|
||||
// rjf: caches
|
||||
CTRL_ProcessMemoryCache process_memory_cache;
|
||||
CTRL_ThreadRegCache thread_reg_cache;
|
||||
|
||||
// rjf: user -> ctrl msg ring buffer
|
||||
U64 u2c_ring_size;
|
||||
@@ -417,10 +491,16 @@ struct CTRL_State
|
||||
|
||||
// rjf: ctrl thread state
|
||||
OS_Handle ctrl_thread;
|
||||
Arena *demon_event_arena;
|
||||
DEMON_EventNode *first_demon_event_node;
|
||||
DEMON_EventNode *last_demon_event_node;
|
||||
DEMON_EventNode *free_demon_event_node;
|
||||
Arena *ctrl_entity_arena;
|
||||
CTRL_Entity *ctrl_entity_root;
|
||||
CTRL_Entity *ctrl_entity_free;
|
||||
CTRL_EntityHashSlot *ctrl_entity_hash_slots;
|
||||
CTRL_EntityHashNode *ctrl_entity_hash_node_free;
|
||||
U64 ctrl_entity_hash_slots_count;
|
||||
Arena *dmn_event_arena;
|
||||
DMN_EventNode *first_dmn_event_node;
|
||||
DMN_EventNode *last_dmn_event_node;
|
||||
DMN_EventNode *free_dmn_event_node;
|
||||
Arena *user_entry_point_arena;
|
||||
String8List user_entry_points;
|
||||
U64 exception_code_filters[(CTRL_ExceptionCodeKind_COUNT+63)/64];
|
||||
@@ -443,29 +523,22 @@ struct CTRL_State
|
||||
//~ rjf: Globals
|
||||
|
||||
global CTRL_State *ctrl_state = 0;
|
||||
|
||||
////////////////////////////////
|
||||
//~ rjf: Main Layer Initialization
|
||||
|
||||
internal void ctrl_init(void);
|
||||
|
||||
////////////////////////////////
|
||||
//~ rjf: Wakeup Callback Registration
|
||||
|
||||
internal void ctrl_set_wakeup_hook(CTRL_WakeupFunctionType *wakeup_hook);
|
||||
read_only global CTRL_Entity ctrl_entity_nil =
|
||||
{
|
||||
&ctrl_entity_nil,
|
||||
&ctrl_entity_nil,
|
||||
&ctrl_entity_nil,
|
||||
&ctrl_entity_nil,
|
||||
&ctrl_entity_nil,
|
||||
};
|
||||
|
||||
////////////////////////////////
|
||||
//~ rjf: Basic Type Functions
|
||||
|
||||
internal U64 ctrl_hash_from_string(String8 string);
|
||||
internal CTRL_EventCause ctrl_event_cause_from_demon_event_kind(DEMON_EventKind event_kind);
|
||||
internal B32 ctrl_handle_match(CTRL_Handle a, CTRL_Handle b);
|
||||
|
||||
////////////////////////////////
|
||||
//~ rjf: Ctrl <-> Demon Handle Translation Functions
|
||||
|
||||
internal DEMON_Handle ctrl_demon_handle_from_ctrl(CTRL_Handle h);
|
||||
internal CTRL_Handle ctrl_handle_from_demon(DEMON_Handle h);
|
||||
internal U64 ctrl_hash_from_machine_id_handle(CTRL_MachineID machine_id, DMN_Handle handle);
|
||||
internal CTRL_EventCause ctrl_event_cause_from_dmn_event_kind(DMN_EventKind event_kind);
|
||||
internal B32 ctrl_handle_match(DMN_Handle a, DMN_Handle b);
|
||||
|
||||
////////////////////////////////
|
||||
//~ rjf: Machine/Handle Pair Type Functions
|
||||
@@ -484,8 +557,8 @@ internal CTRL_TrapList ctrl_trap_list_copy(Arena *arena, CTRL_TrapList *src);
|
||||
|
||||
internal void ctrl_user_breakpoint_list_push(Arena *arena, CTRL_UserBreakpointList *list, CTRL_UserBreakpoint *bp);
|
||||
internal CTRL_UserBreakpointList ctrl_user_breakpoint_list_copy(Arena *arena, CTRL_UserBreakpointList *src);
|
||||
internal void ctrl_append_resolved_module_user_bp_traps(Arena *arena, DEMON_Handle process, DEMON_Handle module, CTRL_UserBreakpointList *user_bps, DEMON_TrapChunkList *traps_out);
|
||||
internal void ctrl_append_resolved_process_user_bp_traps(Arena *arena, DEMON_Handle process, CTRL_UserBreakpointList *user_bps, DEMON_TrapChunkList *traps_out);
|
||||
internal void ctrl_append_resolved_module_user_bp_traps(Arena *arena, DMN_Handle process, DMN_Handle module, CTRL_UserBreakpointList *user_bps, DMN_TrapChunkList *traps_out);
|
||||
internal void ctrl_append_resolved_process_user_bp_traps(Arena *arena, DMN_Handle process, CTRL_UserBreakpointList *user_bps, DMN_TrapChunkList *traps_out);
|
||||
|
||||
////////////////////////////////
|
||||
//~ rjf: Message Type Functions
|
||||
@@ -512,80 +585,82 @@ internal String8 ctrl_serialized_string_from_event(Arena *arena, CTRL_Event *eve
|
||||
internal CTRL_Event ctrl_event_from_serialized_string(Arena *arena, String8 string);
|
||||
|
||||
////////////////////////////////
|
||||
//~ rjf: Shared Functions
|
||||
//~ rjf: Main Layer Initialization
|
||||
|
||||
//- rjf: run index
|
||||
internal void ctrl_init(void);
|
||||
|
||||
////////////////////////////////
|
||||
//~ rjf: Wakeup Callback Registration
|
||||
|
||||
internal void ctrl_set_wakeup_hook(CTRL_WakeupFunctionType *wakeup_hook);
|
||||
|
||||
////////////////////////////////
|
||||
//~ rjf: Process Memory Functions
|
||||
|
||||
//- rjf: process memory cache interaction
|
||||
internal U128 ctrl_hash_store_key_from_process_vaddr_range(CTRL_MachineID machine_id, DMN_Handle process, Rng1U64 range, B32 zero_terminated);
|
||||
internal U128 ctrl_stored_hash_from_process_vaddr_range(CTRL_MachineID machine_id, DMN_Handle process, Rng1U64 range, B32 zero_terminated, U64 endt_us);
|
||||
|
||||
//- rjf: process memory cache reading helpers
|
||||
internal CTRL_ProcessMemorySlice ctrl_query_cached_data_from_process_vaddr_range(Arena *arena, CTRL_MachineID machine_id, DMN_Handle process, Rng1U64 range, U64 endt_us);
|
||||
internal CTRL_ProcessMemorySlice ctrl_query_cached_zero_terminated_data_from_process_vaddr_limit(Arena *arena, CTRL_MachineID machine_id, DMN_Handle process, U64 vaddr, U64 limit, U64 endt_us);
|
||||
|
||||
//- rjf: process memory writing
|
||||
internal B32 ctrl_process_write(CTRL_MachineID machine_id, DMN_Handle process, Rng1U64 range, void *src);
|
||||
|
||||
////////////////////////////////
|
||||
//~ rjf: Thread Register Functions
|
||||
|
||||
//- rjf: thread register cache reading
|
||||
internal void *ctrl_query_cached_reg_block_from_thread(Arena *arena, CTRL_MachineID machine_id, DMN_Handle thread, U64 endt_us);
|
||||
internal U64 ctrl_query_cached_tls_root_vaddr_from_thread(CTRL_MachineID machine_id, DMN_Handle thread);
|
||||
|
||||
//- rjf: thread register writing
|
||||
internal B32 ctrl_thread_write_reg_block(CTRL_MachineID machine_id, DMN_Handle thread, void *block);
|
||||
|
||||
////////////////////////////////
|
||||
//~ rjf: Unwinding Functions
|
||||
|
||||
internal CTRL_Unwind ctrl_unwind_from_thread(Arena *arena, CTRL_MachineID machine_id, DMN_Handle thread);
|
||||
|
||||
////////////////////////////////
|
||||
//~ rjf: Halting All Attached Processes
|
||||
|
||||
internal void ctrl_halt(void);
|
||||
|
||||
////////////////////////////////
|
||||
//~ rjf: Shared Accessor Functions
|
||||
|
||||
//- rjf: run indices
|
||||
internal U64 ctrl_run_idx(void);
|
||||
internal U64 ctrl_memgen_idx(void);
|
||||
internal U64 ctrl_reggen_idx(void);
|
||||
|
||||
//- rjf: halt everything
|
||||
internal void ctrl_halt(void);
|
||||
|
||||
//- rjf: exe -> dbg path mapping
|
||||
internal String8 ctrl_inferred_og_dbg_path_from_exe_path(Arena *arena, String8 exe_path);
|
||||
internal String8 ctrl_forced_og_dbg_path_from_exe_path(Arena *arena, String8 exe_path);
|
||||
internal String8 ctrl_natural_og_dbg_path_from_exe_path(Arena *arena, String8 exe_path);
|
||||
internal String8 ctrl_og_dbg_path_from_exe_path(Arena *arena, String8 exe_path);
|
||||
|
||||
//- rjf: handle -> arch
|
||||
internal Architecture ctrl_arch_from_handle(CTRL_MachineID machine, CTRL_Handle handle);
|
||||
|
||||
//- rjf: process memory reading/writing
|
||||
internal U64 ctrl_process_read(CTRL_MachineID machine_id, CTRL_Handle process, Rng1U64 range, void *dst);
|
||||
internal B32 ctrl_process_write(CTRL_MachineID machine_id, CTRL_Handle process, Rng1U64 range, void *src);
|
||||
|
||||
//- rjf: process memory cache interaction
|
||||
internal U128 ctrl_hash_store_key_from_process_vaddr_range(CTRL_MachineID machine_id, CTRL_Handle process, Rng1U64 range, B32 zero_terminated);
|
||||
internal U128 ctrl_stored_hash_from_process_vaddr_range(CTRL_MachineID machine_id, CTRL_Handle process, Rng1U64 range, B32 zero_terminated, U64 endt_us);
|
||||
|
||||
//- rjf: process memory cache reading helpers
|
||||
internal CTRL_ProcessMemorySlice ctrl_query_cached_data_from_process_vaddr_range(Arena *arena, CTRL_MachineID machine_id, CTRL_Handle process, Rng1U64 range, U64 endt_us);
|
||||
internal CTRL_ProcessMemorySlice ctrl_query_cached_zero_terminated_data_from_process_vaddr_limit(Arena *arena, CTRL_MachineID machine_id, CTRL_Handle process, U64 vaddr, U64 limit, U64 endt_us);
|
||||
|
||||
//- rjf: register reading/writing
|
||||
internal void *ctrl_reg_block_from_thread(CTRL_MachineID machine_id, CTRL_Handle thread);
|
||||
internal B32 ctrl_thread_write_reg_block(CTRL_MachineID machine_id, CTRL_Handle thread, void *block);
|
||||
internal U64 ctrl_rip_from_thread(CTRL_MachineID machine_id, CTRL_Handle thread);
|
||||
internal B32 ctrl_thread_write_rip(CTRL_MachineID machine_id, CTRL_Handle thread, U64 rip);
|
||||
internal U64 ctrl_tls_root_vaddr_from_thread(CTRL_MachineID machine_id, CTRL_Handle thread);
|
||||
|
||||
//- rjf: process * vaddr -> module
|
||||
internal CTRL_Handle ctrl_module_from_process_vaddr(CTRL_MachineID machine_id, CTRL_Handle process, U64 vaddr);
|
||||
|
||||
//- rjf: unwinding
|
||||
internal CTRL_Unwind ctrl_unwind_from_process_thread(Arena *arena, CTRL_MachineID machine_id, CTRL_Handle process, CTRL_Handle thread);
|
||||
|
||||
//- rjf: name -> register/alias hash tables, for eval
|
||||
internal EVAL_String2NumMap *ctrl_string2reg_from_arch(Architecture arch);
|
||||
internal EVAL_String2NumMap *ctrl_string2alias_from_arch(Architecture arch);
|
||||
|
||||
////////////////////////////////
|
||||
//~ rjf: User -> Ctrl Communication
|
||||
//~ rjf: Control-Thread Functions
|
||||
|
||||
//- rjf: user -> control thread communication
|
||||
internal B32 ctrl_u2c_push_msgs(CTRL_MsgList *msgs, U64 endt_us);
|
||||
internal CTRL_MsgList ctrl_u2c_pop_msgs(Arena *arena);
|
||||
|
||||
////////////////////////////////
|
||||
//~ rjf: Ctrl -> User Communication
|
||||
|
||||
//- rjf: control -> user thread communication
|
||||
internal void ctrl_c2u_push_events(CTRL_EventList *events);
|
||||
internal CTRL_EventList ctrl_c2u_pop_events(Arena *arena);
|
||||
|
||||
////////////////////////////////
|
||||
//~ rjf: User -> Memory Stream Communication
|
||||
|
||||
internal B32 ctrl_u2ms_enqueue_req(CTRL_MachineID machine_id, CTRL_Handle process, Rng1U64 vaddr_range, B32 zero_terminated, U64 endt_us);
|
||||
internal void ctrl_u2ms_dequeue_req(CTRL_MachineID *out_machine_id, CTRL_Handle *out_process, Rng1U64 *out_vaddr_range, B32 *out_zero_terminated);
|
||||
|
||||
////////////////////////////////
|
||||
//~ rjf: Control-Thread-Only Functions
|
||||
//- rjf: entity tree construction
|
||||
internal CTRL_Entity *ctrl_thread__entity_alloc(CTRL_Entity *parent, CTRL_EntityKind kind, CTRL_MachineID machine_id, DMN_Handle handle);
|
||||
internal void ctrl_thread__entity_release(CTRL_Entity *entity);
|
||||
internal CTRL_Entity *ctrl_thread__entity_from_machine_id_handle(CTRL_MachineID machine_id, DMN_Handle handle);
|
||||
|
||||
//- rjf: entry point
|
||||
internal void ctrl_thread__entry_point(void *p);
|
||||
|
||||
//- rjf: attached process running/event gathering
|
||||
internal DEMON_Event *ctrl_thread__next_demon_event(Arena *arena, CTRL_Msg *msg, DEMON_RunCtrls *run_ctrls, CTRL_Spoof *spoof);
|
||||
internal DMN_Event *ctrl_thread__next_dmn_event(Arena *arena, CTRL_Msg *msg, DMN_RunCtrls *run_ctrls, CTRL_Spoof *spoof);
|
||||
|
||||
//- rjf: eval helpers
|
||||
internal B32 ctrl_eval_memory_read(void *u, void *out, U64 addr, U64 size);
|
||||
@@ -600,9 +675,13 @@ internal void ctrl_thread__run(CTRL_Msg *msg);
|
||||
internal void ctrl_thread__single_step(CTRL_Msg *msg);
|
||||
|
||||
////////////////////////////////
|
||||
//~ rjf: Memory-Stream-Thread-Only Functions
|
||||
//~ rjf: Memory-Stream Thread Functions
|
||||
|
||||
//- rjf: user -> memory stream communication
|
||||
internal B32 ctrl_u2ms_enqueue_req(CTRL_MachineID machine_id, DMN_Handle process, Rng1U64 vaddr_range, B32 zero_terminated, U64 endt_us);
|
||||
internal void ctrl_u2ms_dequeue_req(CTRL_MachineID *out_machine_id, DMN_Handle *out_process, Rng1U64 *out_vaddr_range, B32 *out_zero_terminated);
|
||||
|
||||
//- rjf: entry point
|
||||
internal void ctrl_mem_stream_thread__entry_point(void *p);
|
||||
|
||||
#endif //CTRL_CORE_H
|
||||
#endif // CTRL_CORE_H
|
||||
|
||||
+2
-2
@@ -179,7 +179,7 @@ dasm_inst_chunk_list_from_arch_addr_data(Arena *arena, U64 *bytes_processed_coun
|
||||
//- rjf: opening handles & correllation with module
|
||||
|
||||
internal DASM_Handle
|
||||
dasm_handle_from_ctrl_process_range(CTRL_MachineID machine, CTRL_Handle process, Rng1U64 vaddr_range)
|
||||
dasm_handle_from_ctrl_process_range(CTRL_MachineID machine, DMN_Handle process, Rng1U64 vaddr_range)
|
||||
{
|
||||
DASM_Handle result = {0};
|
||||
if(machine != 0 && process.u64[0] != 0)
|
||||
@@ -389,7 +389,7 @@ dasm_decode_thread_entry_point(void *p)
|
||||
//- rjf: request -> ctrl info
|
||||
B32 is_first_to_task = 0;
|
||||
CTRL_MachineID ctrl_machine_id = 0;
|
||||
CTRL_Handle ctrl_process = {0};
|
||||
DMN_Handle ctrl_process = {0};
|
||||
Rng1U64 vaddr_range = {0};
|
||||
Architecture arch = Architecture_Null;
|
||||
U64 *bytes_processed_counter = 0;
|
||||
|
||||
+3
-3
@@ -77,7 +77,7 @@ struct DASM_Entity
|
||||
|
||||
// rjf: key info
|
||||
CTRL_MachineID machine_id;
|
||||
CTRL_Handle process;
|
||||
DMN_Handle process;
|
||||
Rng1U64 vaddr_range;
|
||||
U64 id;
|
||||
|
||||
@@ -114,7 +114,7 @@ typedef struct DASM_BinaryInfo DASM_BinaryInfo;
|
||||
struct DASM_BinaryInfo
|
||||
{
|
||||
CTRL_MachineID machine_id;
|
||||
CTRL_Handle process;
|
||||
DMN_Handle process;
|
||||
Rng1U64 vaddr_range;
|
||||
U64 bytes_processed;
|
||||
U64 bytes_to_process;
|
||||
@@ -187,7 +187,7 @@ internal DASM_InstChunkList dasm_inst_chunk_list_from_arch_addr_data(Arena *aren
|
||||
//~ rjf: Cache Lookups
|
||||
|
||||
//- rjf: opening handles & correllation with module
|
||||
internal DASM_Handle dasm_handle_from_ctrl_process_range(CTRL_MachineID machine, CTRL_Handle process, Rng1U64 vaddr_range);
|
||||
internal DASM_Handle dasm_handle_from_ctrl_process_range(CTRL_MachineID machine, DMN_Handle process, Rng1U64 vaddr_range);
|
||||
|
||||
//- rjf: asking for top-level info of a handle
|
||||
internal DASM_BinaryInfo dasm_binary_info_from_handle(Arena *arena, DASM_Handle handle);
|
||||
|
||||
@@ -182,16 +182,16 @@ internal B32 dmn_detach_process(DMN_Handle process);
|
||||
//~ rjf: @dmn_os_hooks Process/Thread Reads/Writes (Implemented Per-OS)
|
||||
|
||||
//- rjf: processes
|
||||
internal U64 dmn_process_read(DMN_Handle process, Rng1U64 range, void *dst);
|
||||
internal B32 dmn_process_write(DMN_Handle process, Rng1U64 range, void *src);
|
||||
internal U64 dmn_process_read(DMN_Handle process, Rng1U64 range, void *dst);
|
||||
internal B32 dmn_process_write(DMN_Handle process, Rng1U64 range, void *src);
|
||||
#define dmn_process_read_struct(process, vaddr, ptr) dmn_process_read((process), r1u64((vaddr), (vaddr)+(sizeof(*ptr))), ptr)
|
||||
#define dmn_process_write_struct(process, vaddr, ptr) dmn_process_write((process), r1u64((vaddr), (vaddr)+(sizeof(*ptr))), ptr)
|
||||
|
||||
//- rjf: threads
|
||||
internal U64 dmn_stack_base_vaddr_from_thread(DMN_Handle handle);
|
||||
internal U64 dmn_tls_root_vaddr_from_thread(DMN_Handle handle);
|
||||
internal B32 dmn_thread_read_reg_block(DMN_Handle handle, void *reg_block);
|
||||
internal B32 dmn_thread_write_reg_block(DMN_Handle handle, void *reg_block);
|
||||
internal U64 dmn_stack_base_vaddr_from_thread(DMN_Handle handle);
|
||||
internal U64 dmn_tls_root_vaddr_from_thread(DMN_Handle handle);
|
||||
internal B32 dmn_thread_read_reg_block(DMN_Handle handle, void *reg_block);
|
||||
internal B32 dmn_thread_write_reg_block(DMN_Handle handle, void *reg_block);
|
||||
|
||||
////////////////////////////////
|
||||
//~ rjf: @dmn_os_hooks System Process Listing (Implemented Per-OS)
|
||||
|
||||
@@ -2025,7 +2025,7 @@ df_entity_equip_ctrl_machine_id(DF_Entity *entity, CTRL_MachineID machine_id)
|
||||
}
|
||||
|
||||
internal void
|
||||
df_entity_equip_ctrl_handle(DF_Entity *entity, CTRL_Handle handle)
|
||||
df_entity_equip_ctrl_handle(DF_Entity *entity, DMN_Handle handle)
|
||||
{
|
||||
df_require_entity_nonnil(entity, return);
|
||||
entity->ctrl_handle = handle;
|
||||
@@ -2419,7 +2419,7 @@ df_machine_entity_from_machine_id(CTRL_MachineID machine_id)
|
||||
}
|
||||
|
||||
internal DF_Entity *
|
||||
df_entity_from_ctrl_handle(CTRL_MachineID machine_id, CTRL_Handle handle)
|
||||
df_entity_from_ctrl_handle(CTRL_MachineID machine_id, DMN_Handle handle)
|
||||
{
|
||||
DF_Entity *result = &df_g_nil_entity;
|
||||
if(handle.u64[0] != 0)
|
||||
@@ -6417,7 +6417,7 @@ df_core_init(CmdLine *cmdln, DF_StateDeltaHistory *hist)
|
||||
// rjf: set up initial entities
|
||||
{
|
||||
DF_Entity *local_machine = df_entity_alloc(0, df_state->entities_root, DF_EntityKind_Machine);
|
||||
df_entity_equip_ctrl_machine_id(local_machine, CTRL_MachineID_Client);
|
||||
df_entity_equip_ctrl_machine_id(local_machine, CTRL_MachineID_Local);
|
||||
df_entity_equip_name(0, local_machine, str8_lit("This PC"));
|
||||
}
|
||||
|
||||
@@ -7512,7 +7512,7 @@ df_core_begin_frame(Arena *arena, DF_CmdList *cmds, F32 dt)
|
||||
}break;
|
||||
case DF_CoreCmdKind_FreezeLocalMachine:
|
||||
{
|
||||
CTRL_MachineID machine_id = CTRL_MachineID_Client;
|
||||
CTRL_MachineID machine_id = CTRL_MachineID_Local;
|
||||
DF_CmdParams params = df_cmd_params_zero();
|
||||
params.entity = df_handle_from_entity(df_machine_entity_from_machine_id(machine_id));
|
||||
df_cmd_params_mark_slot(¶ms, DF_CmdParamSlot_Entity);
|
||||
@@ -7520,7 +7520,7 @@ df_core_begin_frame(Arena *arena, DF_CmdList *cmds, F32 dt)
|
||||
}break;
|
||||
case DF_CoreCmdKind_ThawLocalMachine:
|
||||
{
|
||||
CTRL_MachineID machine_id = CTRL_MachineID_Client;
|
||||
CTRL_MachineID machine_id = CTRL_MachineID_Local;
|
||||
DF_CmdParams params = df_cmd_params_zero();
|
||||
params.entity = df_handle_from_entity(df_machine_entity_from_machine_id(machine_id));
|
||||
df_cmd_params_mark_slot(¶ms, DF_CmdParamSlot_Entity);
|
||||
|
||||
@@ -447,7 +447,7 @@ struct DF_Entity
|
||||
|
||||
// rjf: ctrl entity equipment
|
||||
CTRL_MachineID ctrl_machine_id;
|
||||
CTRL_Handle ctrl_handle;
|
||||
DMN_Handle ctrl_handle;
|
||||
Architecture arch;
|
||||
U32 ctrl_id;
|
||||
U64 stack_base;
|
||||
@@ -1447,7 +1447,7 @@ internal void df_entity_equip_cfg_src(DF_Entity *entity, DF_CfgSrc cfg_src);
|
||||
|
||||
//- rjf: control layer correllation equipment
|
||||
internal void df_entity_equip_ctrl_machine_id(DF_Entity *entity, CTRL_MachineID machine_id);
|
||||
internal void df_entity_equip_ctrl_handle(DF_Entity *entity, CTRL_Handle handle);
|
||||
internal void df_entity_equip_ctrl_handle(DF_Entity *entity, DMN_Handle handle);
|
||||
internal void df_entity_equip_arch(DF_Entity *entity, Architecture arch);
|
||||
internal void df_entity_equip_ctrl_id(DF_Entity *entity, U32 id);
|
||||
internal void df_entity_equip_stack_base(DF_Entity *entity, U64 stack_base);
|
||||
@@ -1468,7 +1468,7 @@ internal DF_Entity *df_entity_root(void);
|
||||
internal DF_EntityList df_push_entity_list_with_kind(Arena *arena, DF_EntityKind kind);
|
||||
internal DF_Entity *df_entity_from_id(DF_EntityID id);
|
||||
internal DF_Entity *df_machine_entity_from_machine_id(CTRL_MachineID machine_id);
|
||||
internal DF_Entity *df_entity_from_ctrl_handle(CTRL_MachineID machine_id, CTRL_Handle handle);
|
||||
internal DF_Entity *df_entity_from_ctrl_handle(CTRL_MachineID machine_id, DMN_Handle handle);
|
||||
internal DF_Entity *df_entity_from_ctrl_id(CTRL_MachineID machine_id, U32 id);
|
||||
internal DF_Entity *df_entity_from_name_and_kind(String8 string, DF_EntityKind kind);
|
||||
internal DF_Entity *df_entity_from_u64_and_kind(U64 u64, DF_EntityKind kind);
|
||||
|
||||
@@ -46,7 +46,7 @@
|
||||
#include "demon2/demon2_inc.h"
|
||||
#include "eval/eval_inc.h"
|
||||
#include "unwind/unwind.h"
|
||||
#include "ctrl2/ctrl2_inc.h"
|
||||
#include "ctrl/ctrl_inc.h"
|
||||
|
||||
//- rjf: [c]
|
||||
#include "base/base_inc.c"
|
||||
@@ -74,7 +74,7 @@
|
||||
#include "demon2/demon2_inc.c"
|
||||
#include "eval/eval_inc.c"
|
||||
#include "unwind/unwind.c"
|
||||
#include "ctrl2/ctrl2_inc.c"
|
||||
#include "ctrl/ctrl_inc.c"
|
||||
|
||||
////////////////////////////////
|
||||
//~ rjf: Entry Point
|
||||
|
||||
Reference in New Issue
Block a user