diff options
Diffstat (limited to 'tools/bpf/bpftool/cfg.c')
| -rw-r--r-- | tools/bpf/bpftool/cfg.c | 29 | 
1 files changed, 16 insertions, 13 deletions
diff --git a/tools/bpf/bpftool/cfg.c b/tools/bpf/bpftool/cfg.c index 1951219a9af7..eec437cca2ea 100644 --- a/tools/bpf/bpftool/cfg.c +++ b/tools/bpf/bpftool/cfg.c @@ -380,7 +380,9 @@ static void cfg_destroy(struct cfg *cfg)  	}  } -static void draw_bb_node(struct func_node *func, struct bb_node *bb) +static void +draw_bb_node(struct func_node *func, struct bb_node *bb, struct dump_data *dd, +	     bool opcodes, bool linum)  {  	const char *shape; @@ -398,13 +400,10 @@ static void draw_bb_node(struct func_node *func, struct bb_node *bb)  		printf("EXIT");  	} else {  		unsigned int start_idx; -		struct dump_data dd = {}; - -		printf("{"); -		kernel_syms_load(&dd); +		printf("{\\\n");  		start_idx = bb->head - func->start; -		dump_xlated_for_graph(&dd, bb->head, bb->tail, start_idx); -		kernel_syms_destroy(&dd); +		dump_xlated_for_graph(dd, bb->head, bb->tail, start_idx, +				      opcodes, linum);  		printf("}");  	} @@ -430,12 +429,14 @@ static void draw_bb_succ_edges(struct func_node *func, struct bb_node *bb)  	}  } -static void func_output_bb_def(struct func_node *func) +static void +func_output_bb_def(struct func_node *func, struct dump_data *dd, +		   bool opcodes, bool linum)  {  	struct bb_node *bb;  	list_for_each_entry(bb, &func->bbs, l) { -		draw_bb_node(func, bb); +		draw_bb_node(func, bb, dd, opcodes, linum);  	}  } @@ -455,7 +456,8 @@ static void func_output_edges(struct func_node *func)  	       func_idx, ENTRY_BLOCK_INDEX, func_idx, EXIT_BLOCK_INDEX);  } -static void cfg_dump(struct cfg *cfg) +static void +cfg_dump(struct cfg *cfg, struct dump_data *dd, bool opcodes, bool linum)  {  	struct func_node *func; @@ -463,14 +465,15 @@ static void cfg_dump(struct cfg *cfg)  	list_for_each_entry(func, &cfg->funcs, l) {  		printf("subgraph \"cluster_%d\" {\n\tstyle=\"dashed\";\n\tcolor=\"black\";\n\tlabel=\"func_%d ()\";\n",  		       func->idx, func->idx); -		func_output_bb_def(func); +		func_output_bb_def(func, dd, opcodes, linum);  		func_output_edges(func);  		printf("}\n");  	}  	printf("}\n");  } -void dump_xlated_cfg(void *buf, unsigned int len) +void dump_xlated_cfg(struct dump_data *dd, void *buf, unsigned int len, +		     bool opcodes, bool linum)  {  	struct bpf_insn *insn = buf;  	struct cfg cfg; @@ -479,7 +482,7 @@ void dump_xlated_cfg(void *buf, unsigned int len)  	if (cfg_build(&cfg, insn, len))  		return; -	cfg_dump(&cfg); +	cfg_dump(&cfg, dd, opcodes, linum);  	cfg_destroy(&cfg);  }  |