diff options
Diffstat (limited to 'src/arch')
-rw-r--r-- | src/arch/context-int.h | 1 | ||||
-rw-r--r-- | src/arch/context.c | 38 | ||||
-rw-r--r-- | src/arch/context.h | 5 |
3 files changed, 12 insertions, 32 deletions
diff --git a/src/arch/context-int.h b/src/arch/context-int.h index 086a8ec..b7f7a20 100644 --- a/src/arch/context-int.h +++ b/src/arch/context-int.h @@ -49,6 +49,7 @@ struct _GProcContext vmpa2t *extra_symbols; /* Adresses de symboles */ size_t esyms_count; /* Nombres de nouveautés */ + GMutex es_access; /* Accès à cette même liste */ }; diff --git a/src/arch/context.c b/src/arch/context.c index 968a6ea..fe2e220 100644 --- a/src/arch/context.c +++ b/src/arch/context.c @@ -97,6 +97,7 @@ static void g_proc_context_init(GProcContext *ctx) ctx->extra_symbols = NULL; ctx->esyms_count = 0; + g_mutex_init(&ctx->es_access); } @@ -157,33 +158,6 @@ void g_proc_context_push_drop_point(GProcContext *ctx, virt_t addr) /****************************************************************************** * * -* Paramètres : ctx = contexte de désassemblage à consulter. * -* * -* Description : Indique si des points de départ restent à traiter ou non. * -* * -* Retour : true s'il existe encore au moins un point, false sinon. * -* * -* Remarques : - * -* * -******************************************************************************/ - -bool g_proc_context_has_drop_points(const GProcContext *ctx) -{ - bool result; /* Etat à retourner */ - - g_mutex_lock(&ctx->dp_access); - - result = (ctx->dp_count > 0); - - g_mutex_unlock(&ctx->dp_access); - - return result; - -} - - -/****************************************************************************** -* * * Paramètres : ctx = contexte de désassemblage à consulter. * * addr = adresse de mémoire virtuelle à rechercher. * * * @@ -195,7 +169,7 @@ bool g_proc_context_has_drop_points(const GProcContext *ctx) * * ******************************************************************************/ -bool g_proc_context_has_addr_as_drop_points(const GProcContext *ctx, virt_t addr) +bool g_proc_context_has_addr_as_drop_points(GProcContext *ctx, virt_t addr) { bool result; /* Bilan à retourner */ size_t i; /* Boucle de parcours */ @@ -270,10 +244,14 @@ bool g_proc_context_pop_drop_point(GProcContext *ctx, virt_t *virt) void g_proc_context_push_new_symbol_at(GProcContext *ctx, const vmpa2t *addr) { + g_mutex_lock(&ctx->es_access); + ctx->extra_symbols = (vmpa2t *)realloc(ctx->extra_symbols, ++ctx->esyms_count * sizeof(vmpa2t)); copy_vmpa(&ctx->extra_symbols[ctx->esyms_count - 1], addr); + g_mutex_unlock(&ctx->es_access); + } @@ -294,6 +272,8 @@ bool g_proc_context_pop_new_symbol_at(GProcContext *ctx, vmpa2t *addr) { bool result; /* Bilan à retourner */ + g_mutex_lock(&ctx->es_access); + result = (ctx->esyms_count > 0); if (result) @@ -302,6 +282,8 @@ bool g_proc_context_pop_new_symbol_at(GProcContext *ctx, vmpa2t *addr) copy_vmpa(addr, &ctx->extra_symbols[ctx->esyms_count]); } + g_mutex_unlock(&ctx->es_access); + return result; } diff --git a/src/arch/context.h b/src/arch/context.h index 973b7ae..36eb3e6 100644 --- a/src/arch/context.h +++ b/src/arch/context.h @@ -54,11 +54,8 @@ GType g_proc_context_get_type(void); /* Ajoute une adresse virtuelle comme point de départ de code. */ void g_proc_context_push_drop_point(GProcContext *, virt_t); -/* Indique si des points de départ restent à traiter ou non. */ -bool g_proc_context_has_drop_points(const GProcContext *); - /* Précise si une adresse donnée figure comme point de départ. */ -bool g_proc_context_has_addr_as_drop_points(const GProcContext *, virt_t); +bool g_proc_context_has_addr_as_drop_points(GProcContext *, virt_t); /* Fournit une adresse virtuelle comme point de départ de code. */ bool g_proc_context_pop_drop_point(GProcContext *, virt_t *); |