diff options
Diffstat (limited to 'tools/perf/util/util.c')
| -rw-r--r-- | tools/perf/util/util.c | 25 |
1 files changed, 25 insertions, 0 deletions
diff --git a/tools/perf/util/util.c b/tools/perf/util/util.c index d03599fbe78b..2055cf38041c 100644 --- a/tools/perf/util/util.c +++ b/tools/perf/util/util.c | |||
| @@ -1,6 +1,11 @@ | |||
| 1 | #include "../perf.h" | 1 | #include "../perf.h" |
| 2 | #include "util.h" | 2 | #include "util.h" |
| 3 | #include <sys/mman.h> | 3 | #include <sys/mman.h> |
| 4 | #ifndef NO_BACKTRACE | ||
| 5 | #include <execinfo.h> | ||
| 6 | #endif | ||
| 7 | #include <stdio.h> | ||
| 8 | #include <stdlib.h> | ||
| 4 | 9 | ||
| 5 | /* | 10 | /* |
| 6 | * XXX We need to find a better place for these things... | 11 | * XXX We need to find a better place for these things... |
| @@ -158,3 +163,23 @@ size_t hex_width(u64 v) | |||
| 158 | 163 | ||
| 159 | return n; | 164 | return n; |
| 160 | } | 165 | } |
| 166 | |||
| 167 | /* Obtain a backtrace and print it to stdout. */ | ||
| 168 | #ifndef NO_BACKTRACE | ||
| 169 | void dump_stack(void) | ||
| 170 | { | ||
| 171 | void *array[16]; | ||
| 172 | size_t size = backtrace(array, ARRAY_SIZE(array)); | ||
| 173 | char **strings = backtrace_symbols(array, size); | ||
| 174 | size_t i; | ||
| 175 | |||
| 176 | printf("Obtained %zd stack frames.\n", size); | ||
| 177 | |||
| 178 | for (i = 0; i < size; i++) | ||
| 179 | printf("%s\n", strings[i]); | ||
| 180 | |||
| 181 | free(strings); | ||
| 182 | } | ||
| 183 | #else | ||
| 184 | void dump_stack(void) {} | ||
| 185 | #endif | ||
