summaryrefslogtreecommitdiff
path: root/src/analysis/disass/routines.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/analysis/disass/routines.c')
-rw-r--r--src/analysis/disass/routines.c20
1 files changed, 14 insertions, 6 deletions
diff --git a/src/analysis/disass/routines.c b/src/analysis/disass/routines.c
index 1150f08..5d6dc42 100644
--- a/src/analysis/disass/routines.c
+++ b/src/analysis/disass/routines.c
@@ -231,14 +231,16 @@ GRoutinesStudy *g_routines_study_new(GArchProcessor *proc, GBinPortion *portions
static void g_routines_study_process(GRoutinesStudy *study, GtkStatusStack *status)
{
size_t i; /* Boucle de parcours */
- GBinRoutine *routine; /* Routine à traiter */
+ GBinSymbol *symbol; /* Commodité d'accès */
+ SymbolType type; /* Type de symbole rencontré */
for (i = study->begin; i < study->end; i++)
{
- routine = g_binary_symbol_get_routine(study->symbols[i]);
+ symbol = study->symbols[i];
+ type = g_binary_symbol_get_target_type(symbol);
- if (routine != NULL)
- study->fallback(study, routine, i);
+ if (type == STP_ROUTINE || type == STP_ENTRY_POINT)
+ study->fallback(study, G_BIN_ROUTINE(symbol), i);
gtk_status_stack_update_activity_value(status, study->id, 1);
@@ -263,9 +265,12 @@ static void g_routines_study_process(GRoutinesStudy *study, GtkStatusStack *stat
void g_routines_study_compute_limits(GRoutinesStudy *study, GBinRoutine *routine, size_t index)
{
+ GBinSymbol *symbol; /* Version alternative */
const mrange_t *range; /* Zone du symbole suivant */
const vmpa2t *next; /* Début de la zone suivante */
+ symbol = G_BIN_SYMBOL(routine);
+
if ((index + 1) < study->count)
{
range = g_binary_symbol_get_range(study->symbols[index + 1]);
@@ -275,7 +280,7 @@ void g_routines_study_compute_limits(GRoutinesStudy *study, GBinRoutine *routine
else
next = NULL;
- compute_routine_limit(routine, next, study->proc, study->portions);
+ compute_routine_limit(symbol, next, study->proc, study->portions);
}
@@ -296,6 +301,7 @@ void g_routines_study_compute_limits(GRoutinesStudy *study, GBinRoutine *routine
void g_routines_study_handle_blocks(GRoutinesStudy *study, GBinRoutine *routine, size_t index)
{
+ GBinSymbol *symbol; /* Version alternative */
const mrange_t *range; /* Couverture d'une routine */
const vmpa2t *start; /* Adresse de départ */
const instr_coverage *coverage; /* Instructions couvertes */
@@ -304,7 +310,9 @@ void g_routines_study_handle_blocks(GRoutinesStudy *study, GBinRoutine *routine,
/* Préparatifs communs */
- range = g_binary_routine_get_range(routine);
+ symbol = G_BIN_SYMBOL(routine);
+
+ range = g_binary_symbol_get_range(symbol);
start = get_mrange_addr(range);
coverage = g_arch_processor_find_coverage_by_address(study->proc, start);