summaryrefslogtreecommitdiff
path: root/src/arch
diff options
context:
space:
mode:
authorCyrille Bagard <nocbos@gmail.com>2015-12-19 20:22:14 (GMT)
committerCyrille Bagard <nocbos@gmail.com>2015-12-19 20:22:14 (GMT)
commit5710f9d5be56b427ccfa48f6a730d70396817efe (patch)
tree4b694774ce446295ef5b01a7df28bd8160b97025 /src/arch
parent8ff010a34762737016624a68f593d0e6736d4349 (diff)
Fixed several bugs when processing concurrent delayed works.
Diffstat (limited to 'src/arch')
-rw-r--r--src/arch/context-int.h2
-rw-r--r--src/arch/context.c55
-rw-r--r--src/arch/context.h6
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 *);