summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog5
-rw-r--r--src/analysis/disass/area.c24
2 files changed, 29 insertions, 0 deletions
diff --git a/ChangeLog b/ChangeLog
index b710ca2..b28ef4f 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,6 +1,11 @@
17-08-05 Cyrille Bagard <nocbos@gmail.com>
* src/analysis/disass/area.c:
+ Protect a bit stronger the access to the bitfield of the instructions coverage.
+
+17-08-05 Cyrille Bagard <nocbos@gmail.com>
+
+ * src/analysis/disass/area.c:
Handle any partial replaced instruction when replacing instructions.
17-07-28 Cyrille Bagard <nocbos@gmail.com>
diff --git a/src/analysis/disass/area.c b/src/analysis/disass/area.c
index 9a5387c..b76b5ec 100644
--- a/src/analysis/disass/area.c
+++ b/src/analysis/disass/area.c
@@ -315,8 +315,20 @@ static bool is_range_empty_in_mem_area(mem_area *area, phys_t start, phys_t len)
assert((start + len) <= get_mrange_length(&area->range));
+ /**
+ * Les accès au champ de bits sont atomiques, mais la fonction
+ * mark_range_in_mem_area_as_processed() peut y accéder en deux temps
+ * (réinitialisation, puis définition).
+ *
+ * On protège donc les accès de façon constante.
+ */
+
+ g_mutex_lock(&area->mutex);
+
result = test_none_in_bit_field(area->processed, start, len);
+ g_mutex_unlock(&area->mutex);
+
return result;
}
@@ -342,8 +354,20 @@ static bool is_range_busy_in_mem_area(mem_area *area, phys_t start, phys_t len)
assert((start + len) <= get_mrange_length(&area->range));
+ /**
+ * Les accès au champ de bits sont atomiques, mais la fonction
+ * mark_range_in_mem_area_as_processed() peut y accéder en deux temps
+ * (réinitialisation, puis définition).
+ *
+ * On protège donc les accès de façon constante.
+ */
+
+ g_mutex_lock(&area->mutex);
+
result = test_all_in_bit_field(area->processed, start, len);
+ g_mutex_unlock(&area->mutex);
+
return result;
}