diff options
Diffstat (limited to 'src/debug/break.h')
-rw-r--r-- | src/debug/break.h | 90 |
1 files changed, 34 insertions, 56 deletions
diff --git a/src/debug/break.h b/src/debug/break.h index 5946ad2..77d959a 100644 --- a/src/debug/break.h +++ b/src/debug/break.h @@ -25,80 +25,58 @@ #define _DEBUG_BREAK_H -#include <glib-object.h> -#include <stdbool.h> +#include "misc.h" +#include "../arch/vmpa.h" -#include "../arch/archbase.h" -#include "../glibext/proto.h" +/* Origine des points d'arrêt en place */ +typedef enum _RawBpOrigin +{ + RBO_INVALID = (0 << 0), /* Existance illégale */ + RBO_USER = (1 << 0), /* Point d'arrêt utilisateur */ + //RBO_COMPUTED = (1 << 1), /* Arrêt sur un point spécial */ + RBO_INTERNAL = (1 << 2), /* Restauration transparente */ + RBO_STEP = (1 << 3), /* Mise en place éphémère */ + RBO_COUNT -/* --------------------------- GESTION DES POINTS D'ARRET --------------------------- */ +} RawBpOrigin; -#define G_TYPE_BREAK_POINT g_break_point_get_type() -#define G_BREAK_POINT(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), g_break_point_get_type(), GBreakPoint)) -#define G_IS_BREAK_POINT(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), g_break_point_get_type())) -#define G_BREAK_POINT_GET_IFACE(inst) (G_TYPE_INSTANCE_GET_INTERFACE((inst), g_break_point_get_type(), GBreakPointIface)) -#define G_BREAK_POINT_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), G_TYPE_BREAK_POINT, GBreakPointClass)) +/* Définition d'un point d'arrêt appliqué */ +typedef struct _raw_breakpoint raw_breakpoint; -/* Propriétés d'un point d'arrêt (instance) */ -typedef struct _GBreakPoint GBreakPoint; +/* Libère le coeur d'un point d'arrêt. */ +void fini_raw_breakpoint(raw_breakpoint *); -/* Propriétés d'un point d'arrêt (classe) */ -typedef struct _GBreakPointClass GBreakPointClass; +/* Indique l'adresse du point d'arrêt dans la mémoire ciblée. */ +virt_t get_raw_breakpoint_addr(const raw_breakpoint *); +/* Fournit l'adresse d'origine d'un point d'arrêt de pas à pas. */ +virt_t get_raw_breakpoint_prev_addr(const raw_breakpoint *); -/* Indique le type défini pour des propriétés d'un point d'arrêt. */ -GType g_break_point_get_type(void); +/* Effectue une comparaison entre adresse et point d'arrêt. */ +int compare_raw_breakpoint_with_addr(const virt_t *, const raw_breakpoint **); -/* Construit un nouveau point d'arrêt. */ -GBreakPoint *g_break_point_new(vmpa_t); +/* Effectue une comparaison entre deux points d'arrêt. */ +int compare_raw_breakpoints(const raw_breakpoint **, const raw_breakpoint **); -/* Fournit l'adresse associée à un point d'arrêt. */ -vmpa_t g_break_point_get_address(const GBreakPoint *); +/* Enregistre la source d'un point d'arrêt posé. */ +void set_raw_breakpoint_origin(raw_breakpoint *, RawBpOrigin, dbg_thread_id_t, virt_t); +/* Oublie la source d'un point d'arrêt posé. */ +void unset_raw_breakpoint_origin(raw_breakpoint *, RawBpOrigin, dbg_thread_id_t); +/* Indique si le point d'arrêt correspond à une source donnée. */ +bool has_raw_breakpoint_origin(const raw_breakpoint *, RawBpOrigin, dbg_thread_id_t); -/* ---------------------------- GROUPE DE POINTS D'ARRET ---------------------------- */ +/* Indique si le point d'arrêt correspond à une origine donnée. */ +bool has_raw_breakpoint_previous_address(const raw_breakpoint *, RawBpOrigin, dbg_thread_id_t, virt_t); - -#define G_TYPE_BREAK_GROUP g_break_group_get_type() -#define G_BREAK_GROUP(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), g_break_group_get_type(), GBreakGroup)) -#define G_IS_BREAK_GROUP(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), g_break_group_get_type())) -#define G_BREAK_GROUP_GET_IFACE(inst) (G_TYPE_INSTANCE_GET_INTERFACE((inst), g_break_group_get_type(), GBreakGroupIface)) -#define G_BREAK_GROUP_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), G_TYPE_BREAK_GROUP, GBreakGroupClass)) - - -/* Propriétés d'un groupe de points d'arrêt (instance) */ -typedef struct _GBreakGroup GBreakGroup; - -/* Propriétés d'un groupe de points d'arrêt (classe) */ -typedef struct _GBreakGroupClass GBreakGroupClass; - - -/* Indique le type défini pour les groupes de points d'errêt. */ -GType g_break_group_get_type(void); - -/* Construit un nouveau groupe de points d'arrêt. */ -GBreakGroup *g_break_group_new(void); - -/* Fournit la désignation humaine associée à un groupe. */ -const char *g_break_group_get_name(const GBreakGroup *); - -/* Définit la désignation humaine à associer à un groupe. */ -void g_break_group_set_name(GBreakGroup *, const char *); - -/* Indique si une adresse donnée est gérée dans un groupe. */ -bool g_break_group_has_address(const GBreakGroup *, vmpa_t); - -/* Ajoute ou supprime un point d'arrêt dans un groupe. */ -void g_break_group_toggle_breakpoint(GBreakGroup *, vmpa_t); - -/* Parcourt l'ensemble des points d'arrêt d'un groupe donné. */ -void g_break_group_for_each(GBreakGroup *, GExtFunc, gpointer); +/* Indique si un point d'arrêt a encore une utilité. */ +bool is_breakpoint_useless(const raw_breakpoint *); |