diff options
author | Cyrille Bagard <nocbos@gmail.com> | 2019-05-12 22:09:53 (GMT) |
---|---|---|
committer | Cyrille Bagard <nocbos@gmail.com> | 2019-05-12 22:09:53 (GMT) |
commit | 00e93226e72bdb18853580f553e32df111422936 (patch) | |
tree | 9c346903d4506cae2df19b9314cf307c783c0cb3 /src/arch | |
parent | e44ffc323c8a9d4b446baba6e0b131107312fa84 (diff) |
Simplified the way processors are registered.
Diffstat (limited to 'src/arch')
-rw-r--r-- | src/arch/processor-int.h | 13 | ||||
-rw-r--r-- | src/arch/processor.c | 88 | ||||
-rw-r--r-- | src/arch/processor.h | 6 |
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 *); |