mirror of
https://github.com/radareorg/radare2.git
synced 2025-02-26 09:06:02 +00:00
- This reverts commit 747de793c369f29238abaf8138202a4894d4c8c1. - And skip dummy nodes for VVtf
This commit is contained in:
parent
a4de64b169
commit
a5811d1a2b
@ -1699,19 +1699,6 @@ static int cb_scrstrconv(void *user, void *data) {
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int cb_graphdummy(void *user, void *data) {
|
|
||||||
RCore *core = (RCore*) user;
|
|
||||||
RConfigNode *node = (RConfigNode *) data;
|
|
||||||
if (!strcmp (node->value, "?")) {
|
|
||||||
r_cons_printf ("dot\ngml\ngmlfcn\n");
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
if (core->graph) {
|
|
||||||
core->graph->use_dummynodes = node->i_value;
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
static int cb_graphformat(void *user, void *data) {
|
static int cb_graphformat(void *user, void *data) {
|
||||||
RConfigNode *node = (RConfigNode *) data;
|
RConfigNode *node = (RConfigNode *) data;
|
||||||
if (!strcmp (node->value, "?")) {
|
if (!strcmp (node->value, "?")) {
|
||||||
@ -2735,7 +2722,6 @@ R_API int r_core_config_init(RCore *core) {
|
|||||||
SETPREF ("tcp.islocal", "false", "Bind a loopback for tcp command server");
|
SETPREF ("tcp.islocal", "false", "Bind a loopback for tcp command server");
|
||||||
|
|
||||||
/* graph */
|
/* graph */
|
||||||
SETCB ("graph.dummy", "true", &cb_graphdummy, "Add dummy nodes to improve edge");
|
|
||||||
SETPREF ("graph.comments", "true", "Show disasm comments in graph");
|
SETPREF ("graph.comments", "true", "Show disasm comments in graph");
|
||||||
SETPREF ("graph.cmtright", "false", "Show comments at right");
|
SETPREF ("graph.cmtright", "false", "Show comments at right");
|
||||||
SETCB ("graph.format", "dot", &cb_graphformat, "Specify output format for graphs (dot, gml, gmlfcn)");
|
SETCB ("graph.format", "dot", &cb_graphformat, "Specify output format for graphs (dot, gml, gmlfcn)");
|
||||||
|
@ -5670,19 +5670,11 @@ static void cmd_agraph_print(RCore *core, const char *input) {
|
|||||||
r_core_cmd_help (core, help_msg_agg);
|
r_core_cmd_help (core, help_msg_agg);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
if (!core->graph) {
|
core->graph->can->linemode = r_config_get_i (core->config, "graph.linemode");
|
||||||
core->graph = r_agraph_new (NULL, r_config_get_i (core->config, "graph.dummy"));
|
core->graph->can->color = r_config_get_i (core->config, "scr.color");
|
||||||
}
|
r_agraph_set_title (core->graph,
|
||||||
if (core->graph) {
|
r_config_get (core->config, "graph.title"));
|
||||||
if (!core->graph->can) {
|
r_agraph_print (core->graph);
|
||||||
core->graph->can = r_cons_canvas_new (1, 1);
|
|
||||||
}
|
|
||||||
core->graph->can->linemode = r_config_get_i (core->config, "graph.linemode");
|
|
||||||
core->graph->can->color = r_config_get_i (core->config, "scr.color");
|
|
||||||
r_agraph_set_title (core->graph,
|
|
||||||
r_config_get (core->config, "graph.title"));
|
|
||||||
r_agraph_print (core->graph);
|
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1840,6 +1840,8 @@ R_API bool r_core_init(RCore *core) {
|
|||||||
core->fs = r_fs_new ();
|
core->fs = r_fs_new ();
|
||||||
core->flags = r_flag_new ();
|
core->flags = r_flag_new ();
|
||||||
core->flags->cb_printf = r_cons_printf;
|
core->flags->cb_printf = r_cons_printf;
|
||||||
|
core->graph = r_agraph_new (r_cons_canvas_new (1, 1));
|
||||||
|
core->graph->need_reload_nodes = false;
|
||||||
core->asmqjmps_size = R_CORE_ASMQJMPS_NUM;
|
core->asmqjmps_size = R_CORE_ASMQJMPS_NUM;
|
||||||
if (sizeof (ut64) * core->asmqjmps_size < core->asmqjmps_size) {
|
if (sizeof (ut64) * core->asmqjmps_size < core->asmqjmps_size) {
|
||||||
core->asmqjmps_size = 0;
|
core->asmqjmps_size = 0;
|
||||||
@ -1899,8 +1901,6 @@ R_API bool r_core_init(RCore *core) {
|
|||||||
r_config_set (core->config, "asm.arch", R_SYS_ARCH);
|
r_config_set (core->config, "asm.arch", R_SYS_ARCH);
|
||||||
r_bp_use (core->dbg->bp, R_SYS_ARCH, core->anal->bits);
|
r_bp_use (core->dbg->bp, R_SYS_ARCH, core->anal->bits);
|
||||||
update_sdb (core);
|
update_sdb (core);
|
||||||
core->graph = r_agraph_new (NULL, r_config_get_i (core->config, "graph.dummy"));
|
|
||||||
core->graph->need_reload_nodes = false;
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1648,9 +1648,11 @@ void backedge_info (RAGraph *g) {
|
|||||||
arr[i][0] = tc;
|
arr[i][0] = tc;
|
||||||
arr[i][1] = tc + tl;
|
arr[i][1] = tc + tl;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (arr[i][0] > tc) {
|
if (arr[i][0] > tc) {
|
||||||
arr[i][0] = tc;
|
arr[i][0] = tc;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (arr[i][1] < tc + tl) {
|
if (arr[i][1] < tc + tl) {
|
||||||
arr[i][1] = tc + tl;
|
arr[i][1] = tc + tl;
|
||||||
}
|
}
|
||||||
@ -1797,14 +1799,7 @@ static void set_layout(RAGraph *g) {
|
|||||||
|
|
||||||
remove_cycles (g);
|
remove_cycles (g);
|
||||||
assign_layers (g);
|
assign_layers (g);
|
||||||
if (g->use_dummynodes) {
|
create_dummy_nodes (g);
|
||||||
// running this makes the graph look better, but 't' and 'f' keys
|
|
||||||
// dont work well because there are dummy nodes still in the graph
|
|
||||||
// which are not valid and should be fixed. The graph.dummy config
|
|
||||||
// var is the one used to choose this behaviour until the fix is done.
|
|
||||||
// also, layout times are improved without graph.dummy
|
|
||||||
create_dummy_nodes (g);
|
|
||||||
}
|
|
||||||
create_layers (g);
|
create_layers (g);
|
||||||
minimize_crossings (g);
|
minimize_crossings (g);
|
||||||
|
|
||||||
@ -2884,16 +2879,14 @@ static int agraph_reload_nodes(RAGraph *g, RCore *core, RAnalFunction *fcn) {
|
|||||||
|
|
||||||
static void follow_nth(RAGraph *g, int nth) {
|
static void follow_nth(RAGraph *g, int nth) {
|
||||||
const RGraphNode *cn = r_graph_nth_neighbour (g->graph, g->curnode, nth);
|
const RGraphNode *cn = r_graph_nth_neighbour (g->graph, g->curnode, nth);
|
||||||
RGraphNode *node;
|
RANode *a = get_anode (cn);
|
||||||
RListIter *iter;
|
|
||||||
r_list_foreach (g->curnode->out_nodes, iter, node) {
|
while (a && a->is_dummy) {
|
||||||
RANode *an = node->data;
|
cn = r_graph_nth_neighbour (g->graph, a->gnode, 0);
|
||||||
if (an->is_dummy) {
|
a = get_anode (cn);
|
||||||
eprintf ("if there's a dummy node it means the graph hasnt been generated properly\n");
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
if (cn) {
|
if (a) {
|
||||||
r_agraph_set_curnode (g, get_anode (cn));
|
r_agraph_set_curnode (g, a);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -3184,13 +3177,12 @@ static void agraph_toggle_speed(RAGraph *g, RCore *core) {
|
|||||||
g->movspeed = g->movspeed == DEFAULT_SPEED? alt: DEFAULT_SPEED;
|
g->movspeed = g->movspeed == DEFAULT_SPEED? alt: DEFAULT_SPEED;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void agraph_init(RAGraph *g, bool usedummy) {
|
static void agraph_init(RAGraph *g) {
|
||||||
g->is_callgraph = false;
|
g->is_callgraph = false;
|
||||||
g->is_instep = false;
|
g->is_instep = false;
|
||||||
g->need_reload_nodes = true;
|
g->need_reload_nodes = true;
|
||||||
g->force_update_seek = true;
|
g->force_update_seek = true;
|
||||||
g->graph = r_graph_new ();
|
g->graph = r_graph_new ();
|
||||||
g->use_dummynodes = usedummy;
|
|
||||||
g->nodes = sdb_new0 (); // XXX leak
|
g->nodes = sdb_new0 (); // XXX leak
|
||||||
g->edgemode = 2;
|
g->edgemode = 2;
|
||||||
g->zoom = ZOOM_DEFAULT;
|
g->zoom = ZOOM_DEFAULT;
|
||||||
@ -3435,13 +3427,13 @@ R_API void r_agraph_free(RAGraph *g) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
R_API RAGraph *r_agraph_new(RConsCanvas *can, bool usedummy) {
|
R_API RAGraph *r_agraph_new(RConsCanvas *can) {
|
||||||
RAGraph *g = R_NEW0 (RAGraph);
|
RAGraph *g = R_NEW0 (RAGraph);
|
||||||
if (!g) {
|
if (!g) {
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
g->can = can;
|
g->can = can;
|
||||||
agraph_init (g, usedummy);
|
agraph_init (g);
|
||||||
agraph_sdb_init (g);
|
agraph_sdb_init (g);
|
||||||
return g;
|
return g;
|
||||||
}
|
}
|
||||||
@ -3555,7 +3547,6 @@ static void graph_breakpoint(RCore *core) {
|
|||||||
static void graph_continue(RCore *core) {
|
static void graph_continue(RCore *core) {
|
||||||
r_core_cmd (core, "dc", 0);
|
r_core_cmd (core, "dc", 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void applyDisMode(RCore *core) {
|
static void applyDisMode(RCore *core) {
|
||||||
switch (disMode) {
|
switch (disMode) {
|
||||||
case 0:
|
case 0:
|
||||||
@ -3627,7 +3618,7 @@ R_API int r_core_visual_graph(RCore *core, RAGraph *g, RAnalFunction *_fcn, int
|
|||||||
r_cons_canvas_free (can);
|
r_cons_canvas_free (can);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
g = r_agraph_new (can, r_config_get_i (core->config, "graph.dummy"));
|
g = r_agraph_new (can);
|
||||||
if (!g) {
|
if (!g) {
|
||||||
r_cons_canvas_free (can);
|
r_cons_canvas_free (can);
|
||||||
r_config_restore (hc);
|
r_config_restore (hc);
|
||||||
|
@ -439,7 +439,7 @@ static int GH(print_double_linked_list_bin_simple)(RCore *core, GHT bin, GH(RHea
|
|||||||
}
|
}
|
||||||
|
|
||||||
static int GH(print_double_linked_list_bin_graph)(RCore *core, GHT bin, GH(RHeap_MallocState) *main_arena, GHT brk_start) {
|
static int GH(print_double_linked_list_bin_graph)(RCore *core, GHT bin, GH(RHeap_MallocState) *main_arena, GHT brk_start) {
|
||||||
RAGraph *g = r_agraph_new (r_cons_canvas_new (1, 1), r_config_get_i (core->config, "graph.dummy"));
|
RAGraph *g = r_agraph_new (r_cons_canvas_new (1, 1));
|
||||||
GHT next = GHT_MAX;
|
GHT next = GHT_MAX;
|
||||||
char title[256], chunk[256];
|
char title[256], chunk[256];
|
||||||
RANode *bin_node = NULL, *prev_node = NULL, *next_node = NULL;
|
RANode *bin_node = NULL, *prev_node = NULL, *next_node = NULL;
|
||||||
@ -699,7 +699,7 @@ static void GH(print_mmap_graph)(RCore *core, GH(RHeap_MallocState) *malloc_stat
|
|||||||
can->linemode = r_config_get_i (core->config, "graph.linemode");
|
can->linemode = r_config_get_i (core->config, "graph.linemode");
|
||||||
can->color = r_config_get_i (core->config, "scr.color");
|
can->color = r_config_get_i (core->config, "scr.color");
|
||||||
core->cons->use_utf8 = r_config_get_i (core->config, "scr.utf8");
|
core->cons->use_utf8 = r_config_get_i (core->config, "scr.utf8");
|
||||||
RAGraph *g = r_agraph_new (NULL, r_config_get_i (core->config, "graph.dummy"));
|
RAGraph *g = r_agraph_new (can);
|
||||||
if (!g) {
|
if (!g) {
|
||||||
r_cons_canvas_free (can);
|
r_cons_canvas_free (can);
|
||||||
r_config_restore (hc);
|
r_config_restore (hc);
|
||||||
@ -800,7 +800,7 @@ static void GH(print_heap_graph)(RCore *core, GH(RHeap_MallocState) *main_arena,
|
|||||||
can->linemode = r_config_get_i (core->config, "graph.linemode");
|
can->linemode = r_config_get_i (core->config, "graph.linemode");
|
||||||
can->color = r_config_get_i (core->config, "scr.color");
|
can->color = r_config_get_i (core->config, "scr.color");
|
||||||
core->cons->use_utf8 = r_config_get_i (core->config, "scr.utf8");
|
core->cons->use_utf8 = r_config_get_i (core->config, "scr.utf8");
|
||||||
RAGraph *g = r_agraph_new (can, r_config_get_i (core->config, "graph.dummy"));
|
RAGraph *g = r_agraph_new (can);
|
||||||
if (!g) {
|
if (!g) {
|
||||||
r_cons_canvas_free (can);
|
r_cons_canvas_free (can);
|
||||||
r_config_restore (hc);
|
r_config_restore (hc);
|
||||||
|
@ -873,7 +873,6 @@ typedef struct r_ascii_graph_t {
|
|||||||
bool is_callgraph;
|
bool is_callgraph;
|
||||||
int zoom;
|
int zoom;
|
||||||
int movspeed;
|
int movspeed;
|
||||||
bool use_dummynodes;
|
|
||||||
|
|
||||||
RANode *update_seek_on;
|
RANode *update_seek_on;
|
||||||
bool need_reload_nodes;
|
bool need_reload_nodes;
|
||||||
@ -898,7 +897,7 @@ typedef struct r_ascii_graph_t {
|
|||||||
} RAGraph;
|
} RAGraph;
|
||||||
|
|
||||||
#ifdef R_API
|
#ifdef R_API
|
||||||
R_API RAGraph *r_agraph_new(RConsCanvas *can, bool usedummy);
|
R_API RAGraph *r_agraph_new(RConsCanvas *can);
|
||||||
R_API void r_agraph_free(RAGraph *g);
|
R_API void r_agraph_free(RAGraph *g);
|
||||||
R_API void r_agraph_reset(RAGraph *g);
|
R_API void r_agraph_reset(RAGraph *g);
|
||||||
R_API void r_agraph_set_title(RAGraph *g, const char *title);
|
R_API void r_agraph_set_title(RAGraph *g, const char *title);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user