diff options
Diffstat (limited to 'tools/perf/util')
| -rw-r--r-- | tools/perf/util/c++/clang.cpp | 2 | ||||
| -rw-r--r-- | tools/perf/util/cpumap.c | 11 | ||||
| -rw-r--r-- | tools/perf/util/mem-events.c | 2 | ||||
| -rw-r--r-- | tools/perf/util/ordered-events.c | 6 | ||||
| -rw-r--r-- | tools/perf/util/setup.py | 2 | ||||
| -rw-r--r-- | tools/perf/util/symbol-elf.c | 23 |
6 files changed, 39 insertions, 7 deletions
diff --git a/tools/perf/util/c++/clang.cpp b/tools/perf/util/c++/clang.cpp index 89512504551b..39c0004f2886 100644 --- a/tools/perf/util/c++/clang.cpp +++ b/tools/perf/util/c++/clang.cpp | |||
| @@ -160,7 +160,7 @@ getBPFObjectFromModule(llvm::Module *Module) | |||
| 160 | } | 160 | } |
| 161 | PM.run(*Module); | 161 | PM.run(*Module); |
| 162 | 162 | ||
| 163 | return std::move(Buffer); | 163 | return Buffer; |
| 164 | } | 164 | } |
| 165 | 165 | ||
| 166 | } | 166 | } |
diff --git a/tools/perf/util/cpumap.c b/tools/perf/util/cpumap.c index 1ccbd3342069..383674f448fc 100644 --- a/tools/perf/util/cpumap.c +++ b/tools/perf/util/cpumap.c | |||
| @@ -134,7 +134,12 @@ struct cpu_map *cpu_map__new(const char *cpu_list) | |||
| 134 | if (!cpu_list) | 134 | if (!cpu_list) |
| 135 | return cpu_map__read_all_cpu_map(); | 135 | return cpu_map__read_all_cpu_map(); |
| 136 | 136 | ||
| 137 | if (!isdigit(*cpu_list)) | 137 | /* |
| 138 | * must handle the case of empty cpumap to cover | ||
| 139 | * TOPOLOGY header for NUMA nodes with no CPU | ||
| 140 | * ( e.g., because of CPU hotplug) | ||
| 141 | */ | ||
| 142 | if (!isdigit(*cpu_list) && *cpu_list != '\0') | ||
| 138 | goto out; | 143 | goto out; |
| 139 | 144 | ||
| 140 | while (isdigit(*cpu_list)) { | 145 | while (isdigit(*cpu_list)) { |
| @@ -181,8 +186,10 @@ struct cpu_map *cpu_map__new(const char *cpu_list) | |||
| 181 | 186 | ||
| 182 | if (nr_cpus > 0) | 187 | if (nr_cpus > 0) |
| 183 | cpus = cpu_map__trim_new(nr_cpus, tmp_cpus); | 188 | cpus = cpu_map__trim_new(nr_cpus, tmp_cpus); |
| 184 | else | 189 | else if (*cpu_list != '\0') |
| 185 | cpus = cpu_map__default_new(); | 190 | cpus = cpu_map__default_new(); |
| 191 | else | ||
| 192 | cpus = cpu_map__dummy_new(); | ||
| 186 | invalid: | 193 | invalid: |
| 187 | free(tmp_cpus); | 194 | free(tmp_cpus); |
| 188 | out: | 195 | out: |
diff --git a/tools/perf/util/mem-events.c b/tools/perf/util/mem-events.c index 93f74d8d3cdd..42c3e5a229d2 100644 --- a/tools/perf/util/mem-events.c +++ b/tools/perf/util/mem-events.c | |||
| @@ -28,7 +28,7 @@ struct perf_mem_event perf_mem_events[PERF_MEM_EVENTS__MAX] = { | |||
| 28 | static char mem_loads_name[100]; | 28 | static char mem_loads_name[100]; |
| 29 | static bool mem_loads_name__init; | 29 | static bool mem_loads_name__init; |
| 30 | 30 | ||
| 31 | char *perf_mem_events__name(int i) | 31 | char * __weak perf_mem_events__name(int i) |
| 32 | { | 32 | { |
| 33 | if (i == PERF_MEM_EVENTS__LOAD) { | 33 | if (i == PERF_MEM_EVENTS__LOAD) { |
| 34 | if (!mem_loads_name__init) { | 34 | if (!mem_loads_name__init) { |
diff --git a/tools/perf/util/ordered-events.c b/tools/perf/util/ordered-events.c index 897589507d97..ea523d3b248f 100644 --- a/tools/perf/util/ordered-events.c +++ b/tools/perf/util/ordered-events.c | |||
| @@ -391,8 +391,10 @@ void ordered_events__free(struct ordered_events *oe) | |||
| 391 | * Current buffer might not have all the events allocated | 391 | * Current buffer might not have all the events allocated |
| 392 | * yet, we need to free only allocated ones ... | 392 | * yet, we need to free only allocated ones ... |
| 393 | */ | 393 | */ |
| 394 | list_del(&oe->buffer->list); | 394 | if (oe->buffer) { |
| 395 | ordered_events_buffer__free(oe->buffer, oe->buffer_idx, oe); | 395 | list_del(&oe->buffer->list); |
| 396 | ordered_events_buffer__free(oe->buffer, oe->buffer_idx, oe); | ||
| 397 | } | ||
| 396 | 398 | ||
| 397 | /* ... and continue with the rest */ | 399 | /* ... and continue with the rest */ |
| 398 | list_for_each_entry_safe(buffer, tmp, &oe->to_free, list) { | 400 | list_for_each_entry_safe(buffer, tmp, &oe->to_free, list) { |
diff --git a/tools/perf/util/setup.py b/tools/perf/util/setup.py index 63f758c655d5..64d1f36dee99 100644 --- a/tools/perf/util/setup.py +++ b/tools/perf/util/setup.py | |||
| @@ -17,6 +17,8 @@ if cc == "clang": | |||
| 17 | vars[var] = sub("-mcet", "", vars[var]) | 17 | vars[var] = sub("-mcet", "", vars[var]) |
| 18 | if not clang_has_option("-fcf-protection"): | 18 | if not clang_has_option("-fcf-protection"): |
| 19 | vars[var] = sub("-fcf-protection", "", vars[var]) | 19 | vars[var] = sub("-fcf-protection", "", vars[var]) |
| 20 | if not clang_has_option("-fstack-clash-protection"): | ||
| 21 | vars[var] = sub("-fstack-clash-protection", "", vars[var]) | ||
| 20 | 22 | ||
| 21 | from distutils.core import setup, Extension | 23 | from distutils.core import setup, Extension |
| 22 | 24 | ||
diff --git a/tools/perf/util/symbol-elf.c b/tools/perf/util/symbol-elf.c index 66a84d5846c8..dca7dfae69ad 100644 --- a/tools/perf/util/symbol-elf.c +++ b/tools/perf/util/symbol-elf.c | |||
| @@ -19,6 +19,20 @@ | |||
| 19 | #define EM_AARCH64 183 /* ARM 64 bit */ | 19 | #define EM_AARCH64 183 /* ARM 64 bit */ |
| 20 | #endif | 20 | #endif |
| 21 | 21 | ||
| 22 | #ifndef ELF32_ST_VISIBILITY | ||
| 23 | #define ELF32_ST_VISIBILITY(o) ((o) & 0x03) | ||
| 24 | #endif | ||
| 25 | |||
| 26 | /* For ELF64 the definitions are the same. */ | ||
| 27 | #ifndef ELF64_ST_VISIBILITY | ||
| 28 | #define ELF64_ST_VISIBILITY(o) ELF32_ST_VISIBILITY (o) | ||
| 29 | #endif | ||
| 30 | |||
| 31 | /* How to extract information held in the st_other field. */ | ||
| 32 | #ifndef GELF_ST_VISIBILITY | ||
| 33 | #define GELF_ST_VISIBILITY(val) ELF64_ST_VISIBILITY (val) | ||
| 34 | #endif | ||
| 35 | |||
| 22 | typedef Elf64_Nhdr GElf_Nhdr; | 36 | typedef Elf64_Nhdr GElf_Nhdr; |
| 23 | 37 | ||
| 24 | #ifdef HAVE_CPLUS_DEMANGLE_SUPPORT | 38 | #ifdef HAVE_CPLUS_DEMANGLE_SUPPORT |
| @@ -87,6 +101,11 @@ static inline uint8_t elf_sym__type(const GElf_Sym *sym) | |||
| 87 | return GELF_ST_TYPE(sym->st_info); | 101 | return GELF_ST_TYPE(sym->st_info); |
| 88 | } | 102 | } |
| 89 | 103 | ||
| 104 | static inline uint8_t elf_sym__visibility(const GElf_Sym *sym) | ||
| 105 | { | ||
| 106 | return GELF_ST_VISIBILITY(sym->st_other); | ||
| 107 | } | ||
| 108 | |||
| 90 | #ifndef STT_GNU_IFUNC | 109 | #ifndef STT_GNU_IFUNC |
| 91 | #define STT_GNU_IFUNC 10 | 110 | #define STT_GNU_IFUNC 10 |
| 92 | #endif | 111 | #endif |
| @@ -111,7 +130,9 @@ static inline int elf_sym__is_label(const GElf_Sym *sym) | |||
| 111 | return elf_sym__type(sym) == STT_NOTYPE && | 130 | return elf_sym__type(sym) == STT_NOTYPE && |
| 112 | sym->st_name != 0 && | 131 | sym->st_name != 0 && |
| 113 | sym->st_shndx != SHN_UNDEF && | 132 | sym->st_shndx != SHN_UNDEF && |
| 114 | sym->st_shndx != SHN_ABS; | 133 | sym->st_shndx != SHN_ABS && |
| 134 | elf_sym__visibility(sym) != STV_HIDDEN && | ||
| 135 | elf_sym__visibility(sym) != STV_INTERNAL; | ||
| 115 | } | 136 | } |
| 116 | 137 | ||
| 117 | static bool elf_sym__filter(GElf_Sym *sym) | 138 | static bool elf_sym__filter(GElf_Sym *sym) |
