diff options
Diffstat (limited to 'plugins/arm/register.c')
| -rw-r--r-- | plugins/arm/register.c | 97 | 
1 files changed, 44 insertions, 53 deletions
| diff --git a/plugins/arm/register.c b/plugins/arm/register.c index 5d24806..6a58d59 100644 --- a/plugins/arm/register.c +++ b/plugins/arm/register.c @@ -46,22 +46,22 @@ static void g_arm_register_dispose(GArmRegister *);  /* Procède à la libération totale de la mémoire. */  static void g_arm_register_finalize(GArmRegister *); -/* Produit une empreinte à partir d'un registre. */ -static guint g_arm_register_hash(const GArmRegister *); -/* Compare un registre avec un autre. */ -static int g_arm_register_compare(const GArmRegister *, const GArmRegister *); +/* --------------------- IMPLEMENTATION DES FONCTIONS DE CLASSE --------------------- */ -/* --------------------- TRANSPOSITIONS VIA CACHE DES REGISTRES --------------------- */ +/* Produit une empreinte à partir d'un registre. */ +static guint g_arm_register_hash(const GArmRegister *); +/* Compare un registre avec un autre. */ +static int g_arm_register_compare(const GArmRegister *, const GArmRegister *); -/* Charge un registre depuis une mémoire tampon. */ -static GArchRegister *g_arm_register_unserialize(GArmRegister *, GAsmStorage *, packed_buffer_t *); +/* Charge un contenu depuis une mémoire tampon. */ +static bool g_arm_register_load(GArmRegister *, GObjectStorage *, packed_buffer_t *); -/* Sauvegarde un registre dans une mémoire tampon. */ -static bool g_arm_register_serialize(const GArmRegister *, GAsmStorage *, packed_buffer_t *); +/* Sauvegarde un contenu dans une mémoire tampon. */ +static bool g_arm_register_store(GArmRegister *, GObjectStorage *, packed_buffer_t *); @@ -88,20 +88,21 @@ G_DEFINE_TYPE(GArmRegister, g_arm_register, G_TYPE_ARCH_REGISTER);  static void g_arm_register_class_init(GArmRegisterClass *klass)  { -    GObjectClass *object_class;             /* Autre version de la classe  */ -    GArchRegisterClass *reg_class;          /* Classe de haut niveau       */ +    GObjectClass *object;                   /* Autre version de la classe  */ +    GArchRegisterClass *reg;                /* Classe de haut niveau       */ -    object_class = G_OBJECT_CLASS(klass); +    object = G_OBJECT_CLASS(klass); -    object_class->dispose = (GObjectFinalizeFunc/* ! */)g_arm_register_dispose; -    object_class->finalize = (GObjectFinalizeFunc)g_arm_register_finalize; +    object->dispose = (GObjectFinalizeFunc/* ! */)g_arm_register_dispose; +    object->finalize = (GObjectFinalizeFunc)g_arm_register_finalize; -    reg_class = G_ARCH_REGISTER_CLASS(klass); +    reg = G_ARCH_REGISTER_CLASS(klass); -    reg_class->hash = (reg_hash_fc)g_arm_register_hash; -    reg_class->compare = (reg_compare_fc)g_arm_register_compare; -    reg_class->unserialize = (reg_unserialize_fc)g_arm_register_unserialize; -    reg_class->serialize = (reg_serialize_fc)g_arm_register_serialize; +    reg->hash = (reg_hash_fc)g_arm_register_hash; +    reg->compare = (reg_compare_fc)g_arm_register_compare; + +    reg->load = (load_register_fc)g_arm_register_load; +    reg->store = (store_register_fc)g_arm_register_store;  } @@ -181,6 +182,12 @@ uint8_t g_arm_register_get_index(const GArmRegister *reg)  } + +/* ---------------------------------------------------------------------------------- */ +/*                       IMPLEMENTATION DES FONCTIONS DE CLASSE                       */ +/* ---------------------------------------------------------------------------------- */ + +  /******************************************************************************  *                                                                             *  *  Paramètres  : reg = opérande à consulter pour le calcul.                   * @@ -224,19 +231,13 @@ static int g_arm_register_compare(const GArmRegister *a, const GArmRegister *b)  } - -/* ---------------------------------------------------------------------------------- */ -/*                       TRANSPOSITIONS VIA CACHE DES OPERANDES                       */ -/* ---------------------------------------------------------------------------------- */ - -  /******************************************************************************  *                                                                             * -*  Paramètres  : reg     = registre d'architecture à constituer.              * -*                storage = mécanisme de sauvegarde à manipuler.               * -*                pbuf    = zone tampon à remplir.                             * +*  Paramètres  : reg     = élément GLib à constuire.                          * +*                storage = conservateur de données à manipuler ou NULL.       * +*                pbuf    = zone tampon à lire.                                *  *                                                                             * -*  Description : Charge un registre depuis une mémoire tampon.                * +*  Description : Charge un contenu depuis une mémoire tampon.                 *  *                                                                             *  *  Retour      : Bilan de l'opération.                                        *  *                                                                             * @@ -244,24 +245,17 @@ static int g_arm_register_compare(const GArmRegister *a, const GArmRegister *b)  *                                                                             *  ******************************************************************************/ -static GArchRegister *g_arm_register_unserialize(GArmRegister *reg, GAsmStorage *storage, packed_buffer_t *pbuf) +static bool g_arm_register_load(GArmRegister *reg, GObjectStorage *storage, packed_buffer_t *pbuf)  { -    GArchRegister *result;                  /* Instance à retourner        */ +    bool result;                            /* Bilan à retourner           */      GArchRegisterClass *parent;             /* Classe parente à consulter  */ -    /** -     * L'indice de registre est utilisé par les sous-classes pour la regénération -     * à partir du cache. -     * -     * Il est donc lu depuis le tempon avant l'appel à cette fonction, et est -     * ainsi déjà pris en compte. -     */ - -    result = G_ARCH_REGISTER(reg); -      parent = G_ARCH_REGISTER_CLASS(g_arm_register_parent_class); -    result = parent->unserialize(result, storage, pbuf); +    result = parent->load(G_ARCH_REGISTER(reg), storage, pbuf); + +    if (result) +        result = extract_packed_buffer(pbuf, ®->index, sizeof(uint8_t), true);      return result; @@ -270,11 +264,11 @@ static GArchRegister *g_arm_register_unserialize(GArmRegister *reg, GAsmStorage  /******************************************************************************  *                                                                             * -*  Paramètres  : reg     = registre d'architecture à consulter.               * -*                storage = mécanisme de sauvegarde à manipuler.               * +*  Paramètres  : reg     = élément GLib à consulter.                          * +*                storage = conservateur de données à manipuler ou NULL.       *  *                pbuf    = zone tampon à remplir.                             *  *                                                                             * -*  Description : Sauvegarde un registre dans une mémoire tampon.              * +*  Description : Sauvegarde un contenu dans une mémoire tampon.               *  *                                                                             *  *  Retour      : Bilan de l'opération.                                        *  *                                                                             * @@ -282,20 +276,17 @@ static GArchRegister *g_arm_register_unserialize(GArmRegister *reg, GAsmStorage  *                                                                             *  ******************************************************************************/ -static bool g_arm_register_serialize(const GArmRegister *reg, GAsmStorage *storage, packed_buffer_t *pbuf) +static bool g_arm_register_store(GArmRegister *reg, GObjectStorage *storage, packed_buffer_t *pbuf)  {      bool result;                            /* Bilan à retourner           */      GArchRegisterClass *parent;             /* Classe parente à consulter  */ -    result = extend_packed_buffer(pbuf, ®->index, sizeof(uint8_t), false); - -    if (result) -    { -        parent = G_ARCH_REGISTER_CLASS(g_arm_register_parent_class); +    parent = G_ARCH_REGISTER_CLASS(g_arm_register_parent_class); -        result = parent->serialize(G_ARCH_REGISTER(reg), storage, pbuf); +    result = parent->store(G_ARCH_REGISTER(reg), storage, pbuf); -    } +    if (result) +        result = extend_packed_buffer(pbuf, ®->index, sizeof(uint8_t), false);      return result; | 
