mirror of
https://github.com/Ed94/raddebugger.git
synced 2026-08-06 13:58:40 +00:00
use set/unset breakpoint events to build bp entities in ctrl entity tree
This commit is contained in:
+2
-1
@@ -14,7 +14,8 @@ CTRL_EntityKindTable:
|
|||||||
{Module module "Module" }
|
{Module module "Module" }
|
||||||
{EntryPoint entry_point "Entry Point" }
|
{EntryPoint entry_point "Entry Point" }
|
||||||
{DebugInfoPath debug_info_path "Debug Info Path" }
|
{DebugInfoPath debug_info_path "Debug Info Path" }
|
||||||
{PendingThreadName pending_thread_name "Pending Thread Name" }
|
{PendingThreadName pending_thread_name "Pending Thread Name" }
|
||||||
|
{Breakpoint breakpoint "Breakpoint" }
|
||||||
}
|
}
|
||||||
|
|
||||||
@enum CTRL_EntityKind:
|
@enum CTRL_EntityKind:
|
||||||
|
|||||||
@@ -1312,6 +1312,30 @@ ctrl_entity_store_apply_events(CTRL_EntityStore *store, CTRL_EventList *list)
|
|||||||
ctrl_entity_equip_string(store, debug_info_path, event->string);
|
ctrl_entity_equip_string(store, debug_info_path, event->string);
|
||||||
debug_info_path->timestamp = event->timestamp;
|
debug_info_path->timestamp = event->timestamp;
|
||||||
}break;
|
}break;
|
||||||
|
|
||||||
|
//- rjf: dynamic, program-created breakpoints
|
||||||
|
case CTRL_EventKind_SetBreakpoint:
|
||||||
|
{
|
||||||
|
CTRL_Entity *process = ctrl_entity_from_handle(store, event->parent);
|
||||||
|
CTRL_Entity *bp = ctrl_entity_alloc(store, process, CTRL_EntityKind_Breakpoint, Arch_Null, ctrl_handle_zero(), 0);
|
||||||
|
bp->vaddr_range = event->vaddr_rng;
|
||||||
|
bp->bp_flags = event->bp_flags;
|
||||||
|
}break;
|
||||||
|
case CTRL_EventKind_UnsetBreakpoint:
|
||||||
|
{
|
||||||
|
CTRL_Entity *process = ctrl_entity_from_handle(store, event->parent);
|
||||||
|
for(CTRL_Entity *child = process->first; child != &ctrl_entity_nil; child = child->next)
|
||||||
|
{
|
||||||
|
if(child->kind == CTRL_EntityKind_Breakpoint &&
|
||||||
|
child->vaddr_range.min == event->vaddr_rng.min &&
|
||||||
|
child->vaddr_range.max == event->vaddr_rng.max &&
|
||||||
|
child->bp_flags == event->bp_flags)
|
||||||
|
{
|
||||||
|
ctrl_entity_release(store, child);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -4369,6 +4393,8 @@ ctrl_thread__next_dmn_event(Arena *arena, DMN_CtrlCtx *ctrl_ctx, CTRL_Msg *msg,
|
|||||||
{
|
{
|
||||||
CTRL_Event *out_evt = ctrl_event_list_push(scratch.arena, &evts);
|
CTRL_Event *out_evt = ctrl_event_list_push(scratch.arena, &evts);
|
||||||
out_evt->kind = CTRL_EventKind_SetBreakpoint;
|
out_evt->kind = CTRL_EventKind_SetBreakpoint;
|
||||||
|
out_evt->entity = ctrl_handle_make(CTRL_MachineID_Local, event->thread);
|
||||||
|
out_evt->parent = ctrl_handle_make(CTRL_MachineID_Local, event->process);
|
||||||
out_evt->vaddr_rng = r1u64(event->address, event->address+event->size);
|
out_evt->vaddr_rng = r1u64(event->address, event->address+event->size);
|
||||||
out_evt->bp_flags = ctrl_user_breakpoint_flags_from_dmn_trap_flags(event->flags);
|
out_evt->bp_flags = ctrl_user_breakpoint_flags_from_dmn_trap_flags(event->flags);
|
||||||
}break;
|
}break;
|
||||||
@@ -4376,6 +4402,8 @@ ctrl_thread__next_dmn_event(Arena *arena, DMN_CtrlCtx *ctrl_ctx, CTRL_Msg *msg,
|
|||||||
{
|
{
|
||||||
CTRL_Event *out_evt = ctrl_event_list_push(scratch.arena, &evts);
|
CTRL_Event *out_evt = ctrl_event_list_push(scratch.arena, &evts);
|
||||||
out_evt->kind = CTRL_EventKind_UnsetBreakpoint;
|
out_evt->kind = CTRL_EventKind_UnsetBreakpoint;
|
||||||
|
out_evt->entity = ctrl_handle_make(CTRL_MachineID_Local, event->thread);
|
||||||
|
out_evt->parent = ctrl_handle_make(CTRL_MachineID_Local, event->process);
|
||||||
out_evt->vaddr_rng = r1u64(event->address, event->address+event->size);
|
out_evt->vaddr_rng = r1u64(event->address, event->address+event->size);
|
||||||
out_evt->bp_flags = ctrl_user_breakpoint_flags_from_dmn_trap_flags(event->flags);
|
out_evt->bp_flags = ctrl_user_breakpoint_flags_from_dmn_trap_flags(event->flags);
|
||||||
}break;
|
}break;
|
||||||
|
|||||||
+48
-47
@@ -12,6 +12,53 @@ typedef U64 CTRL_MachineID;
|
|||||||
|
|
||||||
#define CTRL_MachineID_Local (1)
|
#define CTRL_MachineID_Local (1)
|
||||||
|
|
||||||
|
////////////////////////////////
|
||||||
|
//~ rjf: User Breakpoint Types
|
||||||
|
|
||||||
|
typedef U32 CTRL_UserBreakpointFlags;
|
||||||
|
enum
|
||||||
|
{
|
||||||
|
CTRL_UserBreakpointFlag_BreakOnWrite = (1<<0),
|
||||||
|
CTRL_UserBreakpointFlag_BreakOnRead = (1<<1),
|
||||||
|
CTRL_UserBreakpointFlag_BreakOnExecute = (1<<2),
|
||||||
|
};
|
||||||
|
|
||||||
|
typedef enum CTRL_UserBreakpointKind
|
||||||
|
{
|
||||||
|
CTRL_UserBreakpointKind_Null,
|
||||||
|
CTRL_UserBreakpointKind_FileNameAndLineColNumber,
|
||||||
|
CTRL_UserBreakpointKind_Expression,
|
||||||
|
CTRL_UserBreakpointKind_COUNT
|
||||||
|
}
|
||||||
|
CTRL_UserBreakpointKind;
|
||||||
|
|
||||||
|
typedef struct CTRL_UserBreakpoint CTRL_UserBreakpoint;
|
||||||
|
struct CTRL_UserBreakpoint
|
||||||
|
{
|
||||||
|
CTRL_UserBreakpointKind kind;
|
||||||
|
CTRL_UserBreakpointFlags flags;
|
||||||
|
U64 id;
|
||||||
|
String8 string;
|
||||||
|
TxtPt pt;
|
||||||
|
U64 size;
|
||||||
|
String8 condition;
|
||||||
|
};
|
||||||
|
|
||||||
|
typedef struct CTRL_UserBreakpointNode CTRL_UserBreakpointNode;
|
||||||
|
struct CTRL_UserBreakpointNode
|
||||||
|
{
|
||||||
|
CTRL_UserBreakpointNode *next;
|
||||||
|
CTRL_UserBreakpoint v;
|
||||||
|
};
|
||||||
|
|
||||||
|
typedef struct CTRL_UserBreakpointList CTRL_UserBreakpointList;
|
||||||
|
struct CTRL_UserBreakpointList
|
||||||
|
{
|
||||||
|
CTRL_UserBreakpointNode *first;
|
||||||
|
CTRL_UserBreakpointNode *last;
|
||||||
|
U64 count;
|
||||||
|
};
|
||||||
|
|
||||||
////////////////////////////////
|
////////////////////////////////
|
||||||
//~ rjf: Entity Handle Types
|
//~ rjf: Entity Handle Types
|
||||||
|
|
||||||
@@ -62,6 +109,7 @@ struct CTRL_Entity
|
|||||||
Rng1U64 vaddr_range;
|
Rng1U64 vaddr_range;
|
||||||
U64 stack_base;
|
U64 stack_base;
|
||||||
U64 timestamp;
|
U64 timestamp;
|
||||||
|
CTRL_UserBreakpointFlags bp_flags;
|
||||||
String8 string;
|
String8 string;
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -256,53 +304,6 @@ struct CTRL_Spoof
|
|||||||
U64 new_ip_value;
|
U64 new_ip_value;
|
||||||
};
|
};
|
||||||
|
|
||||||
////////////////////////////////
|
|
||||||
//~ rjf: User Breakpoint Types
|
|
||||||
|
|
||||||
typedef U32 CTRL_UserBreakpointFlags;
|
|
||||||
enum
|
|
||||||
{
|
|
||||||
CTRL_UserBreakpointFlag_BreakOnWrite = (1<<0),
|
|
||||||
CTRL_UserBreakpointFlag_BreakOnRead = (1<<1),
|
|
||||||
CTRL_UserBreakpointFlag_BreakOnExecute = (1<<2),
|
|
||||||
};
|
|
||||||
|
|
||||||
typedef enum CTRL_UserBreakpointKind
|
|
||||||
{
|
|
||||||
CTRL_UserBreakpointKind_Null,
|
|
||||||
CTRL_UserBreakpointKind_FileNameAndLineColNumber,
|
|
||||||
CTRL_UserBreakpointKind_Expression,
|
|
||||||
CTRL_UserBreakpointKind_COUNT
|
|
||||||
}
|
|
||||||
CTRL_UserBreakpointKind;
|
|
||||||
|
|
||||||
typedef struct CTRL_UserBreakpoint CTRL_UserBreakpoint;
|
|
||||||
struct CTRL_UserBreakpoint
|
|
||||||
{
|
|
||||||
CTRL_UserBreakpointKind kind;
|
|
||||||
CTRL_UserBreakpointFlags flags;
|
|
||||||
U64 id;
|
|
||||||
String8 string;
|
|
||||||
TxtPt pt;
|
|
||||||
U64 size;
|
|
||||||
String8 condition;
|
|
||||||
};
|
|
||||||
|
|
||||||
typedef struct CTRL_UserBreakpointNode CTRL_UserBreakpointNode;
|
|
||||||
struct CTRL_UserBreakpointNode
|
|
||||||
{
|
|
||||||
CTRL_UserBreakpointNode *next;
|
|
||||||
CTRL_UserBreakpoint v;
|
|
||||||
};
|
|
||||||
|
|
||||||
typedef struct CTRL_UserBreakpointList CTRL_UserBreakpointList;
|
|
||||||
struct CTRL_UserBreakpointList
|
|
||||||
{
|
|
||||||
CTRL_UserBreakpointNode *first;
|
|
||||||
CTRL_UserBreakpointNode *last;
|
|
||||||
U64 count;
|
|
||||||
};
|
|
||||||
|
|
||||||
////////////////////////////////
|
////////////////////////////////
|
||||||
//~ rjf: Evaluation Spaces
|
//~ rjf: Evaluation Spaces
|
||||||
|
|
||||||
|
|||||||
@@ -4,7 +4,7 @@
|
|||||||
//- GENERATED CODE
|
//- GENERATED CODE
|
||||||
|
|
||||||
C_LINKAGE_BEGIN
|
C_LINKAGE_BEGIN
|
||||||
String8 ctrl_entity_kind_code_name_table[9] =
|
String8 ctrl_entity_kind_code_name_table[10] =
|
||||||
{
|
{
|
||||||
{0},
|
{0},
|
||||||
str8_lit_comp("root"),
|
str8_lit_comp("root"),
|
||||||
@@ -15,9 +15,10 @@ str8_lit_comp("module"),
|
|||||||
str8_lit_comp("entry_point"),
|
str8_lit_comp("entry_point"),
|
||||||
str8_lit_comp("debug_info_path"),
|
str8_lit_comp("debug_info_path"),
|
||||||
str8_lit_comp("pending_thread_name"),
|
str8_lit_comp("pending_thread_name"),
|
||||||
|
str8_lit_comp("breakpoint"),
|
||||||
};
|
};
|
||||||
|
|
||||||
String8 ctrl_entity_kind_display_string_table[9] =
|
String8 ctrl_entity_kind_display_string_table[10] =
|
||||||
{
|
{
|
||||||
{0},
|
{0},
|
||||||
str8_lit_comp("Root"),
|
str8_lit_comp("Root"),
|
||||||
@@ -28,6 +29,7 @@ str8_lit_comp("Module"),
|
|||||||
str8_lit_comp("EntryPoint"),
|
str8_lit_comp("EntryPoint"),
|
||||||
str8_lit_comp("DebugInfoPath"),
|
str8_lit_comp("DebugInfoPath"),
|
||||||
str8_lit_comp("PendingThreadName"),
|
str8_lit_comp("PendingThreadName"),
|
||||||
|
str8_lit_comp("Breakpoint"),
|
||||||
};
|
};
|
||||||
|
|
||||||
U32 ctrl_exception_code_kind_code_table[38] =
|
U32 ctrl_exception_code_kind_code_table[38] =
|
||||||
|
|||||||
@@ -17,6 +17,7 @@ CTRL_EntityKind_Module,
|
|||||||
CTRL_EntityKind_EntryPoint,
|
CTRL_EntityKind_EntryPoint,
|
||||||
CTRL_EntityKind_DebugInfoPath,
|
CTRL_EntityKind_DebugInfoPath,
|
||||||
CTRL_EntityKind_PendingThreadName,
|
CTRL_EntityKind_PendingThreadName,
|
||||||
|
CTRL_EntityKind_Breakpoint,
|
||||||
CTRL_EntityKind_COUNT,
|
CTRL_EntityKind_COUNT,
|
||||||
} CTRL_EntityKind;
|
} CTRL_EntityKind;
|
||||||
|
|
||||||
@@ -64,8 +65,8 @@ CTRL_ExceptionCodeKind_COUNT,
|
|||||||
} CTRL_ExceptionCodeKind;
|
} CTRL_ExceptionCodeKind;
|
||||||
|
|
||||||
C_LINKAGE_BEGIN
|
C_LINKAGE_BEGIN
|
||||||
extern String8 ctrl_entity_kind_code_name_table[9];
|
extern String8 ctrl_entity_kind_code_name_table[10];
|
||||||
extern String8 ctrl_entity_kind_display_string_table[9];
|
extern String8 ctrl_entity_kind_display_string_table[10];
|
||||||
extern U32 ctrl_exception_code_kind_code_table[38];
|
extern U32 ctrl_exception_code_kind_code_table[38];
|
||||||
extern String8 ctrl_exception_code_kind_display_string_table[38];
|
extern String8 ctrl_exception_code_kind_display_string_table[38];
|
||||||
extern String8 ctrl_exception_code_kind_lowercase_code_string_table[38];
|
extern String8 ctrl_exception_code_kind_lowercase_code_string_table[38];
|
||||||
|
|||||||
Reference in New Issue
Block a user