Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

perf trace: Introduce trace__btf_scnprintf()

To have a central place that will look at the BTF type and call the
right scnprintf routine or return zero, meaning BTF pretty printing
isn't available or not implemented for a specific type.

Signed-off-by: Howard Chu <howardchu95@gmail.com>
Tested-by: Howard Chu <howardchu95@gmail.com>
Cc: Adrian Hunter <adrian.hunter@intel.com>
Cc: Ian Rogers <irogers@google.com>
Cc: Jiri Olsa <jolsa@kernel.org>
Cc: Kan Liang <kan.liang@linux.intel.com>
Cc: Namhyung Kim <namhyung@kernel.org>
Link: https://lore.kernel.org/r/20240624181345.124764-8-howardchu95@gmail.com
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>

+27 -22
+27 -22
tools/perf/builtin-trace.c
··· 981 981 static size_t trace__btf_enum_scnprintf(struct trace *trace, struct syscall_arg_fmt *arg_fmt, char *bf, 982 982 size_t size, int val, char *type) 983 983 { 984 - if (trace->btf == NULL) 985 - return 0; 986 - 987 984 if (syscall_arg_fmt__cache_btf_enum(arg_fmt, trace->btf, type) < 0) 988 985 return 0; 989 986 990 987 return btf_enum_scnprintf(arg_fmt->type, trace->btf, bf, size, val); 991 988 } 989 + 990 + static size_t trace__btf_scnprintf(struct trace *trace, struct syscall_arg_fmt *arg_fmt, char *bf, 991 + size_t size, int val, char *type) 992 + { 993 + if (trace->btf == NULL) 994 + return 0; 995 + 996 + if (arg_fmt->is_enum) 997 + return trace__btf_enum_scnprintf(trace, arg_fmt, bf, size, val, type); 998 + 999 + return 0; 1000 + } 1001 + 992 1002 #else // HAVE_LIBBPF_SUPPORT 993 - static size_t trace__btf_enum_scnprintf(struct trace *trace __maybe_unused, struct syscall_arg_fmt *arg_fmt __maybe_unused, 994 - char *bf __maybe_unused, size_t size __maybe_unused, int val __maybe_unused, 995 - char *type __maybe_unused) 1003 + static size_t trace__btf_scnprintf(struct trace *trace __maybe_unused, struct syscall_arg_fmt *arg_fmt __maybe_unused, 1004 + char *bf __maybe_unused, size_t size __maybe_unused, int val __maybe_unused, 1005 + char *type __maybe_unused) 996 1006 { 997 1007 return 0; 998 1008 } ··· 2193 2183 unsigned char *args, void *augmented_args, int augmented_args_size, 2194 2184 struct trace *trace, struct thread *thread) 2195 2185 { 2196 - size_t printed = 0; 2186 + size_t printed = 0, btf_printed; 2197 2187 unsigned long val; 2198 2188 u8 bit = 1; 2199 2189 struct syscall_arg arg = { ··· 2247 2237 if (trace->show_arg_names) 2248 2238 printed += scnprintf(bf + printed, size - printed, "%s: ", field->name); 2249 2239 2250 - if (sc->arg_fmt[arg.idx].is_enum) { 2251 - size_t p = trace__btf_enum_scnprintf(trace, &sc->arg_fmt[arg.idx], bf + printed, 2252 - size - printed, val, field->type); 2253 - if (p) { 2254 - printed += p; 2255 - continue; 2256 - } 2240 + btf_printed = trace__btf_scnprintf(trace, &sc->arg_fmt[arg.idx], bf + printed, 2241 + size - printed, val, field->type); 2242 + if (btf_printed) { 2243 + printed += btf_printed; 2244 + continue; 2257 2245 } 2258 2246 2259 2247 printed += syscall_arg_fmt__scnprintf_val(&sc->arg_fmt[arg.idx], ··· 2900 2892 size_t size = sizeof(bf); 2901 2893 struct tep_format_field *field = evsel->tp_format->format.fields; 2902 2894 struct syscall_arg_fmt *arg = __evsel__syscall_arg_fmt(evsel); 2903 - size_t printed = 0; 2895 + size_t printed = 0, btf_printed; 2904 2896 unsigned long val; 2905 2897 u8 bit = 1; 2906 2898 struct syscall_arg syscall_arg = { ··· 2950 2942 if (trace->show_arg_names) 2951 2943 printed += scnprintf(bf + printed, size - printed, "%s: ", field->name); 2952 2944 2953 - if (arg->is_enum) { 2954 - size_t p = trace__btf_enum_scnprintf(trace, arg, bf + printed, 2955 - size - printed, val, field->type); 2956 - if (p) { 2957 - printed += p; 2958 - continue; 2959 - } 2945 + btf_printed = trace__btf_scnprintf(trace, arg, bf + printed, size - printed, val, field->type); 2946 + if (btf_printed) { 2947 + printed += btf_printed; 2948 + continue; 2960 2949 } 2961 2950 2962 2951 printed += syscall_arg_fmt__scnprintf_val(arg, bf + printed, size - printed, &syscall_arg, val);