diff options
author | Arnaldo Carvalho de Melo <acme@redhat.com> | 2019-09-30 14:48:12 -0400 |
---|---|---|
committer | Arnaldo Carvalho de Melo <acme@redhat.com> | 2019-09-30 16:30:03 -0400 |
commit | 42d7a9107d83223a5fcecc6732d626a6c074cbc2 (patch) | |
tree | 3526dca4065eba98bb8bf152555b494152037b05 /tools | |
parent | 211f493b611eef012841f795166c38ec7528738d (diff) |
perf annotate: Fix arch specific ->init() failure errors
They are called from symbol__annotate() and to propagate errors that can
help understand the problem make them return what
symbol__strerror_disassemble() known, i.e. errno codes and other
annotation specific errors in a special, out of errnos, range.
Reported-by: Russell King - ARM Linux admin <linux@armlinux.org.uk>
Cc: Adrian Hunter <adrian.hunter@intel.com>
Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
Cc: Jiri Olsa <jolsa@kernel.org>
Cc: Namhyung Kim <namhyung@kernel.org>
Cc: Peter Zijlstra <peterz@infradead.org>,
Cc: Will Deacon <will@kernel.org>
Link: https://lkml.kernel.org/n/tip-pqx7srcv7tixgid251aeboj6@git.kernel.org
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
Diffstat (limited to 'tools')
-rw-r--r-- | tools/perf/arch/arm/annotate/instructions.c | 4 | ||||
-rw-r--r-- | tools/perf/arch/arm64/annotate/instructions.c | 4 | ||||
-rw-r--r-- | tools/perf/arch/s390/annotate/instructions.c | 6 | ||||
-rw-r--r-- | tools/perf/arch/x86/annotate/instructions.c | 6 | ||||
-rw-r--r-- | tools/perf/util/annotate.c | 6 | ||||
-rw-r--r-- | tools/perf/util/annotate.h | 2 |
6 files changed, 20 insertions, 8 deletions
diff --git a/tools/perf/arch/arm/annotate/instructions.c b/tools/perf/arch/arm/annotate/instructions.c index e1d4b484cc4b..2ff6cedeb9c5 100644 --- a/tools/perf/arch/arm/annotate/instructions.c +++ b/tools/perf/arch/arm/annotate/instructions.c | |||
@@ -37,7 +37,7 @@ static int arm__annotate_init(struct arch *arch, char *cpuid __maybe_unused) | |||
37 | 37 | ||
38 | arm = zalloc(sizeof(*arm)); | 38 | arm = zalloc(sizeof(*arm)); |
39 | if (!arm) | 39 | if (!arm) |
40 | return -1; | 40 | return ENOMEM; |
41 | 41 | ||
42 | #define ARM_CONDS "(cc|cs|eq|ge|gt|hi|le|ls|lt|mi|ne|pl|vc|vs)" | 42 | #define ARM_CONDS "(cc|cs|eq|ge|gt|hi|le|ls|lt|mi|ne|pl|vc|vs)" |
43 | err = regcomp(&arm->call_insn, "^blx?" ARM_CONDS "?$", REG_EXTENDED); | 43 | err = regcomp(&arm->call_insn, "^blx?" ARM_CONDS "?$", REG_EXTENDED); |
@@ -59,5 +59,5 @@ out_free_call: | |||
59 | regfree(&arm->call_insn); | 59 | regfree(&arm->call_insn); |
60 | out_free_arm: | 60 | out_free_arm: |
61 | free(arm); | 61 | free(arm); |
62 | return -1; | 62 | return SYMBOL_ANNOTATE_ERRNO__ARCH_INIT_REGEXP; |
63 | } | 63 | } |
diff --git a/tools/perf/arch/arm64/annotate/instructions.c b/tools/perf/arch/arm64/annotate/instructions.c index 43aa93ed8414..037e292ecd8e 100644 --- a/tools/perf/arch/arm64/annotate/instructions.c +++ b/tools/perf/arch/arm64/annotate/instructions.c | |||
@@ -95,7 +95,7 @@ static int arm64__annotate_init(struct arch *arch, char *cpuid __maybe_unused) | |||
95 | 95 | ||
96 | arm = zalloc(sizeof(*arm)); | 96 | arm = zalloc(sizeof(*arm)); |
97 | if (!arm) | 97 | if (!arm) |
98 | return -1; | 98 | return ENOMEM; |
99 | 99 | ||
100 | /* bl, blr */ | 100 | /* bl, blr */ |
101 | err = regcomp(&arm->call_insn, "^blr?$", REG_EXTENDED); | 101 | err = regcomp(&arm->call_insn, "^blr?$", REG_EXTENDED); |
@@ -118,5 +118,5 @@ out_free_call: | |||
118 | regfree(&arm->call_insn); | 118 | regfree(&arm->call_insn); |
119 | out_free_arm: | 119 | out_free_arm: |
120 | free(arm); | 120 | free(arm); |
121 | return -1; | 121 | return SYMBOL_ANNOTATE_ERRNO__ARCH_INIT_REGEXP; |
122 | } | 122 | } |
diff --git a/tools/perf/arch/s390/annotate/instructions.c b/tools/perf/arch/s390/annotate/instructions.c index 89bb8f2c54ce..a50e70baf918 100644 --- a/tools/perf/arch/s390/annotate/instructions.c +++ b/tools/perf/arch/s390/annotate/instructions.c | |||
@@ -164,8 +164,10 @@ static int s390__annotate_init(struct arch *arch, char *cpuid __maybe_unused) | |||
164 | if (!arch->initialized) { | 164 | if (!arch->initialized) { |
165 | arch->initialized = true; | 165 | arch->initialized = true; |
166 | arch->associate_instruction_ops = s390__associate_ins_ops; | 166 | arch->associate_instruction_ops = s390__associate_ins_ops; |
167 | if (cpuid) | 167 | if (cpuid) { |
168 | err = s390__cpuid_parse(arch, cpuid); | 168 | if (s390__cpuid_parse(arch, cpuid)) |
169 | err = SYMBOL_ANNOTATE_ERRNO__ARCH_INIT_CPUID_PARSING; | ||
170 | } | ||
169 | } | 171 | } |
170 | 172 | ||
171 | return err; | 173 | return err; |
diff --git a/tools/perf/arch/x86/annotate/instructions.c b/tools/perf/arch/x86/annotate/instructions.c index 44f5aba78210..7eb5621c021d 100644 --- a/tools/perf/arch/x86/annotate/instructions.c +++ b/tools/perf/arch/x86/annotate/instructions.c | |||
@@ -196,8 +196,10 @@ static int x86__annotate_init(struct arch *arch, char *cpuid) | |||
196 | if (arch->initialized) | 196 | if (arch->initialized) |
197 | return 0; | 197 | return 0; |
198 | 198 | ||
199 | if (cpuid) | 199 | if (cpuid) { |
200 | err = x86__cpuid_parse(arch, cpuid); | 200 | if (x86__cpuid_parse(arch, cpuid)) |
201 | err = SYMBOL_ANNOTATE_ERRNO__ARCH_INIT_CPUID_PARSING; | ||
202 | } | ||
201 | 203 | ||
202 | arch->initialized = true; | 204 | arch->initialized = true; |
203 | return err; | 205 | return err; |
diff --git a/tools/perf/util/annotate.c b/tools/perf/util/annotate.c index 1de1a7091c48..dc15352924f9 100644 --- a/tools/perf/util/annotate.c +++ b/tools/perf/util/annotate.c | |||
@@ -1631,6 +1631,12 @@ int symbol__strerror_disassemble(struct symbol *sym __maybe_unused, struct map * | |||
1631 | case SYMBOL_ANNOTATE_ERRNO__NO_LIBOPCODES_FOR_BPF: | 1631 | case SYMBOL_ANNOTATE_ERRNO__NO_LIBOPCODES_FOR_BPF: |
1632 | scnprintf(buf, buflen, "Please link with binutils's libopcode to enable BPF annotation"); | 1632 | scnprintf(buf, buflen, "Please link with binutils's libopcode to enable BPF annotation"); |
1633 | break; | 1633 | break; |
1634 | case SYMBOL_ANNOTATE_ERRNO__ARCH_INIT_REGEXP: | ||
1635 | scnprintf(buf, buflen, "Problems with arch specific instruction name regular expressions."); | ||
1636 | break; | ||
1637 | case SYMBOL_ANNOTATE_ERRNO__ARCH_INIT_CPUID_PARSING: | ||
1638 | scnprintf(buf, buflen, "Problems while parsing the CPUID in the arch specific initialization."); | ||
1639 | break; | ||
1634 | default: | 1640 | default: |
1635 | scnprintf(buf, buflen, "Internal error: Invalid %d error code\n", errnum); | 1641 | scnprintf(buf, buflen, "Internal error: Invalid %d error code\n", errnum); |
1636 | break; | 1642 | break; |
diff --git a/tools/perf/util/annotate.h b/tools/perf/util/annotate.h index d94be9140e31..116e21f49da6 100644 --- a/tools/perf/util/annotate.h +++ b/tools/perf/util/annotate.h | |||
@@ -370,6 +370,8 @@ enum symbol_disassemble_errno { | |||
370 | 370 | ||
371 | SYMBOL_ANNOTATE_ERRNO__NO_VMLINUX = __SYMBOL_ANNOTATE_ERRNO__START, | 371 | SYMBOL_ANNOTATE_ERRNO__NO_VMLINUX = __SYMBOL_ANNOTATE_ERRNO__START, |
372 | SYMBOL_ANNOTATE_ERRNO__NO_LIBOPCODES_FOR_BPF, | 372 | SYMBOL_ANNOTATE_ERRNO__NO_LIBOPCODES_FOR_BPF, |
373 | SYMBOL_ANNOTATE_ERRNO__ARCH_INIT_CPUID_PARSING, | ||
374 | SYMBOL_ANNOTATE_ERRNO__ARCH_INIT_REGEXP, | ||
373 | 375 | ||
374 | __SYMBOL_ANNOTATE_ERRNO__END, | 376 | __SYMBOL_ANNOTATE_ERRNO__END, |
375 | }; | 377 | }; |