diff options
Diffstat (limited to 'src/analysis/disass/fetch.c')
-rw-r--r-- | src/analysis/disass/fetch.c | 16 |
1 files changed, 10 insertions, 6 deletions
diff --git a/src/analysis/disass/fetch.c b/src/analysis/disass/fetch.c index 373b8dc..4b162e8 100644 --- a/src/analysis/disass/fetch.c +++ b/src/analysis/disass/fetch.c @@ -68,6 +68,7 @@ typedef struct _GDelayedFetching GtkStatusStack *status; /* Barre de statut */ activity_id_t id; /* Groupe de progression */ + DisassPriorityLevel level; /* Niveau d'importance du point*/ virt_t virt; /* Adresse de départ dépilée */ } GDelayedFetching; @@ -96,7 +97,7 @@ static void g_delayed_fetching_dispose(GDelayedFetching *); static void g_delayed_fetching_finalize(GDelayedFetching *); /* Crée une tâche de récupération d'instructions différée. */ -static GDelayedFetching *g_delayed_fetching_new(const GDelayedFetching *, virt_t); +static GDelayedFetching *g_delayed_fetching_new(const GDelayedFetching *, unsigned int, virt_t); /* Assure la récupération d'instructions en différé. */ static void g_delayed_fetching_process(GDelayedFetching *, GtkExtStatusBar *); @@ -236,6 +237,7 @@ static void g_delayed_fetching_finalize(GDelayedFetching *fetching) /****************************************************************************** * * * Paramètres : template = modèle dont les informations sont à copier. * +* level = indication de priorité et d'origine de l'adresse. * * virt = point départ dépilé et personnalisant l'instance. * * * * Description : Crée une tâche de récupération d'instructions différée. * @@ -246,7 +248,7 @@ static void g_delayed_fetching_finalize(GDelayedFetching *fetching) * * ******************************************************************************/ -static GDelayedFetching *g_delayed_fetching_new(const GDelayedFetching *template, virt_t virt) +static GDelayedFetching *g_delayed_fetching_new(const GDelayedFetching *template, DisassPriorityLevel level, virt_t virt) { GDelayedFetching *result; /* Tâche à retourner */ @@ -268,9 +270,9 @@ static GDelayedFetching *g_delayed_fetching_new(const GDelayedFetching *template result->id = template->id; + result->level = level; result->virt = virt; - return result; } @@ -301,7 +303,8 @@ static void g_delayed_fetching_process(GDelayedFetching *fetching, GtkExtStatusB if (area != NULL) load_code_from_mem_area_v2(area, fetching->areas, fetching->count, - fetching->ctx, &addr, fetching->status, fetching->id); + fetching->ctx, &addr, fetching->level < 2, + fetching->status, fetching->id); } @@ -341,6 +344,7 @@ static void follow_execution_flow_v2(GProcContext *ctx, const GDelayedFetching * { GWorkQueue *queue; /* Gestionnaire de différés */ gint *remaining_counter; /* Compteur à considérer */ + DisassPriorityLevel level; /* Niveau d'importance du point*/ virt_t virt; /* Adresse de départ dépilée */ GDelayedFetching *fetching; /* Récupération à mener */ @@ -348,9 +352,9 @@ static void follow_execution_flow_v2(GProcContext *ctx, const GDelayedFetching * remaining_counter = (gint *)g_object_get_data(G_OBJECT(ctx), "remaining_counter"); - while (g_proc_context_pop_drop_point(ctx, &virt)) + while (g_proc_context_pop_drop_point(ctx, &level, &virt)) { - fetching = g_delayed_fetching_new(template, virt); + fetching = g_delayed_fetching_new(template, level, virt); /** * Pas très élégant : l'identifiant du groupe de travail ne sert qu'ici ; |