diff options
41 files changed, 113 insertions, 77 deletions
diff --git a/tools/include/linux/string.h b/tools/include/linux/string.h index e26223f1f287..b466d0228b57 100644 --- a/tools/include/linux/string.h +++ b/tools/include/linux/string.h | |||
@@ -12,4 +12,6 @@ int strtobool(const char *s, bool *res); | |||
12 | extern size_t strlcpy(char *dest, const char *src, size_t size); | 12 | extern size_t strlcpy(char *dest, const char *src, size_t size); |
13 | #endif | 13 | #endif |
14 | 14 | ||
15 | char *str_error_r(int errnum, char *buf, size_t buflen); | ||
16 | |||
15 | #endif /* _LINUX_STRING_H_ */ | 17 | #endif /* _LINUX_STRING_H_ */ |
diff --git a/tools/lib/str_error_r.c b/tools/lib/str_error_r.c new file mode 100644 index 000000000000..503ae072244c --- /dev/null +++ b/tools/lib/str_error_r.c | |||
@@ -0,0 +1,26 @@ | |||
1 | #undef _GNU_SOURCE | ||
2 | #include <string.h> | ||
3 | #include <stdio.h> | ||
4 | #include <linux/string.h> | ||
5 | |||
6 | /* | ||
7 | * The tools so far have been using the strerror_r() GNU variant, that returns | ||
8 | * a string, be it the buffer passed or something else. | ||
9 | * | ||
10 | * But that, besides being tricky in cases where we expect that the function | ||
11 | * using strerror_r() returns the error formatted in a provided buffer (we have | ||
12 | * to check if it returned something else and copy that instead), breaks the | ||
13 | * build on systems not using glibc, like Alpine Linux, where musl libc is | ||
14 | * used. | ||
15 | * | ||
16 | * So, introduce yet another wrapper, str_error_r(), that has the GNU | ||
17 | * interface, but uses the portable XSI variant of strerror_r(), so that users | ||
18 | * rest asured that the provided buffer is used and it is what is returned. | ||
19 | */ | ||
20 | char *str_error_r(int errnum, char *buf, size_t buflen) | ||
21 | { | ||
22 | int err = strerror_r(errnum, buf, buflen); | ||
23 | if (err) | ||
24 | snprintf(buf, buflen, "INTERNAL ERROR: strerror_r(%d, %p, %zd)=%d", errnum, buf, buflen, err); | ||
25 | return buf; | ||
26 | } | ||
diff --git a/tools/perf/MANIFEST b/tools/perf/MANIFEST index 8c8c6b9ce915..f18e781447bc 100644 --- a/tools/perf/MANIFEST +++ b/tools/perf/MANIFEST | |||
@@ -29,6 +29,7 @@ tools/lib/symbol/kallsyms.c | |||
29 | tools/lib/symbol/kallsyms.h | 29 | tools/lib/symbol/kallsyms.h |
30 | tools/lib/find_bit.c | 30 | tools/lib/find_bit.c |
31 | tools/lib/bitmap.c | 31 | tools/lib/bitmap.c |
32 | tools/lib/str_error_r.c | ||
32 | tools/include/asm/atomic.h | 33 | tools/include/asm/atomic.h |
33 | tools/include/asm/barrier.h | 34 | tools/include/asm/barrier.h |
34 | tools/include/asm/bug.h | 35 | tools/include/asm/bug.h |
diff --git a/tools/perf/arch/x86/tests/rdpmc.c b/tools/perf/arch/x86/tests/rdpmc.c index 72193f19d6d7..a32d72e91ffa 100644 --- a/tools/perf/arch/x86/tests/rdpmc.c +++ b/tools/perf/arch/x86/tests/rdpmc.c | |||
@@ -111,14 +111,14 @@ static int __test__rdpmc(void) | |||
111 | if (fd < 0) { | 111 | if (fd < 0) { |
112 | pr_err("Error: sys_perf_event_open() syscall returned " | 112 | pr_err("Error: sys_perf_event_open() syscall returned " |
113 | "with %d (%s)\n", fd, | 113 | "with %d (%s)\n", fd, |
114 | strerror_r(errno, sbuf, sizeof(sbuf))); | 114 | str_error_r(errno, sbuf, sizeof(sbuf))); |
115 | return -1; | 115 | return -1; |
116 | } | 116 | } |
117 | 117 | ||
118 | addr = mmap(NULL, page_size, PROT_READ, MAP_SHARED, fd, 0); | 118 | addr = mmap(NULL, page_size, PROT_READ, MAP_SHARED, fd, 0); |
119 | if (addr == (void *)(-1)) { | 119 | if (addr == (void *)(-1)) { |
120 | pr_err("Error: mmap() syscall returned with (%s)\n", | 120 | pr_err("Error: mmap() syscall returned with (%s)\n", |
121 | strerror_r(errno, sbuf, sizeof(sbuf))); | 121 | str_error_r(errno, sbuf, sizeof(sbuf))); |
122 | goto out_close; | 122 | goto out_close; |
123 | } | 123 | } |
124 | 124 | ||
diff --git a/tools/perf/builtin-buildid-cache.c b/tools/perf/builtin-buildid-cache.c index 76a4d03c7cd0..30e2b2cb2421 100644 --- a/tools/perf/builtin-buildid-cache.c +++ b/tools/perf/builtin-buildid-cache.c | |||
@@ -351,7 +351,7 @@ int cmd_buildid_cache(int argc, const char **argv, | |||
351 | continue; | 351 | continue; |
352 | } | 352 | } |
353 | pr_warning("Couldn't add %s: %s\n", | 353 | pr_warning("Couldn't add %s: %s\n", |
354 | pos->s, strerror_r(errno, sbuf, sizeof(sbuf))); | 354 | pos->s, str_error_r(errno, sbuf, sizeof(sbuf))); |
355 | } | 355 | } |
356 | 356 | ||
357 | strlist__delete(list); | 357 | strlist__delete(list); |
@@ -369,7 +369,7 @@ int cmd_buildid_cache(int argc, const char **argv, | |||
369 | continue; | 369 | continue; |
370 | } | 370 | } |
371 | pr_warning("Couldn't remove %s: %s\n", | 371 | pr_warning("Couldn't remove %s: %s\n", |
372 | pos->s, strerror_r(errno, sbuf, sizeof(sbuf))); | 372 | pos->s, str_error_r(errno, sbuf, sizeof(sbuf))); |
373 | } | 373 | } |
374 | 374 | ||
375 | strlist__delete(list); | 375 | strlist__delete(list); |
@@ -387,7 +387,7 @@ int cmd_buildid_cache(int argc, const char **argv, | |||
387 | continue; | 387 | continue; |
388 | } | 388 | } |
389 | pr_warning("Couldn't remove %s: %s\n", | 389 | pr_warning("Couldn't remove %s: %s\n", |
390 | pos->s, strerror_r(errno, sbuf, sizeof(sbuf))); | 390 | pos->s, str_error_r(errno, sbuf, sizeof(sbuf))); |
391 | } | 391 | } |
392 | 392 | ||
393 | strlist__delete(list); | 393 | strlist__delete(list); |
@@ -408,7 +408,7 @@ int cmd_buildid_cache(int argc, const char **argv, | |||
408 | continue; | 408 | continue; |
409 | } | 409 | } |
410 | pr_warning("Couldn't update %s: %s\n", | 410 | pr_warning("Couldn't update %s: %s\n", |
411 | pos->s, strerror_r(errno, sbuf, sizeof(sbuf))); | 411 | pos->s, str_error_r(errno, sbuf, sizeof(sbuf))); |
412 | } | 412 | } |
413 | 413 | ||
414 | strlist__delete(list); | 414 | strlist__delete(list); |
diff --git a/tools/perf/builtin-help.c b/tools/perf/builtin-help.c index 268ab732b8aa..3bdb2c78a21b 100644 --- a/tools/perf/builtin-help.c +++ b/tools/perf/builtin-help.c | |||
@@ -117,7 +117,7 @@ static void exec_woman_emacs(const char *path, const char *page) | |||
117 | free(man_page); | 117 | free(man_page); |
118 | } | 118 | } |
119 | warning("failed to exec '%s': %s", path, | 119 | warning("failed to exec '%s': %s", path, |
120 | strerror_r(errno, sbuf, sizeof(sbuf))); | 120 | str_error_r(errno, sbuf, sizeof(sbuf))); |
121 | } | 121 | } |
122 | } | 122 | } |
123 | 123 | ||
@@ -150,7 +150,7 @@ static void exec_man_konqueror(const char *path, const char *page) | |||
150 | free(man_page); | 150 | free(man_page); |
151 | } | 151 | } |
152 | warning("failed to exec '%s': %s", path, | 152 | warning("failed to exec '%s': %s", path, |
153 | strerror_r(errno, sbuf, sizeof(sbuf))); | 153 | str_error_r(errno, sbuf, sizeof(sbuf))); |
154 | } | 154 | } |
155 | } | 155 | } |
156 | 156 | ||
@@ -162,7 +162,7 @@ static void exec_man_man(const char *path, const char *page) | |||
162 | path = "man"; | 162 | path = "man"; |
163 | execlp(path, "man", page, NULL); | 163 | execlp(path, "man", page, NULL); |
164 | warning("failed to exec '%s': %s", path, | 164 | warning("failed to exec '%s': %s", path, |
165 | strerror_r(errno, sbuf, sizeof(sbuf))); | 165 | str_error_r(errno, sbuf, sizeof(sbuf))); |
166 | } | 166 | } |
167 | 167 | ||
168 | static void exec_man_cmd(const char *cmd, const char *page) | 168 | static void exec_man_cmd(const char *cmd, const char *page) |
@@ -175,7 +175,7 @@ static void exec_man_cmd(const char *cmd, const char *page) | |||
175 | free(shell_cmd); | 175 | free(shell_cmd); |
176 | } | 176 | } |
177 | warning("failed to exec '%s': %s", cmd, | 177 | warning("failed to exec '%s': %s", cmd, |
178 | strerror_r(errno, sbuf, sizeof(sbuf))); | 178 | str_error_r(errno, sbuf, sizeof(sbuf))); |
179 | } | 179 | } |
180 | 180 | ||
181 | static void add_man_viewer(const char *name) | 181 | static void add_man_viewer(const char *name) |
diff --git a/tools/perf/builtin-kvm.c b/tools/perf/builtin-kvm.c index f4efef9d1eb3..5e2127e04f83 100644 --- a/tools/perf/builtin-kvm.c +++ b/tools/perf/builtin-kvm.c | |||
@@ -1018,13 +1018,13 @@ static int kvm_live_open_events(struct perf_kvm_stat *kvm) | |||
1018 | err = perf_evlist__open(evlist); | 1018 | err = perf_evlist__open(evlist); |
1019 | if (err < 0) { | 1019 | if (err < 0) { |
1020 | printf("Couldn't create the events: %s\n", | 1020 | printf("Couldn't create the events: %s\n", |
1021 | strerror_r(errno, sbuf, sizeof(sbuf))); | 1021 | str_error_r(errno, sbuf, sizeof(sbuf))); |
1022 | goto out; | 1022 | goto out; |
1023 | } | 1023 | } |
1024 | 1024 | ||
1025 | if (perf_evlist__mmap(evlist, kvm->opts.mmap_pages, false) < 0) { | 1025 | if (perf_evlist__mmap(evlist, kvm->opts.mmap_pages, false) < 0) { |
1026 | ui__error("Failed to mmap the events: %s\n", | 1026 | ui__error("Failed to mmap the events: %s\n", |
1027 | strerror_r(errno, sbuf, sizeof(sbuf))); | 1027 | str_error_r(errno, sbuf, sizeof(sbuf))); |
1028 | perf_evlist__close(evlist); | 1028 | perf_evlist__close(evlist); |
1029 | goto out; | 1029 | goto out; |
1030 | } | 1030 | } |
diff --git a/tools/perf/builtin-probe.c b/tools/perf/builtin-probe.c index a1a5cd1b8d60..c6d890ad2c1a 100644 --- a/tools/perf/builtin-probe.c +++ b/tools/perf/builtin-probe.c | |||
@@ -308,7 +308,7 @@ static void pr_err_with_code(const char *msg, int err) | |||
308 | 308 | ||
309 | pr_err("%s", msg); | 309 | pr_err("%s", msg); |
310 | pr_debug(" Reason: %s (Code: %d)", | 310 | pr_debug(" Reason: %s (Code: %d)", |
311 | strerror_r(-err, sbuf, sizeof(sbuf)), err); | 311 | str_error_r(-err, sbuf, sizeof(sbuf)), err); |
312 | pr_err("\n"); | 312 | pr_err("\n"); |
313 | } | 313 | } |
314 | 314 | ||
diff --git a/tools/perf/builtin-record.c b/tools/perf/builtin-record.c index b2b3b600adf5..d9f5cc3a3667 100644 --- a/tools/perf/builtin-record.c +++ b/tools/perf/builtin-record.c | |||
@@ -361,7 +361,7 @@ static int record__mmap_evlist(struct record *rec, | |||
361 | return -errno; | 361 | return -errno; |
362 | } else { | 362 | } else { |
363 | pr_err("failed to mmap with %d (%s)\n", errno, | 363 | pr_err("failed to mmap with %d (%s)\n", errno, |
364 | strerror_r(errno, msg, sizeof(msg))); | 364 | str_error_r(errno, msg, sizeof(msg))); |
365 | if (errno) | 365 | if (errno) |
366 | return -errno; | 366 | return -errno; |
367 | else | 367 | else |
@@ -407,7 +407,7 @@ try_again: | |||
407 | if (perf_evlist__apply_filters(evlist, &pos)) { | 407 | if (perf_evlist__apply_filters(evlist, &pos)) { |
408 | error("failed to set filter \"%s\" on event %s with %d (%s)\n", | 408 | error("failed to set filter \"%s\" on event %s with %d (%s)\n", |
409 | pos->filter, perf_evsel__name(pos), errno, | 409 | pos->filter, perf_evsel__name(pos), errno, |
410 | strerror_r(errno, msg, sizeof(msg))); | 410 | str_error_r(errno, msg, sizeof(msg))); |
411 | rc = -1; | 411 | rc = -1; |
412 | goto out; | 412 | goto out; |
413 | } | 413 | } |
@@ -1003,7 +1003,7 @@ static int __cmd_record(struct record *rec, int argc, const char **argv) | |||
1003 | 1003 | ||
1004 | if (forks && workload_exec_errno) { | 1004 | if (forks && workload_exec_errno) { |
1005 | char msg[STRERR_BUFSIZE]; | 1005 | char msg[STRERR_BUFSIZE]; |
1006 | const char *emsg = strerror_r(workload_exec_errno, msg, sizeof(msg)); | 1006 | const char *emsg = str_error_r(workload_exec_errno, msg, sizeof(msg)); |
1007 | pr_err("Workload failed: %s\n", emsg); | 1007 | pr_err("Workload failed: %s\n", emsg); |
1008 | err = -1; | 1008 | err = -1; |
1009 | goto out_child; | 1009 | goto out_child; |
diff --git a/tools/perf/builtin-sched.c b/tools/perf/builtin-sched.c index afa057666c2a..0dfe8df2ab9b 100644 --- a/tools/perf/builtin-sched.c +++ b/tools/perf/builtin-sched.c | |||
@@ -494,7 +494,7 @@ force_again: | |||
494 | } | 494 | } |
495 | pr_err("Error: sys_perf_event_open() syscall returned " | 495 | pr_err("Error: sys_perf_event_open() syscall returned " |
496 | "with %d (%s)\n%s", fd, | 496 | "with %d (%s)\n%s", fd, |
497 | strerror_r(errno, sbuf, sizeof(sbuf)), info); | 497 | str_error_r(errno, sbuf, sizeof(sbuf)), info); |
498 | exit(EXIT_FAILURE); | 498 | exit(EXIT_FAILURE); |
499 | } | 499 | } |
500 | return fd; | 500 | return fd; |
diff --git a/tools/perf/builtin-stat.c b/tools/perf/builtin-stat.c index c367a43525e6..8c5a3bfdfdd7 100644 --- a/tools/perf/builtin-stat.c +++ b/tools/perf/builtin-stat.c | |||
@@ -596,7 +596,7 @@ try_again: | |||
596 | if (perf_evlist__apply_filters(evsel_list, &counter)) { | 596 | if (perf_evlist__apply_filters(evsel_list, &counter)) { |
597 | error("failed to set filter \"%s\" on event %s with %d (%s)\n", | 597 | error("failed to set filter \"%s\" on event %s with %d (%s)\n", |
598 | counter->filter, perf_evsel__name(counter), errno, | 598 | counter->filter, perf_evsel__name(counter), errno, |
599 | strerror_r(errno, msg, sizeof(msg))); | 599 | str_error_r(errno, msg, sizeof(msg))); |
600 | return -1; | 600 | return -1; |
601 | } | 601 | } |
602 | 602 | ||
@@ -637,7 +637,7 @@ try_again: | |||
637 | wait(&status); | 637 | wait(&status); |
638 | 638 | ||
639 | if (workload_exec_errno) { | 639 | if (workload_exec_errno) { |
640 | const char *emsg = strerror_r(workload_exec_errno, msg, sizeof(msg)); | 640 | const char *emsg = str_error_r(workload_exec_errno, msg, sizeof(msg)); |
641 | pr_err("Workload failed: %s\n", emsg); | 641 | pr_err("Workload failed: %s\n", emsg); |
642 | return -1; | 642 | return -1; |
643 | } | 643 | } |
diff --git a/tools/perf/builtin-top.c b/tools/perf/builtin-top.c index 07fc7921980c..bd108683fcb8 100644 --- a/tools/perf/builtin-top.c +++ b/tools/perf/builtin-top.c | |||
@@ -907,7 +907,7 @@ try_again: | |||
907 | 907 | ||
908 | if (perf_evlist__mmap(evlist, opts->mmap_pages, false) < 0) { | 908 | if (perf_evlist__mmap(evlist, opts->mmap_pages, false) < 0) { |
909 | ui__error("Failed to mmap with %d (%s)\n", | 909 | ui__error("Failed to mmap with %d (%s)\n", |
910 | errno, strerror_r(errno, msg, sizeof(msg))); | 910 | errno, str_error_r(errno, msg, sizeof(msg))); |
911 | goto out_err; | 911 | goto out_err; |
912 | } | 912 | } |
913 | 913 | ||
@@ -1028,7 +1028,7 @@ out_delete: | |||
1028 | 1028 | ||
1029 | out_err_cpu_topo: { | 1029 | out_err_cpu_topo: { |
1030 | char errbuf[BUFSIZ]; | 1030 | char errbuf[BUFSIZ]; |
1031 | const char *err = strerror_r(-ret, errbuf, sizeof(errbuf)); | 1031 | const char *err = str_error_r(-ret, errbuf, sizeof(errbuf)); |
1032 | 1032 | ||
1033 | ui__error("Could not read the CPU topology map: %s\n", err); | 1033 | ui__error("Could not read the CPU topology map: %s\n", err); |
1034 | goto out_delete; | 1034 | goto out_delete; |
@@ -1295,7 +1295,7 @@ int cmd_top(int argc, const char **argv, const char *prefix __maybe_unused) | |||
1295 | 1295 | ||
1296 | if (perf_evlist__create_maps(top.evlist, target) < 0) { | 1296 | if (perf_evlist__create_maps(top.evlist, target) < 0) { |
1297 | ui__error("Couldn't create thread/CPU maps: %s\n", | 1297 | ui__error("Couldn't create thread/CPU maps: %s\n", |
1298 | errno == ENOENT ? "No such process" : strerror_r(errno, errbuf, sizeof(errbuf))); | 1298 | errno == ENOENT ? "No such process" : str_error_r(errno, errbuf, sizeof(errbuf))); |
1299 | goto out_delete_evlist; | 1299 | goto out_delete_evlist; |
1300 | } | 1300 | } |
1301 | 1301 | ||
diff --git a/tools/perf/builtin-trace.c b/tools/perf/builtin-trace.c index cf90de811523..e7e0b6e306b7 100644 --- a/tools/perf/builtin-trace.c +++ b/tools/perf/builtin-trace.c | |||
@@ -1601,7 +1601,7 @@ signed_print: | |||
1601 | fprintf(trace->output, ") = %ld", ret); | 1601 | fprintf(trace->output, ") = %ld", ret); |
1602 | } else if (ret < 0 && (sc->fmt->errmsg || sc->fmt->errpid)) { | 1602 | } else if (ret < 0 && (sc->fmt->errmsg || sc->fmt->errpid)) { |
1603 | char bf[STRERR_BUFSIZE]; | 1603 | char bf[STRERR_BUFSIZE]; |
1604 | const char *emsg = strerror_r(-ret, bf, sizeof(bf)), | 1604 | const char *emsg = str_error_r(-ret, bf, sizeof(bf)), |
1605 | *e = audit_errno_to_name(-ret); | 1605 | *e = audit_errno_to_name(-ret); |
1606 | 1606 | ||
1607 | fprintf(trace->output, ") = -1 %s %s", e, emsg); | 1607 | fprintf(trace->output, ") = -1 %s %s", e, emsg); |
@@ -2402,7 +2402,7 @@ out_error_apply_filters: | |||
2402 | fprintf(trace->output, | 2402 | fprintf(trace->output, |
2403 | "Failed to set filter \"%s\" on event %s with %d (%s)\n", | 2403 | "Failed to set filter \"%s\" on event %s with %d (%s)\n", |
2404 | evsel->filter, perf_evsel__name(evsel), errno, | 2404 | evsel->filter, perf_evsel__name(evsel), errno, |
2405 | strerror_r(errno, errbuf, sizeof(errbuf))); | 2405 | str_error_r(errno, errbuf, sizeof(errbuf))); |
2406 | goto out_delete_evlist; | 2406 | goto out_delete_evlist; |
2407 | } | 2407 | } |
2408 | out_error_mem: | 2408 | out_error_mem: |
diff --git a/tools/perf/perf.c b/tools/perf/perf.c index 8f219223f305..f7d7dbbd2af6 100644 --- a/tools/perf/perf.c +++ b/tools/perf/perf.c | |||
@@ -374,7 +374,7 @@ static int run_builtin(struct cmd_struct *p, int argc, const char **argv) | |||
374 | /* Check for ENOSPC and EIO errors.. */ | 374 | /* Check for ENOSPC and EIO errors.. */ |
375 | if (fflush(stdout)) { | 375 | if (fflush(stdout)) { |
376 | fprintf(stderr, "write failure on standard output: %s", | 376 | fprintf(stderr, "write failure on standard output: %s", |
377 | strerror_r(errno, sbuf, sizeof(sbuf))); | 377 | str_error_r(errno, sbuf, sizeof(sbuf))); |
378 | goto out; | 378 | goto out; |
379 | } | 379 | } |
380 | if (ferror(stdout)) { | 380 | if (ferror(stdout)) { |
@@ -383,7 +383,7 @@ static int run_builtin(struct cmd_struct *p, int argc, const char **argv) | |||
383 | } | 383 | } |
384 | if (fclose(stdout)) { | 384 | if (fclose(stdout)) { |
385 | fprintf(stderr, "close failed on standard output: %s", | 385 | fprintf(stderr, "close failed on standard output: %s", |
386 | strerror_r(errno, sbuf, sizeof(sbuf))); | 386 | str_error_r(errno, sbuf, sizeof(sbuf))); |
387 | goto out; | 387 | goto out; |
388 | } | 388 | } |
389 | status = 0; | 389 | status = 0; |
@@ -615,7 +615,7 @@ int main(int argc, const char **argv) | |||
615 | } | 615 | } |
616 | 616 | ||
617 | fprintf(stderr, "Failed to run command '%s': %s\n", | 617 | fprintf(stderr, "Failed to run command '%s': %s\n", |
618 | cmd, strerror_r(errno, sbuf, sizeof(sbuf))); | 618 | cmd, str_error_r(errno, sbuf, sizeof(sbuf))); |
619 | out: | 619 | out: |
620 | return 1; | 620 | return 1; |
621 | } | 621 | } |
diff --git a/tools/perf/tests/backward-ring-buffer.c b/tools/perf/tests/backward-ring-buffer.c index e70313fac5a5..f20ea4c0d0cb 100644 --- a/tools/perf/tests/backward-ring-buffer.c +++ b/tools/perf/tests/backward-ring-buffer.c | |||
@@ -60,7 +60,7 @@ static int do_test(struct perf_evlist *evlist, int mmap_pages, | |||
60 | err = perf_evlist__mmap(evlist, mmap_pages, true); | 60 | err = perf_evlist__mmap(evlist, mmap_pages, true); |
61 | if (err < 0) { | 61 | if (err < 0) { |
62 | pr_debug("perf_evlist__mmap: %s\n", | 62 | pr_debug("perf_evlist__mmap: %s\n", |
63 | strerror_r(errno, sbuf, sizeof(sbuf))); | 63 | str_error_r(errno, sbuf, sizeof(sbuf))); |
64 | return TEST_FAIL; | 64 | return TEST_FAIL; |
65 | } | 65 | } |
66 | 66 | ||
@@ -124,7 +124,7 @@ int test__backward_ring_buffer(int subtest __maybe_unused) | |||
124 | err = perf_evlist__open(evlist); | 124 | err = perf_evlist__open(evlist); |
125 | if (err < 0) { | 125 | if (err < 0) { |
126 | pr_debug("perf_evlist__open: %s\n", | 126 | pr_debug("perf_evlist__open: %s\n", |
127 | strerror_r(errno, sbuf, sizeof(sbuf))); | 127 | str_error_r(errno, sbuf, sizeof(sbuf))); |
128 | goto out_delete_evlist; | 128 | goto out_delete_evlist; |
129 | } | 129 | } |
130 | 130 | ||
diff --git a/tools/perf/tests/bpf.c b/tools/perf/tests/bpf.c index f31eed31c1a9..da0d87613975 100644 --- a/tools/perf/tests/bpf.c +++ b/tools/perf/tests/bpf.c | |||
@@ -143,14 +143,14 @@ static int do_test(struct bpf_object *obj, int (*func)(void), | |||
143 | err = perf_evlist__open(evlist); | 143 | err = perf_evlist__open(evlist); |
144 | if (err < 0) { | 144 | if (err < 0) { |
145 | pr_debug("perf_evlist__open: %s\n", | 145 | pr_debug("perf_evlist__open: %s\n", |
146 | strerror_r(errno, sbuf, sizeof(sbuf))); | 146 | str_error_r(errno, sbuf, sizeof(sbuf))); |
147 | goto out_delete_evlist; | 147 | goto out_delete_evlist; |
148 | } | 148 | } |
149 | 149 | ||
150 | err = perf_evlist__mmap(evlist, opts.mmap_pages, false); | 150 | err = perf_evlist__mmap(evlist, opts.mmap_pages, false); |
151 | if (err < 0) { | 151 | if (err < 0) { |
152 | pr_debug("perf_evlist__mmap: %s\n", | 152 | pr_debug("perf_evlist__mmap: %s\n", |
153 | strerror_r(errno, sbuf, sizeof(sbuf))); | 153 | str_error_r(errno, sbuf, sizeof(sbuf))); |
154 | goto out_delete_evlist; | 154 | goto out_delete_evlist; |
155 | } | 155 | } |
156 | 156 | ||
diff --git a/tools/perf/tests/builtin-test.c b/tools/perf/tests/builtin-test.c index 07c14e9f6546..c23cbf733549 100644 --- a/tools/perf/tests/builtin-test.c +++ b/tools/perf/tests/builtin-test.c | |||
@@ -258,7 +258,7 @@ static int run_test(struct test *test, int subtest) | |||
258 | 258 | ||
259 | if (child < 0) { | 259 | if (child < 0) { |
260 | pr_err("failed to fork test: %s\n", | 260 | pr_err("failed to fork test: %s\n", |
261 | strerror_r(errno, sbuf, sizeof(sbuf))); | 261 | str_error_r(errno, sbuf, sizeof(sbuf))); |
262 | return -1; | 262 | return -1; |
263 | } | 263 | } |
264 | 264 | ||
diff --git a/tools/perf/tests/event-times.c b/tools/perf/tests/event-times.c index 9f5698ac81ae..19ef77bd6eb4 100644 --- a/tools/perf/tests/event-times.c +++ b/tools/perf/tests/event-times.c | |||
@@ -37,7 +37,7 @@ static int attach__enable_on_exec(struct perf_evlist *evlist) | |||
37 | err = perf_evlist__open(evlist); | 37 | err = perf_evlist__open(evlist); |
38 | if (err < 0) { | 38 | if (err < 0) { |
39 | pr_debug("perf_evlist__open: %s\n", | 39 | pr_debug("perf_evlist__open: %s\n", |
40 | strerror_r(errno, sbuf, sizeof(sbuf))); | 40 | str_error_r(errno, sbuf, sizeof(sbuf))); |
41 | return err; | 41 | return err; |
42 | } | 42 | } |
43 | 43 | ||
diff --git a/tools/perf/tests/mmap-basic.c b/tools/perf/tests/mmap-basic.c index aea33f5589c5..5c9b931b7b66 100644 --- a/tools/perf/tests/mmap-basic.c +++ b/tools/perf/tests/mmap-basic.c | |||
@@ -49,7 +49,7 @@ int test__basic_mmap(int subtest __maybe_unused) | |||
49 | sched_setaffinity(0, sizeof(cpu_set), &cpu_set); | 49 | sched_setaffinity(0, sizeof(cpu_set), &cpu_set); |
50 | if (sched_setaffinity(0, sizeof(cpu_set), &cpu_set) < 0) { | 50 | if (sched_setaffinity(0, sizeof(cpu_set), &cpu_set) < 0) { |
51 | pr_debug("sched_setaffinity() failed on CPU %d: %s ", | 51 | pr_debug("sched_setaffinity() failed on CPU %d: %s ", |
52 | cpus->map[0], strerror_r(errno, sbuf, sizeof(sbuf))); | 52 | cpus->map[0], str_error_r(errno, sbuf, sizeof(sbuf))); |
53 | goto out_free_cpus; | 53 | goto out_free_cpus; |
54 | } | 54 | } |
55 | 55 | ||
@@ -79,7 +79,7 @@ int test__basic_mmap(int subtest __maybe_unused) | |||
79 | if (perf_evsel__open(evsels[i], cpus, threads) < 0) { | 79 | if (perf_evsel__open(evsels[i], cpus, threads) < 0) { |
80 | pr_debug("failed to open counter: %s, " | 80 | pr_debug("failed to open counter: %s, " |
81 | "tweak /proc/sys/kernel/perf_event_paranoid?\n", | 81 | "tweak /proc/sys/kernel/perf_event_paranoid?\n", |
82 | strerror_r(errno, sbuf, sizeof(sbuf))); | 82 | str_error_r(errno, sbuf, sizeof(sbuf))); |
83 | goto out_delete_evlist; | 83 | goto out_delete_evlist; |
84 | } | 84 | } |
85 | 85 | ||
@@ -89,7 +89,7 @@ int test__basic_mmap(int subtest __maybe_unused) | |||
89 | 89 | ||
90 | if (perf_evlist__mmap(evlist, 128, true) < 0) { | 90 | if (perf_evlist__mmap(evlist, 128, true) < 0) { |
91 | pr_debug("failed to mmap events: %d (%s)\n", errno, | 91 | pr_debug("failed to mmap events: %d (%s)\n", errno, |
92 | strerror_r(errno, sbuf, sizeof(sbuf))); | 92 | str_error_r(errno, sbuf, sizeof(sbuf))); |
93 | goto out_delete_evlist; | 93 | goto out_delete_evlist; |
94 | } | 94 | } |
95 | 95 | ||
diff --git a/tools/perf/tests/openat-syscall-all-cpus.c b/tools/perf/tests/openat-syscall-all-cpus.c index ad1cb63139a7..265abb12dfff 100644 --- a/tools/perf/tests/openat-syscall-all-cpus.c +++ b/tools/perf/tests/openat-syscall-all-cpus.c | |||
@@ -41,7 +41,7 @@ int test__openat_syscall_event_on_all_cpus(int subtest __maybe_unused) | |||
41 | if (perf_evsel__open(evsel, cpus, threads) < 0) { | 41 | if (perf_evsel__open(evsel, cpus, threads) < 0) { |
42 | pr_debug("failed to open counter: %s, " | 42 | pr_debug("failed to open counter: %s, " |
43 | "tweak /proc/sys/kernel/perf_event_paranoid?\n", | 43 | "tweak /proc/sys/kernel/perf_event_paranoid?\n", |
44 | strerror_r(errno, sbuf, sizeof(sbuf))); | 44 | str_error_r(errno, sbuf, sizeof(sbuf))); |
45 | goto out_evsel_delete; | 45 | goto out_evsel_delete; |
46 | } | 46 | } |
47 | 47 | ||
@@ -62,7 +62,7 @@ int test__openat_syscall_event_on_all_cpus(int subtest __maybe_unused) | |||
62 | if (sched_setaffinity(0, sizeof(cpu_set), &cpu_set) < 0) { | 62 | if (sched_setaffinity(0, sizeof(cpu_set), &cpu_set) < 0) { |
63 | pr_debug("sched_setaffinity() failed on CPU %d: %s ", | 63 | pr_debug("sched_setaffinity() failed on CPU %d: %s ", |
64 | cpus->map[cpu], | 64 | cpus->map[cpu], |
65 | strerror_r(errno, sbuf, sizeof(sbuf))); | 65 | str_error_r(errno, sbuf, sizeof(sbuf))); |
66 | goto out_close_fd; | 66 | goto out_close_fd; |
67 | } | 67 | } |
68 | for (i = 0; i < ncalls; ++i) { | 68 | for (i = 0; i < ncalls; ++i) { |
diff --git a/tools/perf/tests/openat-syscall-tp-fields.c b/tools/perf/tests/openat-syscall-tp-fields.c index 4344fe482c1d..942dbf43d7c7 100644 --- a/tools/perf/tests/openat-syscall-tp-fields.c +++ b/tools/perf/tests/openat-syscall-tp-fields.c | |||
@@ -51,14 +51,14 @@ int test__syscall_openat_tp_fields(int subtest __maybe_unused) | |||
51 | err = perf_evlist__open(evlist); | 51 | err = perf_evlist__open(evlist); |
52 | if (err < 0) { | 52 | if (err < 0) { |
53 | pr_debug("perf_evlist__open: %s\n", | 53 | pr_debug("perf_evlist__open: %s\n", |
54 | strerror_r(errno, sbuf, sizeof(sbuf))); | 54 | str_error_r(errno, sbuf, sizeof(sbuf))); |
55 | goto out_delete_evlist; | 55 | goto out_delete_evlist; |
56 | } | 56 | } |
57 | 57 | ||
58 | err = perf_evlist__mmap(evlist, UINT_MAX, false); | 58 | err = perf_evlist__mmap(evlist, UINT_MAX, false); |
59 | if (err < 0) { | 59 | if (err < 0) { |
60 | pr_debug("perf_evlist__mmap: %s\n", | 60 | pr_debug("perf_evlist__mmap: %s\n", |
61 | strerror_r(errno, sbuf, sizeof(sbuf))); | 61 | str_error_r(errno, sbuf, sizeof(sbuf))); |
62 | goto out_delete_evlist; | 62 | goto out_delete_evlist; |
63 | } | 63 | } |
64 | 64 | ||
diff --git a/tools/perf/tests/openat-syscall.c b/tools/perf/tests/openat-syscall.c index 1184f9ba6499..d7414128d7fe 100644 --- a/tools/perf/tests/openat-syscall.c +++ b/tools/perf/tests/openat-syscall.c | |||
@@ -29,7 +29,7 @@ int test__openat_syscall_event(int subtest __maybe_unused) | |||
29 | if (perf_evsel__open_per_thread(evsel, threads) < 0) { | 29 | if (perf_evsel__open_per_thread(evsel, threads) < 0) { |
30 | pr_debug("failed to open counter: %s, " | 30 | pr_debug("failed to open counter: %s, " |
31 | "tweak /proc/sys/kernel/perf_event_paranoid?\n", | 31 | "tweak /proc/sys/kernel/perf_event_paranoid?\n", |
32 | strerror_r(errno, sbuf, sizeof(sbuf))); | 32 | str_error_r(errno, sbuf, sizeof(sbuf))); |
33 | goto out_evsel_delete; | 33 | goto out_evsel_delete; |
34 | } | 34 | } |
35 | 35 | ||
diff --git a/tools/perf/tests/perf-record.c b/tools/perf/tests/perf-record.c index b836ee6a8d9b..3eb67a977b6a 100644 --- a/tools/perf/tests/perf-record.c +++ b/tools/perf/tests/perf-record.c | |||
@@ -104,7 +104,7 @@ int test__PERF_RECORD(int subtest __maybe_unused) | |||
104 | err = sched__get_first_possible_cpu(evlist->workload.pid, &cpu_mask); | 104 | err = sched__get_first_possible_cpu(evlist->workload.pid, &cpu_mask); |
105 | if (err < 0) { | 105 | if (err < 0) { |
106 | pr_debug("sched__get_first_possible_cpu: %s\n", | 106 | pr_debug("sched__get_first_possible_cpu: %s\n", |
107 | strerror_r(errno, sbuf, sizeof(sbuf))); | 107 | str_error_r(errno, sbuf, sizeof(sbuf))); |
108 | goto out_delete_evlist; | 108 | goto out_delete_evlist; |
109 | } | 109 | } |
110 | 110 | ||
@@ -115,7 +115,7 @@ int test__PERF_RECORD(int subtest __maybe_unused) | |||
115 | */ | 115 | */ |
116 | if (sched_setaffinity(evlist->workload.pid, cpu_mask_size, &cpu_mask) < 0) { | 116 | if (sched_setaffinity(evlist->workload.pid, cpu_mask_size, &cpu_mask) < 0) { |
117 | pr_debug("sched_setaffinity: %s\n", | 117 | pr_debug("sched_setaffinity: %s\n", |
118 | strerror_r(errno, sbuf, sizeof(sbuf))); | 118 | str_error_r(errno, sbuf, sizeof(sbuf))); |
119 | goto out_delete_evlist; | 119 | goto out_delete_evlist; |
120 | } | 120 | } |
121 | 121 | ||
@@ -126,7 +126,7 @@ int test__PERF_RECORD(int subtest __maybe_unused) | |||
126 | err = perf_evlist__open(evlist); | 126 | err = perf_evlist__open(evlist); |
127 | if (err < 0) { | 127 | if (err < 0) { |
128 | pr_debug("perf_evlist__open: %s\n", | 128 | pr_debug("perf_evlist__open: %s\n", |
129 | strerror_r(errno, sbuf, sizeof(sbuf))); | 129 | str_error_r(errno, sbuf, sizeof(sbuf))); |
130 | goto out_delete_evlist; | 130 | goto out_delete_evlist; |
131 | } | 131 | } |
132 | 132 | ||
@@ -138,7 +138,7 @@ int test__PERF_RECORD(int subtest __maybe_unused) | |||
138 | err = perf_evlist__mmap(evlist, opts.mmap_pages, false); | 138 | err = perf_evlist__mmap(evlist, opts.mmap_pages, false); |
139 | if (err < 0) { | 139 | if (err < 0) { |
140 | pr_debug("perf_evlist__mmap: %s\n", | 140 | pr_debug("perf_evlist__mmap: %s\n", |
141 | strerror_r(errno, sbuf, sizeof(sbuf))); | 141 | str_error_r(errno, sbuf, sizeof(sbuf))); |
142 | goto out_delete_evlist; | 142 | goto out_delete_evlist; |
143 | } | 143 | } |
144 | 144 | ||
diff --git a/tools/perf/tests/sw-clock.c b/tools/perf/tests/sw-clock.c index 36e8ce1550e3..4c9fd046d57b 100644 --- a/tools/perf/tests/sw-clock.c +++ b/tools/perf/tests/sw-clock.c | |||
@@ -70,7 +70,7 @@ static int __test__sw_clock_freq(enum perf_sw_ids clock_id) | |||
70 | 70 | ||
71 | err = -errno; | 71 | err = -errno; |
72 | pr_debug("Couldn't open evlist: %s\nHint: check %s, using %" PRIu64 " in this test.\n", | 72 | pr_debug("Couldn't open evlist: %s\nHint: check %s, using %" PRIu64 " in this test.\n", |
73 | strerror_r(errno, sbuf, sizeof(sbuf)), | 73 | str_error_r(errno, sbuf, sizeof(sbuf)), |
74 | knob, (u64)attr.sample_freq); | 74 | knob, (u64)attr.sample_freq); |
75 | goto out_delete_evlist; | 75 | goto out_delete_evlist; |
76 | } | 76 | } |
@@ -78,7 +78,7 @@ static int __test__sw_clock_freq(enum perf_sw_ids clock_id) | |||
78 | err = perf_evlist__mmap(evlist, 128, true); | 78 | err = perf_evlist__mmap(evlist, 128, true); |
79 | if (err < 0) { | 79 | if (err < 0) { |
80 | pr_debug("failed to mmap event: %d (%s)\n", errno, | 80 | pr_debug("failed to mmap event: %d (%s)\n", errno, |
81 | strerror_r(errno, sbuf, sizeof(sbuf))); | 81 | str_error_r(errno, sbuf, sizeof(sbuf))); |
82 | goto out_delete_evlist; | 82 | goto out_delete_evlist; |
83 | } | 83 | } |
84 | 84 | ||
diff --git a/tools/perf/tests/task-exit.c b/tools/perf/tests/task-exit.c index 2dfff7ac8ef3..01a5ba2788c6 100644 --- a/tools/perf/tests/task-exit.c +++ b/tools/perf/tests/task-exit.c | |||
@@ -91,13 +91,13 @@ int test__task_exit(int subtest __maybe_unused) | |||
91 | err = perf_evlist__open(evlist); | 91 | err = perf_evlist__open(evlist); |
92 | if (err < 0) { | 92 | if (err < 0) { |
93 | pr_debug("Couldn't open the evlist: %s\n", | 93 | pr_debug("Couldn't open the evlist: %s\n", |
94 | strerror_r(-err, sbuf, sizeof(sbuf))); | 94 | str_error_r(-err, sbuf, sizeof(sbuf))); |
95 | goto out_delete_evlist; | 95 | goto out_delete_evlist; |
96 | } | 96 | } |
97 | 97 | ||
98 | if (perf_evlist__mmap(evlist, 128, true) < 0) { | 98 | if (perf_evlist__mmap(evlist, 128, true) < 0) { |
99 | pr_debug("failed to mmap events: %d (%s)\n", errno, | 99 | pr_debug("failed to mmap events: %d (%s)\n", errno, |
100 | strerror_r(errno, sbuf, sizeof(sbuf))); | 100 | str_error_r(errno, sbuf, sizeof(sbuf))); |
101 | goto out_delete_evlist; | 101 | goto out_delete_evlist; |
102 | } | 102 | } |
103 | 103 | ||
diff --git a/tools/perf/ui/browsers/hists.c b/tools/perf/ui/browsers/hists.c index e08b8f7b6d3f..13d414384739 100644 --- a/tools/perf/ui/browsers/hists.c +++ b/tools/perf/ui/browsers/hists.c | |||
@@ -2029,7 +2029,7 @@ static int hist_browser__dump(struct hist_browser *browser) | |||
2029 | fp = fopen(filename, "w"); | 2029 | fp = fopen(filename, "w"); |
2030 | if (fp == NULL) { | 2030 | if (fp == NULL) { |
2031 | char bf[64]; | 2031 | char bf[64]; |
2032 | const char *err = strerror_r(errno, bf, sizeof(bf)); | 2032 | const char *err = str_error_r(errno, bf, sizeof(bf)); |
2033 | ui_helpline__fpush("Couldn't write to %s: %s", filename, err); | 2033 | ui_helpline__fpush("Couldn't write to %s: %s", filename, err); |
2034 | return -1; | 2034 | return -1; |
2035 | } | 2035 | } |
diff --git a/tools/perf/util/Build b/tools/perf/util/Build index fced8336e5fd..a6a805302312 100644 --- a/tools/perf/util/Build +++ b/tools/perf/util/Build | |||
@@ -70,6 +70,7 @@ libperf-y += stat.o | |||
70 | libperf-y += stat-shadow.o | 70 | libperf-y += stat-shadow.o |
71 | libperf-y += record.o | 71 | libperf-y += record.o |
72 | libperf-y += srcline.o | 72 | libperf-y += srcline.o |
73 | libperf-y += str_error_r.o | ||
73 | libperf-y += data.o | 74 | libperf-y += data.o |
74 | libperf-y += tsc.o | 75 | libperf-y += tsc.o |
75 | libperf-y += cloexec.o | 76 | libperf-y += cloexec.o |
@@ -173,6 +174,10 @@ $(OUTPUT)util/libstring.o: ../lib/string.c FORCE | |||
173 | $(call rule_mkdir) | 174 | $(call rule_mkdir) |
174 | $(call if_changed_dep,cc_o_c) | 175 | $(call if_changed_dep,cc_o_c) |
175 | 176 | ||
177 | $(OUTPUT)util/str_error_r.o: ../lib/str_error_r.c FORCE | ||
178 | $(call rule_mkdir) | ||
179 | $(call if_changed_dep,cc_o_c) | ||
180 | |||
176 | $(OUTPUT)util/hweight.o: ../lib/hweight.c FORCE | 181 | $(OUTPUT)util/hweight.o: ../lib/hweight.c FORCE |
177 | $(call rule_mkdir) | 182 | $(call rule_mkdir) |
178 | $(call if_changed_dep,cc_o_c) | 183 | $(call if_changed_dep,cc_o_c) |
diff --git a/tools/perf/util/bpf-loader.c b/tools/perf/util/bpf-loader.c index dcc8845881ae..8445e89621fe 100644 --- a/tools/perf/util/bpf-loader.c +++ b/tools/perf/util/bpf-loader.c | |||
@@ -1589,7 +1589,7 @@ bpf_loader_strerror(int err, char *buf, size_t size) | |||
1589 | snprintf(buf, size, "Unknown bpf loader error %d", err); | 1589 | snprintf(buf, size, "Unknown bpf loader error %d", err); |
1590 | else | 1590 | else |
1591 | snprintf(buf, size, "%s", | 1591 | snprintf(buf, size, "%s", |
1592 | strerror_r(err, sbuf, sizeof(sbuf))); | 1592 | str_error_r(err, sbuf, sizeof(sbuf))); |
1593 | 1593 | ||
1594 | buf[size - 1] = '\0'; | 1594 | buf[size - 1] = '\0'; |
1595 | return -1; | 1595 | return -1; |
diff --git a/tools/perf/util/cloexec.c b/tools/perf/util/cloexec.c index 2babddaa2481..fde772db1d5c 100644 --- a/tools/perf/util/cloexec.c +++ b/tools/perf/util/cloexec.c | |||
@@ -58,7 +58,7 @@ static int perf_flag_probe(void) | |||
58 | 58 | ||
59 | WARN_ONCE(err != EINVAL && err != EBUSY, | 59 | WARN_ONCE(err != EINVAL && err != EBUSY, |
60 | "perf_event_open(..., PERF_FLAG_FD_CLOEXEC) failed with unexpected error %d (%s)\n", | 60 | "perf_event_open(..., PERF_FLAG_FD_CLOEXEC) failed with unexpected error %d (%s)\n", |
61 | err, strerror_r(err, sbuf, sizeof(sbuf))); | 61 | err, str_error_r(err, sbuf, sizeof(sbuf))); |
62 | 62 | ||
63 | /* not supported, confirm error related to PERF_FLAG_FD_CLOEXEC */ | 63 | /* not supported, confirm error related to PERF_FLAG_FD_CLOEXEC */ |
64 | while (1) { | 64 | while (1) { |
@@ -76,7 +76,7 @@ static int perf_flag_probe(void) | |||
76 | 76 | ||
77 | if (WARN_ONCE(fd < 0 && err != EBUSY, | 77 | if (WARN_ONCE(fd < 0 && err != EBUSY, |
78 | "perf_event_open(..., 0) failed unexpectedly with error %d (%s)\n", | 78 | "perf_event_open(..., 0) failed unexpectedly with error %d (%s)\n", |
79 | err, strerror_r(err, sbuf, sizeof(sbuf)))) | 79 | err, str_error_r(err, sbuf, sizeof(sbuf)))) |
80 | return -1; | 80 | return -1; |
81 | 81 | ||
82 | return 0; | 82 | return 0; |
diff --git a/tools/perf/util/data.c b/tools/perf/util/data.c index be83516155ee..60bfc9ca1e22 100644 --- a/tools/perf/util/data.c +++ b/tools/perf/util/data.c | |||
@@ -57,7 +57,7 @@ static int open_file_read(struct perf_data_file *file) | |||
57 | int err = errno; | 57 | int err = errno; |
58 | 58 | ||
59 | pr_err("failed to open %s: %s", file->path, | 59 | pr_err("failed to open %s: %s", file->path, |
60 | strerror_r(err, sbuf, sizeof(sbuf))); | 60 | str_error_r(err, sbuf, sizeof(sbuf))); |
61 | if (err == ENOENT && !strcmp(file->path, "perf.data")) | 61 | if (err == ENOENT && !strcmp(file->path, "perf.data")) |
62 | pr_err(" (try 'perf record' first)"); | 62 | pr_err(" (try 'perf record' first)"); |
63 | pr_err("\n"); | 63 | pr_err("\n"); |
@@ -99,7 +99,7 @@ static int open_file_write(struct perf_data_file *file) | |||
99 | 99 | ||
100 | if (fd < 0) | 100 | if (fd < 0) |
101 | pr_err("failed to open %s : %s\n", file->path, | 101 | pr_err("failed to open %s : %s\n", file->path, |
102 | strerror_r(errno, sbuf, sizeof(sbuf))); | 102 | str_error_r(errno, sbuf, sizeof(sbuf))); |
103 | 103 | ||
104 | return fd; | 104 | return fd; |
105 | } | 105 | } |
diff --git a/tools/perf/util/debug.h b/tools/perf/util/debug.h index 14bafda79eda..d242adc3d5a2 100644 --- a/tools/perf/util/debug.h +++ b/tools/perf/util/debug.h | |||
@@ -38,7 +38,7 @@ extern int debug_data_convert; | |||
38 | #define pr_oe_time(t, fmt, ...) pr_time_N(1, debug_ordered_events, t, pr_fmt(fmt), ##__VA_ARGS__) | 38 | #define pr_oe_time(t, fmt, ...) pr_time_N(1, debug_ordered_events, t, pr_fmt(fmt), ##__VA_ARGS__) |
39 | #define pr_oe_time2(t, fmt, ...) pr_time_N(2, debug_ordered_events, t, pr_fmt(fmt), ##__VA_ARGS__) | 39 | #define pr_oe_time2(t, fmt, ...) pr_time_N(2, debug_ordered_events, t, pr_fmt(fmt), ##__VA_ARGS__) |
40 | 40 | ||
41 | #define STRERR_BUFSIZE 128 /* For the buffer size of strerror_r */ | 41 | #define STRERR_BUFSIZE 128 /* For the buffer size of str_error_r */ |
42 | 42 | ||
43 | int dump_printf(const char *fmt, ...) __attribute__((format(printf, 1, 2))); | 43 | int dump_printf(const char *fmt, ...) __attribute__((format(printf, 1, 2))); |
44 | void trace_event(union perf_event *event); | 44 | void trace_event(union perf_event *event); |
diff --git a/tools/perf/util/dso.c b/tools/perf/util/dso.c index e1de6cc4863e..774f6ec884d5 100644 --- a/tools/perf/util/dso.c +++ b/tools/perf/util/dso.c | |||
@@ -335,7 +335,7 @@ static int do_open(char *name) | |||
335 | return fd; | 335 | return fd; |
336 | 336 | ||
337 | pr_debug("dso open failed: %s\n", | 337 | pr_debug("dso open failed: %s\n", |
338 | strerror_r(errno, sbuf, sizeof(sbuf))); | 338 | str_error_r(errno, sbuf, sizeof(sbuf))); |
339 | if (!dso__data_open_cnt || errno != EMFILE) | 339 | if (!dso__data_open_cnt || errno != EMFILE) |
340 | break; | 340 | break; |
341 | 341 | ||
@@ -786,7 +786,7 @@ static int data_file_size(struct dso *dso, struct machine *machine) | |||
786 | if (fstat(dso->data.fd, &st) < 0) { | 786 | if (fstat(dso->data.fd, &st) < 0) { |
787 | ret = -errno; | 787 | ret = -errno; |
788 | pr_err("dso cache fstat failed: %s\n", | 788 | pr_err("dso cache fstat failed: %s\n", |
789 | strerror_r(errno, sbuf, sizeof(sbuf))); | 789 | str_error_r(errno, sbuf, sizeof(sbuf))); |
790 | dso->data.status = DSO_DATA_STATUS_ERROR; | 790 | dso->data.status = DSO_DATA_STATUS_ERROR; |
791 | goto out; | 791 | goto out; |
792 | } | 792 | } |
@@ -1366,7 +1366,7 @@ int dso__strerror_load(struct dso *dso, char *buf, size_t buflen) | |||
1366 | BUG_ON(buflen == 0); | 1366 | BUG_ON(buflen == 0); |
1367 | 1367 | ||
1368 | if (errnum >= 0) { | 1368 | if (errnum >= 0) { |
1369 | const char *err = strerror_r(errnum, buf, buflen); | 1369 | const char *err = str_error_r(errnum, buf, buflen); |
1370 | 1370 | ||
1371 | if (err != buf) | 1371 | if (err != buf) |
1372 | scnprintf(buf, buflen, "%s", err); | 1372 | scnprintf(buf, buflen, "%s", err); |
diff --git a/tools/perf/util/evlist.c b/tools/perf/util/evlist.c index 113507716044..f2d478df8c3e 100644 --- a/tools/perf/util/evlist.c +++ b/tools/perf/util/evlist.c | |||
@@ -1790,7 +1790,7 @@ int perf_evlist__strerror_open(struct perf_evlist *evlist, | |||
1790 | int err, char *buf, size_t size) | 1790 | int err, char *buf, size_t size) |
1791 | { | 1791 | { |
1792 | int printed, value; | 1792 | int printed, value; |
1793 | char sbuf[STRERR_BUFSIZE], *emsg = strerror_r(err, sbuf, sizeof(sbuf)); | 1793 | char sbuf[STRERR_BUFSIZE], *emsg = str_error_r(err, sbuf, sizeof(sbuf)); |
1794 | 1794 | ||
1795 | switch (err) { | 1795 | switch (err) { |
1796 | case EACCES: | 1796 | case EACCES: |
@@ -1842,7 +1842,7 @@ out_default: | |||
1842 | 1842 | ||
1843 | int perf_evlist__strerror_mmap(struct perf_evlist *evlist, int err, char *buf, size_t size) | 1843 | int perf_evlist__strerror_mmap(struct perf_evlist *evlist, int err, char *buf, size_t size) |
1844 | { | 1844 | { |
1845 | char sbuf[STRERR_BUFSIZE], *emsg = strerror_r(err, sbuf, sizeof(sbuf)); | 1845 | char sbuf[STRERR_BUFSIZE], *emsg = str_error_r(err, sbuf, sizeof(sbuf)); |
1846 | int pages_attempted = evlist->mmap_len / 1024, pages_max_per_user, printed = 0; | 1846 | int pages_attempted = evlist->mmap_len / 1024, pages_max_per_user, printed = 0; |
1847 | 1847 | ||
1848 | switch (err) { | 1848 | switch (err) { |
diff --git a/tools/perf/util/evsel.c b/tools/perf/util/evsel.c index 0fea724e735c..d8c2298cd32a 100644 --- a/tools/perf/util/evsel.c +++ b/tools/perf/util/evsel.c | |||
@@ -2419,7 +2419,7 @@ int perf_evsel__open_strerror(struct perf_evsel *evsel, struct target *target, | |||
2419 | "The sys_perf_event_open() syscall returned with %d (%s) for event (%s).\n" | 2419 | "The sys_perf_event_open() syscall returned with %d (%s) for event (%s).\n" |
2420 | "/bin/dmesg may provide additional information.\n" | 2420 | "/bin/dmesg may provide additional information.\n" |
2421 | "No CONFIG_PERF_EVENTS=y kernel support configured?", | 2421 | "No CONFIG_PERF_EVENTS=y kernel support configured?", |
2422 | err, strerror_r(err, sbuf, sizeof(sbuf)), | 2422 | err, str_error_r(err, sbuf, sizeof(sbuf)), |
2423 | perf_evsel__name(evsel)); | 2423 | perf_evsel__name(evsel)); |
2424 | } | 2424 | } |
2425 | 2425 | ||
diff --git a/tools/perf/util/llvm-utils.c b/tools/perf/util/llvm-utils.c index 40b6f7269cb4..282c30f6a51d 100644 --- a/tools/perf/util/llvm-utils.c +++ b/tools/perf/util/llvm-utils.c | |||
@@ -106,7 +106,7 @@ read_from_pipe(const char *cmd, void **p_buf, size_t *p_read_sz) | |||
106 | file = popen(cmd, "r"); | 106 | file = popen(cmd, "r"); |
107 | if (!file) { | 107 | if (!file) { |
108 | pr_err("ERROR: unable to popen cmd: %s\n", | 108 | pr_err("ERROR: unable to popen cmd: %s\n", |
109 | strerror_r(errno, serr, sizeof(serr))); | 109 | str_error_r(errno, serr, sizeof(serr))); |
110 | return -EINVAL; | 110 | return -EINVAL; |
111 | } | 111 | } |
112 | 112 | ||
@@ -140,7 +140,7 @@ read_from_pipe(const char *cmd, void **p_buf, size_t *p_read_sz) | |||
140 | 140 | ||
141 | if (ferror(file)) { | 141 | if (ferror(file)) { |
142 | pr_err("ERROR: error occurred when reading from pipe: %s\n", | 142 | pr_err("ERROR: error occurred when reading from pipe: %s\n", |
143 | strerror_r(errno, serr, sizeof(serr))); | 143 | str_error_r(errno, serr, sizeof(serr))); |
144 | err = -EIO; | 144 | err = -EIO; |
145 | goto errout; | 145 | goto errout; |
146 | } | 146 | } |
@@ -382,7 +382,7 @@ int llvm__compile_bpf(const char *path, void **p_obj_buf, | |||
382 | if (path[0] != '-' && realpath(path, abspath) == NULL) { | 382 | if (path[0] != '-' && realpath(path, abspath) == NULL) { |
383 | err = errno; | 383 | err = errno; |
384 | pr_err("ERROR: problems with path %s: %s\n", | 384 | pr_err("ERROR: problems with path %s: %s\n", |
385 | path, strerror_r(err, serr, sizeof(serr))); | 385 | path, str_error_r(err, serr, sizeof(serr))); |
386 | return -err; | 386 | return -err; |
387 | } | 387 | } |
388 | 388 | ||
@@ -410,7 +410,7 @@ int llvm__compile_bpf(const char *path, void **p_obj_buf, | |||
410 | if (nr_cpus_avail <= 0) { | 410 | if (nr_cpus_avail <= 0) { |
411 | pr_err( | 411 | pr_err( |
412 | "WARNING:\tunable to get available CPUs in this system: %s\n" | 412 | "WARNING:\tunable to get available CPUs in this system: %s\n" |
413 | " \tUse 128 instead.\n", strerror_r(errno, serr, sizeof(serr))); | 413 | " \tUse 128 instead.\n", str_error_r(errno, serr, sizeof(serr))); |
414 | nr_cpus_avail = 128; | 414 | nr_cpus_avail = 128; |
415 | } | 415 | } |
416 | snprintf(nr_cpus_avail_str, sizeof(nr_cpus_avail_str), "%d", | 416 | snprintf(nr_cpus_avail_str, sizeof(nr_cpus_avail_str), "%d", |
diff --git a/tools/perf/util/probe-event.c b/tools/perf/util/probe-event.c index 0201f661ccb8..2b222a7955c9 100644 --- a/tools/perf/util/probe-event.c +++ b/tools/perf/util/probe-event.c | |||
@@ -468,7 +468,7 @@ static struct debuginfo *open_debuginfo(const char *module, bool silent) | |||
468 | err = kernel_get_module_dso(module, &dso); | 468 | err = kernel_get_module_dso(module, &dso); |
469 | if (err < 0) { | 469 | if (err < 0) { |
470 | if (!dso || dso->load_errno == 0) { | 470 | if (!dso || dso->load_errno == 0) { |
471 | if (!strerror_r(-err, reason, STRERR_BUFSIZE)) | 471 | if (!str_error_r(-err, reason, STRERR_BUFSIZE)) |
472 | strcpy(reason, "(unknown)"); | 472 | strcpy(reason, "(unknown)"); |
473 | } else | 473 | } else |
474 | dso__strerror_load(dso, reason, STRERR_BUFSIZE); | 474 | dso__strerror_load(dso, reason, STRERR_BUFSIZE); |
@@ -806,7 +806,7 @@ static int __show_one_line(FILE *fp, int l, bool skip, bool show_num) | |||
806 | error: | 806 | error: |
807 | if (ferror(fp)) { | 807 | if (ferror(fp)) { |
808 | pr_warning("File read error: %s\n", | 808 | pr_warning("File read error: %s\n", |
809 | strerror_r(errno, sbuf, sizeof(sbuf))); | 809 | str_error_r(errno, sbuf, sizeof(sbuf))); |
810 | return -1; | 810 | return -1; |
811 | } | 811 | } |
812 | return 0; | 812 | return 0; |
@@ -886,7 +886,7 @@ static int __show_line_range(struct line_range *lr, const char *module, | |||
886 | fp = fopen(lr->path, "r"); | 886 | fp = fopen(lr->path, "r"); |
887 | if (fp == NULL) { | 887 | if (fp == NULL) { |
888 | pr_warning("Failed to open %s: %s\n", lr->path, | 888 | pr_warning("Failed to open %s: %s\n", lr->path, |
889 | strerror_r(errno, sbuf, sizeof(sbuf))); | 889 | str_error_r(errno, sbuf, sizeof(sbuf))); |
890 | return -errno; | 890 | return -errno; |
891 | } | 891 | } |
892 | /* Skip to starting line number */ | 892 | /* Skip to starting line number */ |
diff --git a/tools/perf/util/probe-file.c b/tools/perf/util/probe-file.c index 5b563b2e8b1d..98398b55a03f 100644 --- a/tools/perf/util/probe-file.c +++ b/tools/perf/util/probe-file.c | |||
@@ -50,7 +50,7 @@ static void print_open_warning(int err, bool uprobe) | |||
50 | else | 50 | else |
51 | pr_warning("Failed to open %cprobe_events: %s\n", | 51 | pr_warning("Failed to open %cprobe_events: %s\n", |
52 | uprobe ? 'u' : 'k', | 52 | uprobe ? 'u' : 'k', |
53 | strerror_r(-err, sbuf, sizeof(sbuf))); | 53 | str_error_r(-err, sbuf, sizeof(sbuf))); |
54 | } | 54 | } |
55 | 55 | ||
56 | static void print_both_open_warning(int kerr, int uerr) | 56 | static void print_both_open_warning(int kerr, int uerr) |
@@ -64,9 +64,9 @@ static void print_both_open_warning(int kerr, int uerr) | |||
64 | else { | 64 | else { |
65 | char sbuf[STRERR_BUFSIZE]; | 65 | char sbuf[STRERR_BUFSIZE]; |
66 | pr_warning("Failed to open kprobe events: %s.\n", | 66 | pr_warning("Failed to open kprobe events: %s.\n", |
67 | strerror_r(-kerr, sbuf, sizeof(sbuf))); | 67 | str_error_r(-kerr, sbuf, sizeof(sbuf))); |
68 | pr_warning("Failed to open uprobe events: %s.\n", | 68 | pr_warning("Failed to open uprobe events: %s.\n", |
69 | strerror_r(-uerr, sbuf, sizeof(sbuf))); | 69 | str_error_r(-uerr, sbuf, sizeof(sbuf))); |
70 | } | 70 | } |
71 | } | 71 | } |
72 | 72 | ||
@@ -224,7 +224,7 @@ int probe_file__add_event(int fd, struct probe_trace_event *tev) | |||
224 | if (write(fd, buf, strlen(buf)) < (int)strlen(buf)) { | 224 | if (write(fd, buf, strlen(buf)) < (int)strlen(buf)) { |
225 | ret = -errno; | 225 | ret = -errno; |
226 | pr_warning("Failed to write event: %s\n", | 226 | pr_warning("Failed to write event: %s\n", |
227 | strerror_r(errno, sbuf, sizeof(sbuf))); | 227 | str_error_r(errno, sbuf, sizeof(sbuf))); |
228 | } | 228 | } |
229 | } | 229 | } |
230 | free(buf); | 230 | free(buf); |
@@ -262,7 +262,7 @@ static int __del_trace_probe_event(int fd, struct str_node *ent) | |||
262 | return 0; | 262 | return 0; |
263 | error: | 263 | error: |
264 | pr_warning("Failed to delete event: %s\n", | 264 | pr_warning("Failed to delete event: %s\n", |
265 | strerror_r(-ret, buf, sizeof(buf))); | 265 | str_error_r(-ret, buf, sizeof(buf))); |
266 | return ret; | 266 | return ret; |
267 | } | 267 | } |
268 | 268 | ||
diff --git a/tools/perf/util/probe-finder.c b/tools/perf/util/probe-finder.c index 1259839dbf6d..f2d9ff064e2d 100644 --- a/tools/perf/util/probe-finder.c +++ b/tools/perf/util/probe-finder.c | |||
@@ -381,7 +381,7 @@ formatted: | |||
381 | if (ret >= 16) | 381 | if (ret >= 16) |
382 | ret = -E2BIG; | 382 | ret = -E2BIG; |
383 | pr_warning("Failed to convert variable type: %s\n", | 383 | pr_warning("Failed to convert variable type: %s\n", |
384 | strerror_r(-ret, sbuf, sizeof(sbuf))); | 384 | str_error_r(-ret, sbuf, sizeof(sbuf))); |
385 | return ret; | 385 | return ret; |
386 | } | 386 | } |
387 | tvar->type = strdup(buf); | 387 | tvar->type = strdup(buf); |
@@ -809,7 +809,7 @@ static int find_lazy_match_lines(struct intlist *list, | |||
809 | fp = fopen(fname, "r"); | 809 | fp = fopen(fname, "r"); |
810 | if (!fp) { | 810 | if (!fp) { |
811 | pr_warning("Failed to open %s: %s\n", fname, | 811 | pr_warning("Failed to open %s: %s\n", fname, |
812 | strerror_r(errno, sbuf, sizeof(sbuf))); | 812 | str_error_r(errno, sbuf, sizeof(sbuf))); |
813 | return -errno; | 813 | return -errno; |
814 | } | 814 | } |
815 | 815 | ||
diff --git a/tools/perf/util/python-ext-sources b/tools/perf/util/python-ext-sources index 36c6862119e3..49210b7a7925 100644 --- a/tools/perf/util/python-ext-sources +++ b/tools/perf/util/python-ext-sources | |||
@@ -13,6 +13,7 @@ util/cpumap.c | |||
13 | ../lib/bitmap.c | 13 | ../lib/bitmap.c |
14 | ../lib/find_bit.c | 14 | ../lib/find_bit.c |
15 | ../lib/hweight.c | 15 | ../lib/hweight.c |
16 | ../lib/str_error_r.c | ||
16 | util/thread_map.c | 17 | util/thread_map.c |
17 | util/util.c | 18 | util/util.c |
18 | util/xyarray.c | 19 | util/xyarray.c |
diff --git a/tools/perf/util/target.c b/tools/perf/util/target.c index a53603b27e52..5898af4510cc 100644 --- a/tools/perf/util/target.c +++ b/tools/perf/util/target.c | |||
@@ -121,7 +121,7 @@ int target__strerror(struct target *target, int errnum, | |||
121 | BUG_ON(buflen == 0); | 121 | BUG_ON(buflen == 0); |
122 | 122 | ||
123 | if (errnum >= 0) { | 123 | if (errnum >= 0) { |
124 | const char *err = strerror_r(errnum, buf, buflen); | 124 | const char *err = str_error_r(errnum, buf, buflen); |
125 | 125 | ||
126 | if (err != buf) | 126 | if (err != buf) |
127 | scnprintf(buf, buflen, "%s", err); | 127 | scnprintf(buf, buflen, "%s", err); |
diff --git a/tools/perf/util/util.h b/tools/perf/util/util.h index 1e8c3167b9fb..2370cfb902b2 100644 --- a/tools/perf/util/util.h +++ b/tools/perf/util/util.h | |||
@@ -360,4 +360,5 @@ typedef void (*print_binary_t)(enum binary_printer_ops, | |||
360 | void print_binary(unsigned char *data, size_t len, | 360 | void print_binary(unsigned char *data, size_t len, |
361 | size_t bytes_per_line, print_binary_t printer, | 361 | size_t bytes_per_line, print_binary_t printer, |
362 | void *extra); | 362 | void *extra); |
363 | |||
363 | #endif /* GIT_COMPAT_UTIL_H */ | 364 | #endif /* GIT_COMPAT_UTIL_H */ |