summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorCyrille Bagard <nocbos@gmail.com>2021-12-26 00:26:28 (GMT)
committerCyrille Bagard <nocbos@gmail.com>2021-12-26 00:26:28 (GMT)
commit98570719ff25a4dcde917056e55490bf2a6b1453 (patch)
tree4a01b57580aa05f8a55d37abbc4ddd178fb55a99 /src
parent94efb7bf5239cf984a0dda9949a26719a8ae2090 (diff)
Provide a method to hash all ARMv7 operands.
Diffstat (limited to 'src')
-rw-r--r--src/arch/operand-int.h7
-rw-r--r--src/arch/operand.c60
2 files changed, 63 insertions, 4 deletions
diff --git a/src/arch/operand-int.h b/src/arch/operand-int.h
index d2f43f1..dc505b6 100644
--- a/src/arch/operand-int.h
+++ b/src/arch/operand-int.h
@@ -135,5 +135,12 @@ struct _GArchOperandClass
#endif
+/* Ajoute une information complémentaire à un opérande. */
+bool _g_arch_operand_set_flag(GArchOperand *, ArchOperandFlag, bool);
+
+/* Retire une information complémentaire à un opérande. */
+bool _g_arch_operand_unset_flag(GArchOperand *, ArchOperandFlag, bool);
+
+
#endif /* _ARCH_OPERAND_INT_H */
diff --git a/src/arch/operand.c b/src/arch/operand.c
index e95f24e..81aa633 100644
--- a/src/arch/operand.c
+++ b/src/arch/operand.c
@@ -442,6 +442,7 @@ char *g_arch_operand_build_tooltip(const GArchOperand *operand, const GLoadedBin
* *
* Paramètres : operand = opérande à venir modifier. *
* flag = drapeau d'information complémentaire à planter. *
+* lock = indique un besoin de verrouillage des données. *
* *
* Description : Ajoute une information complémentaire à un opérande. *
* *
@@ -451,7 +452,7 @@ char *g_arch_operand_build_tooltip(const GArchOperand *operand, const GLoadedBin
* *
******************************************************************************/
-bool g_arch_operand_set_flag(GArchOperand *operand, ArchOperandFlag flag)
+bool _g_arch_operand_set_flag(GArchOperand *operand, ArchOperandFlag flag, bool lock)
{
bool result; /* Bilan à retourner */
operand_extra_data_t *extra; /* Données insérées à modifier */
@@ -460,13 +461,39 @@ bool g_arch_operand_set_flag(GArchOperand *operand, ArchOperandFlag flag)
extra = GET_ARCH_OP_EXTRA(operand);
- LOCK_GOBJECT_EXTRA(extra);
+ if (lock)
+ LOCK_GOBJECT_EXTRA(extra);
result = !(extra->flags & flag);
extra->flags |= flag;
- UNLOCK_GOBJECT_EXTRA(extra);
+ if (lock)
+ UNLOCK_GOBJECT_EXTRA(extra);
+
+ return result;
+
+}
+
+
+/******************************************************************************
+* *
+* Paramètres : operand = opérande à venir modifier. *
+* flag = drapeau d'information complémentaire à planter. *
+* *
+* Description : Ajoute une information complémentaire à un opérande. *
+* *
+* Retour : Bilan de l'opération. *
+* *
+* Remarques : - *
+* *
+******************************************************************************/
+
+bool g_arch_operand_set_flag(GArchOperand *operand, ArchOperandFlag flag)
+{
+ bool result; /* Bilan à retourner */
+
+ result = _g_arch_operand_set_flag(operand, flag, true);
return result;
@@ -477,6 +504,7 @@ bool g_arch_operand_set_flag(GArchOperand *operand, ArchOperandFlag flag)
* *
* Paramètres : operand = opérande à venir modifier. *
* flag = drapeau d'information complémentaire à planter. *
+* lock = indique un besoin de verrouillage des données. *
* *
* Description : Retire une information complémentaire à un opérande. *
* *
@@ -486,7 +514,7 @@ bool g_arch_operand_set_flag(GArchOperand *operand, ArchOperandFlag flag)
* *
******************************************************************************/
-bool g_arch_operand_unset_flag(GArchOperand *operand, ArchOperandFlag flag)
+bool _g_arch_operand_unset_flag(GArchOperand *operand, ArchOperandFlag flag, bool lock)
{
bool result; /* Bilan à retourner */
operand_extra_data_t *extra; /* Données insérées à modifier */
@@ -510,6 +538,30 @@ bool g_arch_operand_unset_flag(GArchOperand *operand, ArchOperandFlag flag)
/******************************************************************************
* *
+* Paramètres : operand = opérande à venir modifier. *
+* flag = drapeau d'information complémentaire à planter. *
+* *
+* Description : Retire une information complémentaire à un opérande. *
+* *
+* Retour : Bilan de l'opération. *
+* *
+* Remarques : - *
+* *
+******************************************************************************/
+
+bool g_arch_operand_unset_flag(GArchOperand *operand, ArchOperandFlag flag)
+{
+ bool result; /* Bilan à retourner */
+
+ result = _g_arch_operand_unset_flag(operand, flag, true);
+
+ return result;
+
+}
+
+
+/******************************************************************************
+* *
* Paramètres : operand = opérande à venir consulter. *
* flag = drapeau d'information à rechercher. *
* *