summaryrefslogtreecommitdiff
path: root/src/arch
diff options
context:
space:
mode:
Diffstat (limited to 'src/arch')
-rw-r--r--src/arch/instruction-int.h3
-rw-r--r--src/arch/instruction.c46
-rw-r--r--src/arch/instruction.h3
-rw-r--r--src/arch/raw.c7
-rw-r--r--src/arch/undefined.c7
5 files changed, 21 insertions, 45 deletions
diff --git a/src/arch/instruction-int.h b/src/arch/instruction-int.h
index b7bd5f3..b62bba7 100644
--- a/src/arch/instruction-int.h
+++ b/src/arch/instruction-int.h
@@ -38,7 +38,7 @@ typedef const char * (* get_instruction_encoding_fc) (const GArchInstruction *);
typedef const char * (* get_instruction_keyword_fc) (GArchInstruction *, AsmSyntax );
/* Ajoute à un tampon GLib le contenu de l'instance spécifiée. */
-typedef GBufferLine * (* print_instruction_fc) (const GArchInstruction *, GBufferLine *, size_t, size_t);
+typedef GBufferLine * (* print_instruction_fc) (const GArchInstruction *, GBufferLine *, size_t, size_t, const GBinContent *);
/* Liste les registres lus et écrits par l'instruction. */
typedef void (* get_instruction_rw_regs_fc) (const GArchInstruction *, GArchRegister ***, size_t *, GArchRegister ***, size_t *);
@@ -52,7 +52,6 @@ struct _GArchInstruction
const instr_hook_fc *hooks; /* Traitements complémentaires */
- const GBinContent *content; /* Contenu binaire global */
mrange_t range; /* Emplacement en mémoire */
flat_array_t *operands; /* Liste des opérandes */
diff --git a/src/arch/instruction.c b/src/arch/instruction.c
index 807bbbb..dd5b019 100644
--- a/src/arch/instruction.c
+++ b/src/arch/instruction.c
@@ -71,10 +71,10 @@ static int g_arch_instruction_contains_addr(const GArchInstruction *, const vmpa
static BufferLineFlags g_arch_instruction_get_flags2(const GArchInstruction *, size_t, size_t);
/* Ajoute à un tampon GLib le contenu de l'instance spécifiée. */
-static void _g_arch_instruction_print(GArchInstruction *, GBufferLine *, size_t, size_t);
+static void _g_arch_instruction_print(GArchInstruction *, GBufferLine *, size_t, size_t, const GBinContent *);
/* Imprime dans une ligne de rendu le contenu représenté. */
-static void g_arch_instruction_print(GArchInstruction *, GBufferLine *, size_t, size_t);
+static void g_arch_instruction_print(GArchInstruction *, GBufferLine *, size_t, size_t, const GBinContent *);
@@ -191,9 +191,6 @@ static void g_arch_instruction_generator_interface_init(GLineGeneratorInterface
static void g_arch_instruction_dispose(GArchInstruction *instr)
{
- if (instr->content != NULL)
- g_object_unref(G_OBJECT(instr->content));
-
G_OBJECT_CLASS(g_arch_instruction_parent_class)->dispose(G_OBJECT(instr));
}
@@ -328,27 +325,6 @@ void g_arch_instruction_call_hook(GArchInstruction *instr, InstrProcessHook type
/******************************************************************************
* *
* Paramètres : instr = instruction quelconque à modifier. *
-* content = contenu binaire global à référencer. *
-* *
-* Description : Note le contenu du sein duquel l'instruction est issue. *
-* *
-* Retour : - *
-* *
-* Remarques : - *
-* *
-******************************************************************************/
-
-void g_arch_instruction_set_global_content(GArchInstruction *instr, const GBinContent *content)
-{
- g_object_ref(G_OBJECT(content));
- instr->content = content;
-
-}
-
-
-/******************************************************************************
-* *
-* Paramètres : instr = instruction quelconque à modifier. *
* address = adresse virtuelle et/ou position physique. *
* length = taille de l'instruction. *
* *
@@ -1155,6 +1131,7 @@ static BufferLineFlags g_arch_instruction_get_flags2(const GArchInstruction *ins
* msize = taille idéale des positions et adresses; *
* content = contenu binaire global à venir lire. *
* syntax = type de représentation demandée. *
+* content = éventuel contenu binaire brut à imprimer. *
* *
* Description : Ajoute à un tampon GLib le contenu de l'instance spécifiée. *
* *
@@ -1164,7 +1141,7 @@ static BufferLineFlags g_arch_instruction_get_flags2(const GArchInstruction *ins
* *
******************************************************************************/
-static void _g_arch_instruction_print(GArchInstruction *instr, GBufferLine *line, size_t index, size_t repeat)
+static void _g_arch_instruction_print(GArchInstruction *instr, GBufferLine *line, size_t index, size_t repeat, const GBinContent *content)
{
const char *key; /* Mot clef principal */
size_t klen; /* Taille de ce mot clef */
@@ -1174,7 +1151,7 @@ static void _g_arch_instruction_print(GArchInstruction *instr, GBufferLine *line
g_buffer_line_fill_vmpa(line, get_mrange_addr(&instr->range), MDS_32_BITS_UNSIGNED, MDS_32_BITS_UNSIGNED);
- g_buffer_line_fill_content(line, instr->content, &instr->range, VMPA_NO_PHYSICAL);
+ g_buffer_line_fill_content(line, content, &instr->range, VMPA_NO_PHYSICAL);
/* Instruction proprement dite */
@@ -1214,10 +1191,11 @@ static void _g_arch_instruction_print(GArchInstruction *instr, GBufferLine *line
/******************************************************************************
* *
-* Paramètres : instr = générateur à utiliser pour l'impression. *
-* line = ligne de rendu à compléter. *
-* index = indice de cette même ligne dans le tampon global. *
-* repeat = indice d'utilisations successives du générateur. *
+* Paramètres : instr = générateur à utiliser pour l'impression. *
+* line = ligne de rendu à compléter. *
+* index = indice de cette même ligne dans le tampon global. *
+* repeat = indice d'utilisations successives du générateur. *
+* content = éventuel contenu binaire brut à imprimer. *
* *
* Description : Imprime dans une ligne de rendu le contenu représenté. *
* *
@@ -1227,8 +1205,8 @@ static void _g_arch_instruction_print(GArchInstruction *instr, GBufferLine *line
* *
******************************************************************************/
-static void g_arch_instruction_print(GArchInstruction *instr, GBufferLine *line, size_t index, size_t repeat)
+static void g_arch_instruction_print(GArchInstruction *instr, GBufferLine *line, size_t index, size_t repeat, const GBinContent *content)
{
- G_ARCH_INSTRUCTION_GET_CLASS(instr)->print(instr, line, index, repeat);
+ G_ARCH_INSTRUCTION_GET_CLASS(instr)->print(instr, line, index, repeat, content);
}
diff --git a/src/arch/instruction.h b/src/arch/instruction.h
index 64b8dd5..f508c35 100644
--- a/src/arch/instruction.h
+++ b/src/arch/instruction.h
@@ -107,9 +107,6 @@ void g_arch_instruction_set_hooks(GArchInstruction *, const instr_hook_fc [IPH_C
/* Complète un désassemblage accompli pour une instruction. */
void g_arch_instruction_call_hook(GArchInstruction *, InstrProcessHook, GArchProcessor *, GProcContext *, GExeFormat *);
-/* Note le contenu du sein duquel l'instruction est issue. */
-void g_arch_instruction_set_global_content(GArchInstruction *, const GBinContent *);
-
/* Définit la localisation d'une instruction. */
void g_arch_instruction_set_range(GArchInstruction *, const mrange_t *);
diff --git a/src/arch/raw.c b/src/arch/raw.c
index 9cd77de..4a82aef 100644
--- a/src/arch/raw.c
+++ b/src/arch/raw.c
@@ -78,7 +78,7 @@ static const char *g_raw_instruction_get_encoding(const GRawInstruction *);
static const char *g_raw_instruction_get_keyword(const GRawInstruction *, AsmSyntax);
/* Ajoute à un tampon GLib le contenu de l'instance spécifiée. */
-static void g_raw_instruction_print(GRawInstruction *, GBufferLine *, size_t, size_t);
+static void g_raw_instruction_print(GRawInstruction *, GBufferLine *, size_t, size_t, const GBinContent *);
@@ -480,6 +480,7 @@ static const char *g_raw_instruction_get_keyword(const GRawInstruction *instr, A
* msize = taille idéale des positions et adresses; *
* content = contenu binaire global à venir lire. *
* syntax = type de représentation demandée. *
+* content = éventuel contenu binaire brut à imprimer. *
* *
* Description : Ajoute à un tampon GLib le contenu de l'instance spécifiée. *
* *
@@ -489,7 +490,7 @@ static const char *g_raw_instruction_get_keyword(const GRawInstruction *instr, A
* *
******************************************************************************/
-static void g_raw_instruction_print(GRawInstruction *instr, GBufferLine *line, size_t index, size_t repeat)
+static void g_raw_instruction_print(GRawInstruction *instr, GBufferLine *line, size_t index, size_t repeat, const GBinContent *content)
{
GArchInstruction *base; /* Autre version de l'instance */
phys_t max_displayed_len; /* Quantité de code affichée */
@@ -525,7 +526,7 @@ static void g_raw_instruction_print(GRawInstruction *instr, GBufferLine *line, s
max_displayed_len /= g_arch_instruction_count_operands(base);
}
- g_buffer_line_fill_content(line, base->content, &base->range, max_displayed_len);
+ g_buffer_line_fill_content(line, content, &base->range, max_displayed_len);
/* Zone du code d'assemblage */
diff --git a/src/arch/undefined.c b/src/arch/undefined.c
index 8741c43..3c76a09 100644
--- a/src/arch/undefined.c
+++ b/src/arch/undefined.c
@@ -70,7 +70,7 @@ static const char *g_undef_instruction_get_encoding(const GUndefInstruction *);
static const char *g_undef_instruction_get_keyword(const GUndefInstruction *, AsmSyntax);
/* Ajoute à un tampon GLib le contenu de l'instance spécifiée. */
-static void g_undef_instruction_print(GUndefInstruction *, GBufferLine *, size_t, size_t);
+static void g_undef_instruction_print(GUndefInstruction *, GBufferLine *, size_t, size_t, const GBinContent *);
@@ -267,6 +267,7 @@ const char *g_undef_instruction_get_keyword(const GUndefInstruction *instr, AsmS
* msize = taille idéale des positions et adresses; *
* content = contenu binaire global à venir lire. *
* syntax = type de représentation demandée. *
+* content = éventuel contenu binaire brut à imprimer. *
* *
* Description : Ajoute à un tampon GLib le contenu de l'instance spécifiée. *
* *
@@ -276,7 +277,7 @@ const char *g_undef_instruction_get_keyword(const GUndefInstruction *instr, AsmS
* *
******************************************************************************/
-static void g_undef_instruction_print(GUndefInstruction *instr, GBufferLine *line, size_t index, size_t repeat)
+static void g_undef_instruction_print(GUndefInstruction *instr, GBufferLine *line, size_t index, size_t repeat, const GBinContent *content)
{
GArchInstruction *base; /* Version de base */
const char *key; /* Mot clef principal */
@@ -286,7 +287,7 @@ static void g_undef_instruction_print(GUndefInstruction *instr, GBufferLine *lin
g_buffer_line_fill_vmpa(line, get_mrange_addr(&base->range), MDS_32_BITS_UNSIGNED, MDS_32_BITS_UNSIGNED);
- g_buffer_line_fill_content(line, base->content, &base->range, VMPA_NO_PHYSICAL);
+ g_buffer_line_fill_content(line, content, &base->range, VMPA_NO_PHYSICAL);
/* Instruction proprement dite */