summaryrefslogtreecommitdiff
path: root/src/gtkext/gtkgraphdisplay.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/gtkext/gtkgraphdisplay.c')
-rw-r--r--src/gtkext/gtkgraphdisplay.c100
1 files changed, 32 insertions, 68 deletions
diff --git a/src/gtkext/gtkgraphdisplay.c b/src/gtkext/gtkgraphdisplay.c
index 4b10bf0..8139b3a 100644
--- a/src/gtkext/gtkgraphdisplay.c
+++ b/src/gtkext/gtkgraphdisplay.c
@@ -43,7 +43,7 @@ struct _GtkGraphDisplay
GtkWidget *support; /* Support des vues en bloc */
GtkWidget *extender; /* Force la taille du support */
- GBinRoutine *routine; /* Routine en cours d'affichage*/
+ GBinSymbol *routine; /* Routine en cours d'affichage*/
segcnt_list *highlighted; /* Segments mis en évidence */
@@ -613,9 +613,9 @@ static void gtk_graph_display_define_main_address(GtkGraphDisplay *display, cons
bool need_update; /* Mise à jour du contenu ? */
const mrange_t *range; /* Couverture courante */
GExeFormat *format; /* Type de fichier chargé */
- GBinRoutine **routines; /* Liste des routines trouvées */
- size_t routines_count; /* Nombre de ces routines */
- size_t i; /* Boucle de parcours */
+ GBinSymbol *symbol; /* Symbole présent à l'adresse */
+ bool found; /* Bilan des recherches */
+ GBlockList *list; /* Liste de blocs basiques */
gint right; /* Abscisse du coin droit */
gint bottom; /* Ordonnée du coin inférieur */
GtkAllocation allocation; /* Espace alloué au panneau */
@@ -624,7 +624,7 @@ static void gtk_graph_display_define_main_address(GtkGraphDisplay *display, cons
need_update = true;
else
{
- range = g_binary_routine_get_range(display->routine);
+ range = g_binary_symbol_get_range(display->routine);
need_update = !mrange_contains_addr(range, addr);
}
@@ -633,83 +633,47 @@ static void gtk_graph_display_define_main_address(GtkGraphDisplay *display, cons
gtk_graph_display_reset(display);
format = g_loaded_binary_get_format(GTK_DISPLAY_PANEL(display)->binary);
- routines = g_binary_format_get_routines(G_BIN_FORMAT(format), &routines_count);
-
- for (i = 0; i < routines_count; i++)
- {
- range = g_binary_routine_get_range(routines[i]);
-
- if (mrange_contains_addr(range, addr))
- {
- display->routine = routines[i];
- g_object_ref(G_OBJECT(display->routine));
-
- display->highlighted = init_segment_content_list();
- /*
- display->children = gtk_graph_display_load_nodes(display, GTK_DISPLAY_PANEL(display)->binary,
- routines[i]);
+ found = g_binary_format_find_symbol_for(G_BIN_FORMAT(format), addr, &symbol);
- display->allocs = (GtkAllocation *)calloc(display->children_count,
- sizeof(GtkAllocation));
+ if (!found)
+ goto ggddma_done;
- display->layout = g_graph_layout_new(g_binary_routine_get_basic_blocks(display->routine),
- display->children, display->children_count);
+ if (g_binary_symbol_get_routine(symbol) == NULL)
+ goto ggddma_done;
- g_graph_layout_place(display->layout, display);
- */
-
- do
- {
-
- GBlockList *list;
-
- list = g_binary_routine_get_basic_blocks(routines[i]);
-
-#if 0
- display->cluster = g_graph_cluster_new(GTK_DISPLAY_PANEL(display)->binary,
- list, 0/* FIXME */, display->highlighted);
-#endif
+ display->routine = symbol;
+ g_object_ref(G_OBJECT(symbol));
+ display->highlighted = init_segment_content_list();
- display->cluster = bootstrap_graph_cluster(GTK_DISPLAY_PANEL(display)->binary,
- list, display->highlighted);
+ list = g_binary_routine_get_basic_blocks(g_binary_symbol_get_routine(symbol));
+ display->cluster = bootstrap_graph_cluster(GTK_DISPLAY_PANEL(display)->binary,
+ list, display->highlighted);
+ g_graph_cluster_place(display->cluster, display);
- g_graph_cluster_place(display->cluster, display);
+ /**
+ * Comme la taille du support ne peut pas être forcée et
+ * étendue pour comprendre les ombres, on place un composant
+ * minuscule à l'extrémité de ce support.
+ */
- /**
- * Comme la taille du support ne peut pas être forcée et
- * étendue pour comprendre les ombres, on place un composant
- * minuscule à l'extrémité de ce support.
- */
+ gtk_graph_display_compute_requested_size(display, &right, &bottom);
- gtk_graph_display_compute_requested_size(display, &right, &bottom);
+ g_object_ref(G_OBJECT(display->extender));
+ gtk_fixed_put(GTK_FIXED(display->support), display->extender, right - 1, bottom - 1);
- g_object_ref(G_OBJECT(display->extender));
- gtk_fixed_put(GTK_FIXED(display->support), display->extender, right - 1, bottom - 1);
+ /**
+ * Si possible, on centre le contenu obtenu.
+ */
- /**
- * Si possible, on centre le contenu obtenu.
- */
+ gtk_widget_get_allocation(GTK_WIDGET(display), &allocation);
- gtk_widget_get_allocation(GTK_WIDGET(display), &allocation);
+ gtk_graph_display_update_support_margins(display, &allocation);
- gtk_graph_display_update_support_margins(display, &allocation);
-
-
-
- }
- while (0);
-
-
-
- break;
-
- }
-
- }
+ ggddma_done:
change_editor_items_current_view_content(GTK_DISPLAY_PANEL(display));
@@ -1063,7 +1027,7 @@ static void gtk_graph_display_reach_caret_limit(GtkBufferDisplay *node, GdkScrol
g_buffer_view_get_restrictions(view, &first, &last);
g_object_unref(G_OBJECT(view));
- range = g_binary_routine_get_range(display->routine);
+ range = g_binary_symbol_get_range(display->routine);
proc = g_loaded_binary_get_processor(GTK_DISPLAY_PANEL(display)->binary);