diff options
author | Cyrille Bagard <nocbos@gmail.com> | 2015-12-19 20:22:14 (GMT) |
---|---|---|
committer | Cyrille Bagard <nocbos@gmail.com> | 2015-12-19 20:22:14 (GMT) |
commit | 5710f9d5be56b427ccfa48f6a730d70396817efe (patch) | |
tree | 4b694774ce446295ef5b01a7df28bd8160b97025 /src/arch | |
parent | 8ff010a34762737016624a68f593d0e6736d4349 (diff) |
Fixed several bugs when processing concurrent delayed works.
Diffstat (limited to 'src/arch')
-rw-r--r-- | src/arch/context-int.h | 2 | ||||
-rw-r--r-- | src/arch/context.c | 55 | ||||
-rw-r--r-- | src/arch/context.h | 6 |
3 files changed, 28 insertions, 35 deletions
diff --git a/src/arch/context-int.h b/src/arch/context-int.h index 885c2f6..59a06bb 100644 --- a/src/arch/context-int.h +++ b/src/arch/context-int.h @@ -54,6 +54,8 @@ struct _GProcContext size_t esyms_count; /* Nombres de nouveautés */ GMutex es_access; /* Accès à cette même liste */ + gint *counter; + }; diff --git a/src/arch/context.c b/src/arch/context.c index bb1d80a..98eebb2 100644 --- a/src/arch/context.c +++ b/src/arch/context.c @@ -104,6 +104,26 @@ static void g_proc_context_init(GProcContext *ctx) /****************************************************************************** * * +* Paramètres : ctx = contexte de désassemblage à mettre à jour. * +* counter = adresse du compteur à modifier. * +* * +* Description : Enregistre un compteur pour le décompte des points à traiter.* +* * +* Retour : - * +* * +* Remarques : - * +* * +******************************************************************************/ + +void g_proc_context_attach_counter(GProcContext *ctx, gint *counter) +{ + ctx->counter = counter; + +} + + +/****************************************************************************** +* * * Paramètres : ctx = contexte de désassemblage à compléter. * * level = indication de priorité et d'origine de l'adresse. * * addr = adresse d'un nouveau point de départ à traiter. * @@ -155,6 +175,9 @@ void g_proc_context_push_drop_point(GProcContext *ctx, unsigned int level, virt_ g_mutex_lock(&ctx->dp_access); + if (ctx->counter != NULL) + g_atomic_int_inc(ctx->counter); + G_PROC_CONTEXT_GET_CLASS(ctx)->push_point(ctx, level, addr, ap); g_mutex_unlock(&ctx->dp_access); @@ -168,38 +191,6 @@ void g_proc_context_push_drop_point(GProcContext *ctx, unsigned int level, virt_ /****************************************************************************** * * -* Paramètres : ctx = contexte de désassemblage à consulter. * -* addr = adresse de mémoire virtuelle à rechercher. * -* * -* Description : Précise si une adresse donnée figure comme point de départ. * -* * -* Retour : true si l'adresse est connue en interne, false sinon. * -* * -* Remarques : - * -* * -******************************************************************************/ - -bool g_proc_context_has_addr_as_drop_points(GProcContext *ctx, virt_t addr) -{ - bool result; /* Bilan à retourner */ - size_t i; /* Boucle de parcours */ - - result = false; - - g_mutex_lock(&ctx->dp_access); - - for (i = 0; i < ctx->dp_count && !result; i++) - result = (ctx->drop_points[i] == addr); - - g_mutex_unlock(&ctx->dp_access); - - return result; - -} - - -/****************************************************************************** -* * * Paramètres : ctx = contexte de désassemblage à compléter. * * virt = adresse d'un point de départ de code à traiter. * * * diff --git a/src/arch/context.h b/src/arch/context.h index 5dffd6a..334eaf1 100644 --- a/src/arch/context.h +++ b/src/arch/context.h @@ -51,12 +51,12 @@ typedef struct _GProcContextClass GProcContextClass; /* Indique le type définit par la GLib pour le contexte de processeur. */ GType g_proc_context_get_type(void); +/* Enregistre un compteur pour le décompte des points à traiter. */ +void g_proc_context_attach_counter(GProcContext *, gint *); + /* Ajoute une adresse virtuelle comme point de départ de code. */ void g_proc_context_push_drop_point(GProcContext *, unsigned int, virt_t, ...); -/* Précise si une adresse donnée figure comme point de départ. */ -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 *); |