mirror of
https://github.com/torvalds/linux
synced 2024-09-06 18:01:05 +00:00
bpftool: Return an error on prog dumps if both CFG and JSON are required
We do not support JSON output for control flow graphs of programs with bpftool. So far, requiring both the CFG and JSON output would result in producing a null JSON object. It makes more sense to raise an error directly when parsing command line arguments and options, so that users know they won't get any output they might expect. If JSON is required for the graph, we leave it to Graphviz instead: # bpftool prog dump xlated <REF> visual | dot -Tjson Suggested-by: Eduard Zingerman <eddyz87@gmail.com> Signed-off-by: Quentin Monnet <quentin@isovalent.com> Link: https://lore.kernel.org/r/20230405132120.59886-5-quentin@isovalent.com Signed-off-by: Alexei Starovoitov <ast@kernel.org>
This commit is contained in:
parent
9fd496848b
commit
05a06be722
|
@ -255,16 +255,19 @@ _bpftool_map_update_get_name()
|
|||
|
||||
_bpftool()
|
||||
{
|
||||
local cur prev words objword
|
||||
local cur prev words objword json=0
|
||||
_init_completion || return
|
||||
|
||||
# Deal with options
|
||||
if [[ ${words[cword]} == -* ]]; then
|
||||
local c='--version --json --pretty --bpffs --mapcompat --debug \
|
||||
--use-loader --base-btf'
|
||||
--use-loader --base-btf'
|
||||
COMPREPLY=( $( compgen -W "$c" -- "$cur" ) )
|
||||
return 0
|
||||
fi
|
||||
if _bpftool_search_list -j --json -p --pretty; then
|
||||
json=1
|
||||
fi
|
||||
|
||||
# Deal with simplest keywords
|
||||
case $prev in
|
||||
|
@ -367,7 +370,7 @@ _bpftool()
|
|||
;;
|
||||
*)
|
||||
_bpftool_once_attr 'file'
|
||||
if _bpftool_search_list 'xlated'; then
|
||||
if _bpftool_search_list 'xlated' && [[ "$json" == 0 ]]; then
|
||||
COMPREPLY+=( $( compgen -W 'opcodes visual linum' -- \
|
||||
"$cur" ) )
|
||||
else
|
||||
|
|
|
@ -849,9 +849,7 @@ prog_dump(struct bpf_prog_info *info, enum dump_mode mode,
|
|||
dd.finfo_rec_size = info->func_info_rec_size;
|
||||
dd.prog_linfo = prog_linfo;
|
||||
|
||||
if (json_output && visual)
|
||||
jsonw_null(json_wtr);
|
||||
else if (json_output)
|
||||
if (json_output)
|
||||
dump_xlated_json(&dd, buf, member_len, opcodes, linum);
|
||||
else if (visual)
|
||||
dump_xlated_cfg(&dd, buf, member_len);
|
||||
|
@ -940,6 +938,10 @@ static int do_dump(int argc, char **argv)
|
|||
usage();
|
||||
goto exit_close;
|
||||
}
|
||||
if (json_output && visual) {
|
||||
p_err("'visual' is not compatible with JSON output");
|
||||
goto exit_close;
|
||||
}
|
||||
|
||||
if (json_output && nb_fds > 1)
|
||||
jsonw_start_array(json_wtr); /* root array */
|
||||
|
|
Loading…
Reference in a new issue