summaryrefslogtreecommitdiff
path: root/src/arch
diff options
context:
space:
mode:
Diffstat (limited to 'src/arch')
-rw-r--r--src/arch/context-int.h1
-rw-r--r--src/arch/context.c38
-rw-r--r--src/arch/context.h5
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 *);