mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2026-08-09 06:14:34 +02:00
Currently, both libdw and libunwind define 'unwind__get_entries'. This
causes a duplicate symbol build failure when both are compiled into
perf.
This commit refactors the DWARF unwind post-processing to be
configurable at runtime via the .perfconfig file option
'unwind.style', or using the argument '--unwind-style' in the commands
'perf report', 'perf script' and 'perf inject', in a similar manner to
the addr2line or the disassembler style.
The file 'tools/perf/util/unwind.c' adds the top-level dispatch
function 'unwind__get_entries'. The backend implementations are
renamed to 'libdw__get_entries' and 'libunwind__get_entries'. Both are
attempted as fallbacks if not configured, or if the primary backend
fails.
Fixes: 2e9191573a ("perf build: Remove NO_LIBDW_DWARF_UNWIND option")
Signed-off-by: Ian Rogers <irogers@google.com>
Cc: Adrian Hunter <adrian.hunter@intel.com>
Cc: Albert Ou <aou@eecs.berkeley.edu>
Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
Cc: Alexandre Ghiti <alex@ghiti.fr>
Cc: Andrew Jones <andrew.jones@oss.qualcomm.com>
Cc: Athira Rajeev <atrajeev@linux.ibm.com>
Cc: Dapeng Mi <dapeng1.mi@linux.intel.com>
Cc: Dmitrii Dolgov <9erthalion6@gmail.com>
Cc: Florian Fainelli <florian.fainelli@broadcom.com>
Cc: Howard Chu <howardchu95@gmail.com>
Cc: Ingo Molnar <mingo@redhat.com>
Cc: James Clark <james.clark@linaro.org>
Cc: Jiri Olsa <jolsa@kernel.org>
Cc: John Garry <john.g.garry@oracle.com>
Cc: Leo Yan <leo.yan@linux.dev>
Cc: libunwind-devel@nongnu.org
Cc: Li Guan <guanli.oerv@isrc.iscas.ac.cn>
Cc: Namhyung Kim <namhyung@kernel.org>
Cc: Palmer Dabbelt <palmer@dabbelt.com>
Cc: Paul Walmsley <pjw@kernel.org>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Shimin Guo <shimin.guo@skydio.com>
Cc: Thomas Richter <tmricht@linux.ibm.com>
Cc: Tomas Glozar <tglozar@redhat.com>
Cc: Will Deacon <will@kernel.org>
[ Don't mix declarations and code, move 'entries' variable to the start of scope ]
[ Use pr_warning_once() instead of pr_err() in stubs for get_entries(), suggested by a local sashiko instance ]
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
118 lines
2.4 KiB
C
118 lines
2.4 KiB
C
/* SPDX-License-Identifier: GPL-2.0 */
|
|
#ifndef __PERF_SYMBOL_CONF
|
|
#define __PERF_SYMBOL_CONF 1
|
|
|
|
#include <stdbool.h>
|
|
#include <linux/bitmap.h>
|
|
#include "perf.h"
|
|
|
|
struct strlist;
|
|
struct intlist;
|
|
|
|
enum unwind_style {
|
|
UNWIND_STYLE_UNKNOWN = 0,
|
|
UNWIND_STYLE_LIBDW,
|
|
UNWIND_STYLE_LIBUNWIND,
|
|
};
|
|
|
|
#define MAX_UNWIND_STYLE (UNWIND_STYLE_LIBUNWIND + 1)
|
|
|
|
|
|
enum a2l_style {
|
|
A2L_STYLE_UNKNOWN = 0,
|
|
A2L_STYLE_LIBDW,
|
|
A2L_STYLE_LLVM,
|
|
A2L_STYLE_LIBBFD,
|
|
A2L_STYLE_CMD,
|
|
};
|
|
#define MAX_A2L_STYLE (A2L_STYLE_CMD + 1)
|
|
|
|
struct symbol_conf {
|
|
bool nanosecs;
|
|
unsigned short priv_size;
|
|
bool try_vmlinux_path,
|
|
init_annotation,
|
|
force,
|
|
ignore_vmlinux,
|
|
ignore_vmlinux_buildid,
|
|
show_kernel_path,
|
|
use_modules,
|
|
allow_aliases,
|
|
show_nr_samples,
|
|
show_total_period,
|
|
use_callchain,
|
|
cumulate_callchain,
|
|
show_branchflag_count,
|
|
exclude_other,
|
|
show_cpu_utilization,
|
|
initialized,
|
|
kptr_restrict,
|
|
event_group,
|
|
demangle,
|
|
demangle_kernel,
|
|
filter_relative,
|
|
show_hist_headers,
|
|
has_filter,
|
|
show_ref_callgraph,
|
|
hide_unresolved,
|
|
raw_trace,
|
|
report_hierarchy,
|
|
report_block,
|
|
report_individual_block,
|
|
inline_name,
|
|
addr2line_disable_warn,
|
|
no_buildid_mmap2,
|
|
guest_code,
|
|
lazy_load_kernel_maps,
|
|
keep_exited_threads,
|
|
annotate_data_member,
|
|
annotate_data_sample,
|
|
skip_empty,
|
|
enable_latency,
|
|
prefer_latency;
|
|
const char *vmlinux_name,
|
|
*kallsyms_name,
|
|
*source_prefix,
|
|
*field_sep,
|
|
*graph_function;
|
|
const char *default_guest_vmlinux_name,
|
|
*default_guest_kallsyms,
|
|
*default_guest_modules;
|
|
const char *guestmount;
|
|
const char *dso_list_str,
|
|
*comm_list_str,
|
|
*pid_list_str,
|
|
*tid_list_str,
|
|
*sym_list_str,
|
|
*parallelism_list_str,
|
|
*col_width_list_str,
|
|
*bt_stop_list_str;
|
|
const char *addr2line_path;
|
|
enum a2l_style addr2line_style[MAX_A2L_STYLE];
|
|
int addr2line_timeout_ms;
|
|
enum unwind_style unwind_style[MAX_UNWIND_STYLE];
|
|
unsigned long time_quantum;
|
|
struct strlist *dso_list,
|
|
*comm_list,
|
|
*sym_list,
|
|
*dso_from_list,
|
|
*dso_to_list,
|
|
*sym_from_list,
|
|
*sym_to_list,
|
|
*bt_stop_list;
|
|
struct intlist *pid_list,
|
|
*tid_list,
|
|
*addr_list;
|
|
const char *symfs;
|
|
bool symfs_layout_flat;
|
|
int res_sample;
|
|
int pad_output_len_dso;
|
|
int group_sort_idx;
|
|
int addr_range;
|
|
DECLARE_BITMAP(parallelism_filter, MAX_NR_CPUS + 1);
|
|
};
|
|
|
|
extern struct symbol_conf symbol_conf;
|
|
|
|
#endif // __PERF_SYMBOL_CONF
|