diff options
Diffstat (limited to 'tools/perf/util/util.c')
-rw-r--r-- | tools/perf/util/util.c | 37 |
1 files changed, 37 insertions, 0 deletions
diff --git a/tools/perf/util/util.c b/tools/perf/util/util.c index 35b20dd454de..b7766c577b01 100644 --- a/tools/perf/util/util.c +++ b/tools/perf/util/util.c | |||
@@ -14,6 +14,7 @@ | |||
14 | #include <limits.h> | 14 | #include <limits.h> |
15 | #include <byteswap.h> | 15 | #include <byteswap.h> |
16 | #include <linux/kernel.h> | 16 | #include <linux/kernel.h> |
17 | #include <linux/log2.h> | ||
17 | #include <unistd.h> | 18 | #include <unistd.h> |
18 | #include "callchain.h" | 19 | #include "callchain.h" |
19 | #include "strlist.h" | 20 | #include "strlist.h" |
@@ -670,3 +671,39 @@ int fetch_current_timestamp(char *buf, size_t sz) | |||
670 | 671 | ||
671 | return 0; | 672 | return 0; |
672 | } | 673 | } |
674 | |||
675 | void print_binary(unsigned char *data, size_t len, | ||
676 | size_t bytes_per_line, print_binary_t printer, | ||
677 | void *extra) | ||
678 | { | ||
679 | size_t i, j, mask; | ||
680 | |||
681 | if (!printer) | ||
682 | return; | ||
683 | |||
684 | bytes_per_line = roundup_pow_of_two(bytes_per_line); | ||
685 | mask = bytes_per_line - 1; | ||
686 | |||
687 | printer(BINARY_PRINT_DATA_BEGIN, 0, extra); | ||
688 | for (i = 0; i < len; i++) { | ||
689 | if ((i & mask) == 0) { | ||
690 | printer(BINARY_PRINT_LINE_BEGIN, -1, extra); | ||
691 | printer(BINARY_PRINT_ADDR, i, extra); | ||
692 | } | ||
693 | |||
694 | printer(BINARY_PRINT_NUM_DATA, data[i], extra); | ||
695 | |||
696 | if (((i & mask) == mask) || i == len - 1) { | ||
697 | for (j = 0; j < mask-(i & mask); j++) | ||
698 | printer(BINARY_PRINT_NUM_PAD, -1, extra); | ||
699 | |||
700 | printer(BINARY_PRINT_SEP, i, extra); | ||
701 | for (j = i & ~mask; j <= i; j++) | ||
702 | printer(BINARY_PRINT_CHAR_DATA, data[j], extra); | ||
703 | for (j = 0; j < mask-(i & mask); j++) | ||
704 | printer(BINARY_PRINT_CHAR_PAD, i, extra); | ||
705 | printer(BINARY_PRINT_LINE_END, -1, extra); | ||
706 | } | ||
707 | } | ||
708 | printer(BINARY_PRINT_DATA_END, -1, extra); | ||
709 | } | ||