diff options
Diffstat (limited to 'src/arch/arm/context.c')
-rw-r--r-- | src/arch/arm/context.c | 18 |
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; } |