diff options
Diffstat (limited to 'src/arch')
| -rw-r--r-- | src/arch/instruction.c | 28 | 
1 files changed, 18 insertions, 10 deletions
| diff --git a/src/arch/instruction.c b/src/arch/instruction.c index 212b5b5..1fe83b5 100644 --- a/src/arch/instruction.c +++ b/src/arch/instruction.c @@ -31,6 +31,7 @@  #include "instruction-int.h"  #include "storage.h" +#include "../glibext/gbinarycursor.h"  #include "../glibext/linegen-int.h" @@ -70,10 +71,10 @@ static bool g_arch_instruction_serialize(GArchInstruction *, GAsmStorage *, pack  static size_t g_arch_instruction_count_lines(const GArchInstruction *);  /* Retrouve l'emplacement correspondant à une position donnée. */ -static void g_arch_instruction_compute_addr(const GArchInstruction *, gint, vmpa2t *, size_t, size_t); +static void g_arch_instruction_compute_cursor(const GArchInstruction *, gint, size_t, size_t, GLineCursor **);  /* Détermine si le conteneur s'inscrit dans une plage donnée. */ -static int g_arch_instruction_contains_addr(const GArchInstruction *, const vmpa2t *, size_t, size_t); +static int g_arch_instruction_contains_cursor(const GArchInstruction *, size_t, size_t, const GLineCursor *);  /* Renseigne sur les propriétés liées à un générateur. */  static BufferLineFlags g_arch_instruction_get_flags2(const GArchInstruction *, size_t, size_t); @@ -160,8 +161,8 @@ static void g_arch_instruction_init(GArchInstruction *instr)  static void g_arch_instruction_generator_interface_init(GLineGeneratorInterface *iface)  {      iface->count = (linegen_count_lines_fc)g_arch_instruction_count_lines; -    iface->compute = (linegen_compute_fc)g_arch_instruction_compute_addr; -    iface->contains = (linegen_contains_fc)g_arch_instruction_contains_addr; +    iface->compute = (linegen_compute_fc)g_arch_instruction_compute_cursor; +    iface->contains = (linegen_contains_fc)g_arch_instruction_contains_cursor;      iface->get_flags = (linegen_get_flags_fc)g_arch_instruction_get_flags2;      iface->print = (linegen_print_fc)g_arch_instruction_print; @@ -1452,9 +1453,9 @@ static size_t g_arch_instruction_count_lines(const GArchInstruction *instr)  *                                                                             *  *  Paramètres  : instr  = générateur à consulter.                             *  *                x      = position géographique sur la ligne concernée.       * -*                addr   = position en mémoire à analyser.                     *  *                index  = indice de cette même ligne dans le tampon global.   *  *                repeat = indice d'utilisations successives du générateur.    * +*                cursor = emplacement à constituer. [OUT]                     *  *                                                                             *  *  Description : Retrouve l'emplacement correspondant à une position donnée.  *  *                                                                             * @@ -1464,9 +1465,11 @@ static size_t g_arch_instruction_count_lines(const GArchInstruction *instr)  *                                                                             *  ******************************************************************************/ -static void g_arch_instruction_compute_addr(const GArchInstruction *instr, gint x, vmpa2t *addr, size_t index, size_t repeat) +static void g_arch_instruction_compute_cursor(const GArchInstruction *instr, gint x, size_t index, size_t repeat, GLineCursor **cursor)  { -    copy_vmpa(addr, get_mrange_addr(&instr->range)); +    *cursor = g_binary_cursor_new(); + +    g_binary_cursor_update(G_BINARY_CURSOR(*cursor), get_mrange_addr(&instr->range));  } @@ -1474,9 +1477,9 @@ static void g_arch_instruction_compute_addr(const GArchInstruction *instr, gint  /******************************************************************************  *                                                                             *  *  Paramètres  : instr  = générateur à consulter.                             * -*                addr   = position en mémoire à analyser.                     *  *                index  = indice de cette même ligne dans le tampon global.   *  *                repeat = indice d'utilisations successives du générateur.    * +*                cursor = emplacement à analyser.                             *  *                                                                             *  *  Description : Détermine si le conteneur s'inscrit dans une plage donnée.   *  *                                                                             * @@ -1486,11 +1489,16 @@ static void g_arch_instruction_compute_addr(const GArchInstruction *instr, gint  *                                                                             *  ******************************************************************************/ -static int g_arch_instruction_contains_addr(const GArchInstruction *instr, const vmpa2t *addr, size_t index, size_t repeat) +static int g_arch_instruction_contains_cursor(const GArchInstruction *instr, size_t index, size_t repeat, const GLineCursor *cursor)  {      int result;                             /* Conclusion à retourner      */ +    vmpa2t addr;                            /* Autre emplacement à comparer*/ + +    assert(G_IS_BINARY_CURSOR(cursor)); + +    g_binary_cursor_get_info(G_BINARY_CURSOR(cursor), &addr); -    result = cmp_mrange_with_vmpa(&instr->range, addr); +    result = cmp_mrange_with_vmpa(&instr->range, &addr);      return result; | 
