summaryrefslogtreecommitdiff
path: root/src/arch/instruction.c
diff options
context:
space:
mode:
authorCyrille Bagard <nocbos@gmail.com>2019-05-30 10:45:31 (GMT)
committerCyrille Bagard <nocbos@gmail.com>2019-05-30 10:45:31 (GMT)
commitb9811a151ebeca6b64cdfc0a07df697ecfe84d7e (patch)
treeea187bccb424a934a1daef3b9ccffa29c6cb54dd /src/arch/instruction.c
parentdde622ccf567e3ac01b471ea5d35cca4acf81277 (diff)
Introduced a new flag for instruction calls.
Diffstat (limited to 'src/arch/instruction.c')
-rw-r--r--src/arch/instruction.c77
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.*