diff options
author | Arnaldo Carvalho de Melo <acme@redhat.com> | 2017-10-17 09:35:00 -0400 |
---|---|---|
committer | Arnaldo Carvalho de Melo <acme@redhat.com> | 2017-10-23 15:30:52 -0400 |
commit | 923d0c9ae570c3f33a0b5a9517c23ccc816d9b75 (patch) | |
tree | f04db4f73f7c6b87f8ecfdbd718a57ceb7d15c58 /tools/perf/builtin-script.c | |
parent | 7958e541495d7f99cefef2300b2c388865626c2e (diff) |
perf tools: Introduce binary__fprintf()
Out of print_binary() but receiving a fp pointer and expecting that the
printer be a fprintf like function, i.e. receive a FILE pointer and
return the number of characters printed.
Cc: Adrian Hunter <adrian.hunter@intel.com>
Cc: David Ahern <dsahern@gmail.com>
Cc: Jiri Olsa <jolsa@kernel.org>
Cc: Namhyung Kim <namhyung@kernel.org>
Cc: Wang Nan <wangnan0@huawei.com>
Cc: yuzhoujian <yuzhoujian@didichuxing.com>
Link: http://lkml.kernel.org/n/tip-6oqnxr6lmgqe6q6p3iugnscx@git.kernel.org
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
Diffstat (limited to 'tools/perf/builtin-script.c')
-rw-r--r-- | tools/perf/builtin-script.c | 32 |
1 files changed, 17 insertions, 15 deletions
diff --git a/tools/perf/builtin-script.c b/tools/perf/builtin-script.c index 7167df215a42..5a7dfc5691a1 100644 --- a/tools/perf/builtin-script.c +++ b/tools/perf/builtin-script.c | |||
@@ -1164,40 +1164,40 @@ struct printer_data { | |||
1164 | bool is_printable; | 1164 | bool is_printable; |
1165 | }; | 1165 | }; |
1166 | 1166 | ||
1167 | static void | 1167 | static int sample__fprintf_bpf_output(enum binary_printer_ops op, |
1168 | print_sample_bpf_output_printer(enum binary_printer_ops op, | 1168 | unsigned int val, |
1169 | unsigned int val, | 1169 | void *extra, FILE *fp) |
1170 | void *extra) | ||
1171 | { | 1170 | { |
1172 | unsigned char ch = (unsigned char)val; | 1171 | unsigned char ch = (unsigned char)val; |
1173 | struct printer_data *printer_data = extra; | 1172 | struct printer_data *printer_data = extra; |
1173 | int printed = 0; | ||
1174 | 1174 | ||
1175 | switch (op) { | 1175 | switch (op) { |
1176 | case BINARY_PRINT_DATA_BEGIN: | 1176 | case BINARY_PRINT_DATA_BEGIN: |
1177 | printf("\n"); | 1177 | printed += fprintf(fp, "\n"); |
1178 | break; | 1178 | break; |
1179 | case BINARY_PRINT_LINE_BEGIN: | 1179 | case BINARY_PRINT_LINE_BEGIN: |
1180 | printf("%17s", !printer_data->line_no ? "BPF output:" : | 1180 | printed += fprintf(fp, "%17s", !printer_data->line_no ? "BPF output:" : |
1181 | " "); | 1181 | " "); |
1182 | break; | 1182 | break; |
1183 | case BINARY_PRINT_ADDR: | 1183 | case BINARY_PRINT_ADDR: |
1184 | printf(" %04x:", val); | 1184 | printed += fprintf(fp, " %04x:", val); |
1185 | break; | 1185 | break; |
1186 | case BINARY_PRINT_NUM_DATA: | 1186 | case BINARY_PRINT_NUM_DATA: |
1187 | printf(" %02x", val); | 1187 | printed += fprintf(fp, " %02x", val); |
1188 | break; | 1188 | break; |
1189 | case BINARY_PRINT_NUM_PAD: | 1189 | case BINARY_PRINT_NUM_PAD: |
1190 | printf(" "); | 1190 | printed += fprintf(fp, " "); |
1191 | break; | 1191 | break; |
1192 | case BINARY_PRINT_SEP: | 1192 | case BINARY_PRINT_SEP: |
1193 | printf(" "); | 1193 | printed += fprintf(fp, " "); |
1194 | break; | 1194 | break; |
1195 | case BINARY_PRINT_CHAR_DATA: | 1195 | case BINARY_PRINT_CHAR_DATA: |
1196 | if (printer_data->hit_nul && ch) | 1196 | if (printer_data->hit_nul && ch) |
1197 | printer_data->is_printable = false; | 1197 | printer_data->is_printable = false; |
1198 | 1198 | ||
1199 | if (!isprint(ch)) { | 1199 | if (!isprint(ch)) { |
1200 | printf("%c", '.'); | 1200 | printed += fprintf(fp, "%c", '.'); |
1201 | 1201 | ||
1202 | if (!printer_data->is_printable) | 1202 | if (!printer_data->is_printable) |
1203 | break; | 1203 | break; |
@@ -1207,20 +1207,22 @@ print_sample_bpf_output_printer(enum binary_printer_ops op, | |||
1207 | else | 1207 | else |
1208 | printer_data->is_printable = false; | 1208 | printer_data->is_printable = false; |
1209 | } else { | 1209 | } else { |
1210 | printf("%c", ch); | 1210 | printed += fprintf(fp, "%c", ch); |
1211 | } | 1211 | } |
1212 | break; | 1212 | break; |
1213 | case BINARY_PRINT_CHAR_PAD: | 1213 | case BINARY_PRINT_CHAR_PAD: |
1214 | printf(" "); | 1214 | printed += fprintf(fp, " "); |
1215 | break; | 1215 | break; |
1216 | case BINARY_PRINT_LINE_END: | 1216 | case BINARY_PRINT_LINE_END: |
1217 | printf("\n"); | 1217 | printed += fprintf(fp, "\n"); |
1218 | printer_data->line_no++; | 1218 | printer_data->line_no++; |
1219 | break; | 1219 | break; |
1220 | case BINARY_PRINT_DATA_END: | 1220 | case BINARY_PRINT_DATA_END: |
1221 | default: | 1221 | default: |
1222 | break; | 1222 | break; |
1223 | } | 1223 | } |
1224 | |||
1225 | return printed; | ||
1224 | } | 1226 | } |
1225 | 1227 | ||
1226 | static void print_sample_bpf_output(struct perf_sample *sample) | 1228 | static void print_sample_bpf_output(struct perf_sample *sample) |
@@ -1229,7 +1231,7 @@ static void print_sample_bpf_output(struct perf_sample *sample) | |||
1229 | struct printer_data printer_data = {0, false, true}; | 1231 | struct printer_data printer_data = {0, false, true}; |
1230 | 1232 | ||
1231 | print_binary(sample->raw_data, nr_bytes, 8, | 1233 | print_binary(sample->raw_data, nr_bytes, 8, |
1232 | print_sample_bpf_output_printer, &printer_data); | 1234 | sample__fprintf_bpf_output, &printer_data); |
1233 | 1235 | ||
1234 | if (printer_data.is_printable && printer_data.hit_nul) | 1236 | if (printer_data.is_printable && printer_data.hit_nul) |
1235 | printf("%17s \"%s\"\n", "BPF string:", | 1237 | printf("%17s \"%s\"\n", "BPF string:", |