summaryrefslogtreecommitdiff
path: root/src/arch
diff options
context:
space:
mode:
authorCyrille Bagard <nocbos@gmail.com>2019-05-12 22:09:53 (GMT)
committerCyrille Bagard <nocbos@gmail.com>2019-05-12 22:09:53 (GMT)
commit00e93226e72bdb18853580f553e32df111422936 (patch)
tree9c346903d4506cae2df19b9314cf307c783c0cb3 /src/arch
parente44ffc323c8a9d4b446baba6e0b131107312fa84 (diff)
Simplified the way processors are registered.
Diffstat (limited to 'src/arch')
-rw-r--r--src/arch/processor-int.h13
-rw-r--r--src/arch/processor.c88
-rw-r--r--src/arch/processor.h6
3 files changed, 98 insertions, 9 deletions
diff --git a/src/arch/processor-int.h b/src/arch/processor-int.h
index 475fadc..d29539b 100644
--- a/src/arch/processor-int.h
+++ b/src/arch/processor-int.h
@@ -66,11 +66,6 @@ struct _GArchProcessor
{
GObject parent; /* A laisser en premier */
- SourceEndian endianness; /* Boutisme de l'architecture */
- MemoryDataSize memsize; /* Taille de l'espace mémoire */
- MemoryDataSize inssize; /* Taille min. d'encodage */
- bool virt_space; /* Présence d'espace virtuel ? */
-
GArchInstruction **instructions; /* Instructions désassemblées */
size_t instr_count; /* Taille de la liste aplatie */
unsigned int stamp; /* Marque de suivi des modifs */
@@ -97,6 +92,14 @@ struct _GArchProcessorClass
{
GObjectClass parent; /* A laisser en premier */
+ const char *key; /* Désignation interne */
+ const char *desc; /* Description humaine liée */
+
+ SourceEndian endianness; /* Boutisme de l'architecture */
+ MemoryDataSize memsize; /* Taille de l'espace mémoire */
+ MemoryDataSize inssize; /* Taille min. d'encodage */
+ bool virt_space; /* Présence d'espace virtuel ? */
+
get_processor_context_fc get_ctx; /* Obtention d'un contexte #1 */
disass_instr_fc disassemble; /* Traduction en instructions */
diff --git a/src/arch/processor.c b/src/arch/processor.c
index dccd12e..644a1ca 100644
--- a/src/arch/processor.c
+++ b/src/arch/processor.c
@@ -275,6 +275,58 @@ static GProcContext *_g_arch_processor_get_context(const GArchProcessor *proc)
* *
* Paramètres : proc = processeur d'architecture à consulter. *
* *
+* Description : Fournit la désignation interne du processeur d'architecture. *
+* *
+* Retour : Simple chaîne de caractères. *
+* *
+* Remarques : - *
+* *
+******************************************************************************/
+
+const char *g_arch_processor_get_key(const GArchProcessor *proc)
+{
+ const char *result; /* Désignation à renvoyer */
+ GArchProcessorClass *class; /* Classe de l'instance */
+
+ class = G_ARCH_PROCESSOR_GET_CLASS(proc);
+
+ result = class->key;
+
+ return result;
+
+}
+
+
+/******************************************************************************
+* *
+* Paramètres : proc = processeur d'architecture à consulter. *
+* *
+* Description : Fournit le nom humain de l'architecture visée. *
+* *
+* Retour : Désignation humaine associée au processeur. *
+* *
+* Remarques : - *
+* *
+******************************************************************************/
+
+const char *g_arch_processor_get_desc(const GArchProcessor *proc)
+{
+ const char *result; /* Désignation à renvoyer */
+ GArchProcessorClass *class; /* Classe de l'instance */
+
+ class = G_ARCH_PROCESSOR_GET_CLASS(proc);
+
+ result = class->desc;
+
+ return result;
+
+}
+
+
+/******************************************************************************
+* *
+* Paramètres : proc = processeur d'architecture à consulter. *
+* *
* Description : Fournit le boustime du processeur d'une architecture. *
* *
* Retour : Boutisme associé au processeur. *
@@ -285,7 +337,14 @@ static GProcContext *_g_arch_processor_get_context(const GArchProcessor *proc)
SourceEndian g_arch_processor_get_endianness(const GArchProcessor *proc)
{
- return proc->endianness;
+ SourceEndian result; /* Boutisme à retourner */
+ GArchProcessorClass *class; /* Classe de l'instance */
+
+ class = G_ARCH_PROCESSOR_GET_CLASS(proc);
+
+ result = class->endianness;
+
+ return result;
}
@@ -304,7 +363,14 @@ SourceEndian g_arch_processor_get_endianness(const GArchProcessor *proc)
MemoryDataSize g_arch_processor_get_memory_size(const GArchProcessor *proc)
{
- return proc->memsize;
+ MemoryDataSize result; /* Taille à retourner */
+ GArchProcessorClass *class; /* Classe de l'instance */
+
+ class = G_ARCH_PROCESSOR_GET_CLASS(proc);
+
+ result = class->memsize;
+
+ return result;
}
@@ -323,7 +389,14 @@ MemoryDataSize g_arch_processor_get_memory_size(const GArchProcessor *proc)
MemoryDataSize g_arch_processor_get_instruction_min_size(const GArchProcessor *proc)
{
- return proc->inssize;
+ MemoryDataSize result; /* Taille à retourner */
+ GArchProcessorClass *class; /* Classe de l'instance */
+
+ class = G_ARCH_PROCESSOR_GET_CLASS(proc);
+
+ result = class->inssize;
+
+ return result;
}
@@ -342,7 +415,14 @@ MemoryDataSize g_arch_processor_get_instruction_min_size(const GArchProcessor *p
bool g_arch_processor_has_virtual_space(const GArchProcessor *proc)
{
- return proc->virt_space;
+ bool result; /* Indication à retourner */
+ GArchProcessorClass *class; /* Classe de l'instance */
+
+ class = G_ARCH_PROCESSOR_GET_CLASS(proc);
+
+ result = class->virt_space;
+
+ return result;
}
diff --git a/src/arch/processor.h b/src/arch/processor.h
index 26eddb1..0b33a50 100644
--- a/src/arch/processor.h
+++ b/src/arch/processor.h
@@ -55,6 +55,12 @@ typedef struct _GArchProcessorClass GArchProcessorClass;
/* Indique le type défini pour un processeur d'architecture. */
GType g_arch_processor_get_type(void);
+/* Fournit la désignation interne du processeur d'architecture. */
+const char *g_arch_processor_get_key(const GArchProcessor *);
+
+/* Fournit le nom humain de l'architecture visée. */
+const char *g_arch_processor_get_desc(const GArchProcessor *);
+
/* Fournit le boustime du processeur d'une architecture. */
SourceEndian g_arch_processor_get_endianness(const GArchProcessor *);