summaryrefslogtreecommitdiff
path: root/src/arch/arm/context.c
diff options
context:
space:
mode:
authorCyrille Bagard <nocbos@gmail.com>2015-11-26 23:30:01 (GMT)
committerCyrille Bagard <nocbos@gmail.com>2015-11-26 23:30:01 (GMT)
commit6b1a70c16f83a926f7b1f1fb2af5d6a2e017737b (patch)
tree8ffb0b3d8f3063c612f8cebe4f00a65f8b029a52 /src/arch/arm/context.c
parenta93a5dca1a7292b7e61ae09b74f3252e04b73488 (diff)
Used several threads without lock to disassemble binary code.
git-svn-id: svn://svn.gna.org/svn/chrysalide/trunk@610 abbe820e-26c8-41b2-8c08-b7b2b41f8b0a
Diffstat (limited to 'src/arch/arm/context.c')
-rw-r--r--src/arch/arm/context.c18
1 files changed, 14 insertions, 4 deletions
diff --git a/src/arch/arm/context.c b/src/arch/arm/context.c
index b54de42..d805e8c 100644
--- a/src/arch/arm/context.c
+++ b/src/arch/arm/context.c
@@ -139,6 +139,7 @@ static void g_arm_context_class_init(GArmContextClass *klass)
static void g_arm_context_init(GArmContext *ctx)
{
+ g_mutex_init(&ctx->areas_access);
}
@@ -157,6 +158,8 @@ static void g_arm_context_init(GArmContext *ctx)
static void g_arm_context_dispose(GArmContext *ctx)
{
+ g_mutex_clear(&ctx->areas_access);
+
G_OBJECT_CLASS(g_arm_context_parent_class)->dispose(G_OBJECT(ctx));
}
@@ -263,11 +266,11 @@ void _g_arm_context_define_encoding(GArmContext *ctx, virt_t addr, unsigned int
{
size_t selected; /* Zone associée à une adresse */
- /* TODO : pose de verroux ? */
+ g_mutex_lock(&ctx->areas_access);
selected = find_disass_arm_area(ctx->areas, addr, 0, ctx->acount - 1);
- assert(ctx->areas[selected].start != addr || ctx->areas[selected].marker == marker);
+ //assert(ctx->areas[selected].start != addr || ctx->areas[selected].marker == marker);
/* S'agit-il d'une redéfinition ? */
if (ctx->areas[selected].start == addr)
@@ -290,6 +293,8 @@ void _g_arm_context_define_encoding(GArmContext *ctx, virt_t addr, unsigned int
}
+ g_mutex_unlock(&ctx->areas_access);
+
}
@@ -308,13 +313,18 @@ void _g_arm_context_define_encoding(GArmContext *ctx, virt_t addr, unsigned int
unsigned int _g_arm_context_find_encoding(GArmContext *ctx, virt_t addr)
{
+ unsigned int result; /* Identifiant à retourner */
size_t selected; /* Zone associée à une adresse */
- /* TODO : pose de verroux ? */
+ g_mutex_lock(&ctx->areas_access);
selected = find_disass_arm_area(ctx->areas, addr, 0, ctx->acount - 1);
- return ctx->areas[selected].marker;
+ result = ctx->areas[selected].marker;
+
+ g_mutex_unlock(&ctx->areas_access);
+
+ return result;
}