diff options
author | Cyrille Bagard <nocbos@gmail.com> | 2016-12-18 15:32:27 (GMT) |
---|---|---|
committer | Cyrille Bagard <nocbos@gmail.com> | 2016-12-18 15:32:27 (GMT) |
commit | b0bcf250999b2242019f137e38f52390a86e71cd (patch) | |
tree | f3436a3ddbbd4773005ecb891630a815ed001341 /src/arch/dalvik/operand.c | |
parent | 6bde4016160057a22234d4ed698903dca52ce162 (diff) |
Shared all Dalvik operands between all their users.
Diffstat (limited to 'src/arch/dalvik/operand.c')
-rw-r--r-- | src/arch/dalvik/operand.c | 14 |
1 files changed, 9 insertions, 5 deletions
diff --git a/src/arch/dalvik/operand.c b/src/arch/dalvik/operand.c index 802ce1e..e1a910c 100644 --- a/src/arch/dalvik/operand.c +++ b/src/arch/dalvik/operand.c @@ -474,14 +474,13 @@ static bool dalvik_read_fixed_operands(GArchInstruction *instr, GDexFormat *form /* Mise en place des arguments */ args = g_dalvik_args_operand_new(); - g_arch_instruction_attach_extra_operand(instr, args); for (i = 0; i < MIN(a, 4); i++) { op = g_dalvik_register_operand_new(content, pos, low, MDS_4_BITS, endian); if (op == NULL) goto err_registers; - g_dalvik_args_operand_add(G_DALVIK_ARGS_OPERAND(args), op); + args = G_ARCH_OPERAND(g_dalvik_args_operand_add(G_DALVIK_ARGS_OPERAND(args), op, NULL)); } @@ -494,7 +493,7 @@ static bool dalvik_read_fixed_operands(GArchInstruction *instr, GDexFormat *form /* Rajout des éléments finaux déjà chargés */ if (a == 5) - g_dalvik_args_operand_add(G_DALVIK_ARGS_OPERAND(args), opg); + args = G_ARCH_OPERAND(g_dalvik_args_operand_add(G_DALVIK_ARGS_OPERAND(args), opg, NULL)); else { @@ -502,6 +501,10 @@ static bool dalvik_read_fixed_operands(GArchInstruction *instr, GDexFormat *form g_object_unref(G_OBJECT(opg)); } + g_arch_instruction_attach_extra_operand(instr, args); + + /* Rajout de la cible */ + g_arch_instruction_attach_extra_operand(instr, target); return true; @@ -564,17 +567,18 @@ static bool dalvik_read_variatic_operands(GArchInstruction *instr, GDexFormat *f /* Mise en place des arguments */ args = g_dalvik_args_operand_new(); - g_arch_instruction_attach_extra_operand(instr, args); for (i = 0; i < a; i++) { op = g_dalvik_register_operand_new_from_existing(g_dalvik_register_new(c + i)); if (op == NULL) goto drvo_registers; - g_dalvik_args_operand_add(G_DALVIK_ARGS_OPERAND(args), op); + args = G_ARCH_OPERAND(g_dalvik_args_operand_add(G_DALVIK_ARGS_OPERAND(args), op, NULL)); } + g_arch_instruction_attach_extra_operand(instr, args); + /* Rajout de la cible */ g_arch_instruction_attach_extra_operand(instr, target); |