aboutsummaryrefslogtreecommitdiffstats
path: root/tools/perf/builtin-script.c
diff options
context:
space:
mode:
authorArnaldo Carvalho de Melo <acme@redhat.com>2017-10-17 09:35:00 -0400
committerArnaldo Carvalho de Melo <acme@redhat.com>2017-10-23 15:30:52 -0400
commit923d0c9ae570c3f33a0b5a9517c23ccc816d9b75 (patch)
treef04db4f73f7c6b87f8ecfdbd718a57ceb7d15c58 /tools/perf/builtin-script.c
parent7958e541495d7f99cefef2300b2c388865626c2e (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.c32
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
1167static void 1167static int sample__fprintf_bpf_output(enum binary_printer_ops op,
1168print_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
1226static void print_sample_bpf_output(struct perf_sample *sample) 1228static 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:",