summaryrefslogtreecommitdiff
path: root/src/arch
diff options
context:
space:
mode:
authorCyrille Bagard <nocbos@gmail.com>2018-12-07 20:33:21 (GMT)
committerCyrille Bagard <nocbos@gmail.com>2018-12-07 20:33:21 (GMT)
commitc0af4cc392a246b05d41b7b7c05bbcd8b0cfb39e (patch)
tree0d645c71c40fc4b625271d0ab1ef8e7ebab04075 /src/arch
parenta13d12c758184449bf3305785ef33273802a761c (diff)
Relied on GObject introspection and dynamic gtypes to inherit in Python.
Diffstat (limited to 'src/arch')
-rw-r--r--src/arch/processor.c49
-rw-r--r--src/arch/processor.h6
2 files changed, 39 insertions, 16 deletions
diff --git a/src/arch/processor.c b/src/arch/processor.c
index 4450208..4d7bacc 100644
--- a/src/arch/processor.c
+++ b/src/arch/processor.c
@@ -69,6 +69,8 @@ static void g_arch_processor_dispose(GArchProcessor *);
/* Procède à la libération totale de la mémoire. */
static void g_arch_processor_finalize(GArchProcessor *);
+/* Fournit un contexte générique pour l'exécution du processeur. */
+static GProcContext *_g_arch_processor_get_context(const GArchProcessor *);
@@ -125,6 +127,8 @@ static void g_arch_processor_class_init(GArchProcessorClass *klass)
object->dispose = (GObjectFinalizeFunc/* ! */)g_arch_processor_dispose;
object->finalize = (GObjectFinalizeFunc)g_arch_processor_finalize;
+ klass->get_ctx = _g_arch_processor_get_context;
+
g_signal_new("changed",
G_TYPE_ARCH_PROCESSOR,
G_SIGNAL_RUN_LAST,
@@ -225,28 +229,21 @@ static void g_arch_processor_finalize(GArchProcessor *proc)
/******************************************************************************
* *
-* Paramètres : proc = architecture visée par la procédure. *
+* Paramètres : proc = architecture, spectatrice ici. *
* *
-* Description : Fournit un contexte propre au processeur d'une architecture. *
+* Description : Fournit un contexte générique pour l'exécution du processeur.*
* *
-* Retour : Nouveau contexte mis à disposition. *
+* Retour : Contexte mis en place. *
* *
* Remarques : - *
* *
******************************************************************************/
-GProcContext *g_arch_processor_get_context(const GArchProcessor *proc)
+static GProcContext *_g_arch_processor_get_context(const GArchProcessor *proc)
{
- GProcContext *result; /* Contexte à retourner */
- GArchProcessorClass *class; /* Classe de l'instance active */
+ GProcContext *result; /* Instance à retourner */
- class = G_ARCH_PROCESSOR_GET_CLASS(proc);
-
- if (class->get_ctx != NULL)
- result = class->get_ctx(proc);
-
- else
- result = NULL;
+ result = g_object_new(G_TYPE_PROC_CONTEXT, NULL);
return result;
@@ -331,6 +328,32 @@ bool g_arch_processor_has_virtual_space(const GArchProcessor *proc)
/******************************************************************************
* *
+* Paramètres : proc = architecture visée par la procédure. *
+* *
+* Description : Fournit un contexte propre au processeur d'une architecture. *
+* *
+* Retour : Nouveau contexte mis à disposition. *
+* *
+* Remarques : - *
+* *
+******************************************************************************/
+
+GProcContext *g_arch_processor_get_context(const GArchProcessor *proc)
+{
+ GProcContext *result; /* Contexte à retourner */
+ GArchProcessorClass *class; /* Classe de l'instance active */
+
+ class = G_ARCH_PROCESSOR_GET_CLASS(proc);
+
+ result = class->get_ctx(proc);
+
+ return result;
+
+}
+
+
+/******************************************************************************
+* *
* Paramètres : proc = architecture visée par la procédure. *
* ctx = contexte lié à l'exécution du processeur. *
* content = flux de données à analyser. *
diff --git a/src/arch/processor.h b/src/arch/processor.h
index 24d9287..26eddb1 100644
--- a/src/arch/processor.h
+++ b/src/arch/processor.h
@@ -55,9 +55,6 @@ typedef struct _GArchProcessorClass GArchProcessorClass;
/* Indique le type défini pour un processeur d'architecture. */
GType g_arch_processor_get_type(void);
-/* Fournit un contexte propre au processeur d'une architecture. */
-GProcContext *g_arch_processor_get_context(const GArchProcessor *);
-
/* Fournit le boustime du processeur d'une architecture. */
SourceEndian g_arch_processor_get_endianness(const GArchProcessor *);
@@ -70,6 +67,9 @@ MemoryDataSize g_arch_processor_get_instruction_min_size(const GArchProcessor *)
/* Indique si l'architecture possède un espace virtuel ou non. */
bool g_arch_processor_has_virtual_space(const GArchProcessor *);
+/* Fournit un contexte propre au processeur d'une architecture. */
+GProcContext *g_arch_processor_get_context(const GArchProcessor *);
+
/* Désassemble une instruction dans un flux de données. */
GArchInstruction *g_arch_processor_disassemble(const GArchProcessor *, GProcContext *, const GBinContent *, vmpa2t *, GExeFormat *);