diff options
Diffstat (limited to 'src/analysis')
-rw-r--r-- | src/analysis/line-int.h | 1 | ||||
-rw-r--r-- | src/analysis/line.c | 46 | ||||
-rw-r--r-- | src/analysis/line.h | 6 | ||||
-rw-r--r-- | src/analysis/line_code.c | 1 |
4 files changed, 53 insertions, 1 deletions
diff --git a/src/analysis/line-int.h b/src/analysis/line-int.h index 97aa93c..59ef5f8 100644 --- a/src/analysis/line-int.h +++ b/src/analysis/line-int.h @@ -47,6 +47,7 @@ struct _GRenderingLine DL_LIST_ITEM(link); /* Maillon de liste chaînée */ uint64_t offset; /* Position en mémoire/physique*/ + off_t length; /* Nombre d'adresses associées */ RenderingLineType type; /* Type de représentation */ RenderingLineFlag flags; /* Extension d'informations */ diff --git a/src/analysis/line.c b/src/analysis/line.c index 31a8a36..8cfad25 100644 --- a/src/analysis/line.c +++ b/src/analysis/line.c @@ -55,6 +55,7 @@ static void g_rendering_line_add_link_reference(GRenderingLine *, GRenderingLine static GdkPixbuf *g_rendering_line_render_icon(const GRenderingLine *, const char *, GtkIconSize); + /* Indique le type définit pour une ligne de représentation. */ G_DEFINE_TYPE(GRenderingLine, g_rendering_line, G_TYPE_OBJECT); @@ -296,6 +297,44 @@ void g_rendering_line_link_with(GRenderingLine *line, GRenderingLine *dest, Inst /****************************************************************************** * * +* Paramètres : line = ligne dont les informations sont à consulter. * +* * +* Description : Indique si la ligne a une ou plusieurs origines. * +* * +* Retour : - * +* * +* Remarques : - * +* * +******************************************************************************/ + +bool g_rendering_line_has_sources(const GRenderingLine *line) +{ + return (line->from_count > 0); + +} + + +/****************************************************************************** +* * +* Paramètres : line = ligne dont les informations sont à consulter. * +* * +* Description : Indique si la ligne a une suite autre que la ligne suivante. * +* * +* Retour : - * +* * +* Remarques : - * +* * +******************************************************************************/ + +bool g_rendering_line_has_destination(const GRenderingLine *line) +{ + return (line->to != NULL && line->link_type != ILT_CALL); + +} + + +/****************************************************************************** +* * * Paramètres : line = ligne dont les informations sont à consulter. * * stock_id = identifiant GTK de l'image à charger. * * size = taille de l'image souhaitée. * @@ -355,6 +394,11 @@ void g_rendering_line_draw(GRenderingLine *line, GdkDrawable *drawable, GdkGC *g gdk_draw_layout(drawable, gc, x1, y, line->layout); + if (line->to != NULL) + pixbuf = g_rendering_line_render_icon(line, "gtk-bold", GTK_ICON_SIZE_MENU); + else + + if (line->flags & RLF_BREAK_POINT) pixbuf = g_rendering_line_render_icon(line, "gtk-yes", GTK_ICON_SIZE_MENU); @@ -632,7 +676,7 @@ GRenderingLine *g_rendering_line_find_by_address(GRenderingLine *lines, const GR lines_list_for_each(result, lines) { - if (result->offset == addr) break; + if (result->offset <= addr && addr < (result->offset + result->length)) break; if (result == last) { diff --git a/src/analysis/line.h b/src/analysis/line.h index b27bd9b..aa200f8 100644 --- a/src/analysis/line.h +++ b/src/analysis/line.h @@ -104,6 +104,12 @@ RenderingLineFlag g_rendering_line_get_flags(const GRenderingLine *); /* Etablit un lien entre deux lignes de représentation. */ void g_rendering_line_link_with(GRenderingLine *, GRenderingLine *, InstructionLinkType); +/* Indique si la ligne a une ou plusieurs origines. */ +bool g_rendering_line_has_sources(const GRenderingLine *); + +/* Indique si la ligne a une suite autre que la ligne suivante. */ +bool g_rendering_line_has_destination(const GRenderingLine *); + /* Procède à l'initialisation des bases d'une représentation. */ void g_rendering_line_draw(GRenderingLine *, GdkDrawable *, GdkGC *, gint, gint, gint, gint); diff --git a/src/analysis/line_code.c b/src/analysis/line_code.c index dcb8c5e..5ca3623 100644 --- a/src/analysis/line_code.c +++ b/src/analysis/line_code.c @@ -287,6 +287,7 @@ GRenderingLine *g_code_line_new(uint64_t offset, GArchInstruction *instr, const result = g_object_new(G_TYPE_CODE_LINE, NULL); G_RENDERING_LINE(result)->offset = offset; + g_arch_instruction_get_location(instr, NULL, &G_RENDERING_LINE(result)->length, NULL); result->instr = instr; result->options = options; |