/* 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 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;
	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
