diff options
author | Cyrille Bagard <nocbos@gmail.com> | 2019-05-30 10:45:31 (GMT) |
---|---|---|
committer | Cyrille Bagard <nocbos@gmail.com> | 2019-05-30 10:45:31 (GMT) |
commit | b9811a151ebeca6b64cdfc0a07df697ecfe84d7e (patch) | |
tree | ea187bccb424a934a1daef3b9ccffa29c6cb54dd /src/arch/instruction.c | |
parent | dde622ccf567e3ac01b471ea5d35cca4acf81277 (diff) |
Introduced a new flag for instruction calls.
Diffstat (limited to 'src/arch/instruction.c')
-rw-r--r-- | src/arch/instruction.c | 77 |
1 files changed, 72 insertions, 5 deletions
diff --git a/src/arch/instruction.c b/src/arch/instruction.c index 8e9d3d3..5880c34 100644 --- a/src/arch/instruction.c +++ b/src/arch/instruction.c @@ -288,20 +288,21 @@ bool g_arch_instruction_set_flag(GArchInstruction *instr, ArchInstrFlag flag) /****************************************************************************** * * * Paramètres : instr = instruction quelconque à consulter. * +* flag = drapeau d'information à rechercher. * * * -* Description : Fournit l'identifiant unique pour un ensemble d'instructions.* +* Description : Détermine si une instruction possède un fanion particulier. * * * -* Retour : Identifiant unique par type d'instruction et architecture. * +* Retour : Bilan de la détection. * * * * Remarques : - * * * ******************************************************************************/ -itid_t g_arch_instruction_get_unique_id(const GArchInstruction *instr) +bool g_arch_instruction_has_flag(const GArchInstruction *instr, ArchInstrFlag flag) { - itid_t result; /* Numéro à retourner */ + bool result; /* Bilan à retourner */ - result = instr->uid; + result = (instr->flags & flag); return result; @@ -329,6 +330,29 @@ ArchInstrFlag g_arch_instruction_get_flags(const GArchInstruction *instr) /****************************************************************************** * * +* Paramètres : instr = instruction quelconque à consulter. * +* * +* Description : Fournit l'identifiant unique pour un ensemble d'instructions.* +* * +* Retour : Identifiant unique par type d'instruction et architecture. * +* * +* Remarques : - * +* * +******************************************************************************/ + +itid_t g_arch_instruction_get_unique_id(const GArchInstruction *instr) +{ + itid_t result; /* Numéro à retourner */ + + result = instr->uid; + + return result; + +} + + +/****************************************************************************** +* * * Paramètres : instr = instruction quelconque à traiter. * * type = type de procédure à utiliser. * * proc = représentation de l'architecture utilisée. * @@ -714,6 +738,49 @@ void g_arch_instruction_lock_unlock_links(GArchInstruction *instr, bool src, boo /****************************************************************************** * * * Paramètres : instr = instruction dont les informations sont à consulter. * +* type = type de lien à détecter. * +* * +* Description : Détermine si un type de lien existe dans une instruction. * +* * +* Retour : Bilan du statut courant de l'instruction. * +* * +* Remarques : - * +* * +******************************************************************************/ + +bool g_arch_instruction_has_link(GArchInstruction *instr, InstructionLinkType type) +{ + bool result; /* Bilan à retourner */ + size_t count; /* Nombre de liens à parcourir */ + size_t i; /* Boucle de parcours */ + const instr_link_t *dlink; /* Définition de destination */ + + result = false; + + g_arch_instruction_lock_dest(instr); + + count = g_arch_instruction_count_destinations(instr); + + for (i = 0; i < count && !result; i++) + { + dlink = g_arch_instruction_get_destination(instr, i); + + result = (dlink->type == type); + + unref_instr_link(dlink); + + } + + g_arch_instruction_unlock_dest(instr); + + return result; + +} + + +/****************************************************************************** +* * +* Paramètres : instr = instruction dont les informations sont à consulter. * * dest = ligne visée par la liaison (côté destination). * * * * Description : Détermine si un lien est déjà établi entre deux instructions.* |