All of lore.kernel.org
 help / color / mirror / Atom feed
From: Arnaldo Carvalho de Melo <acme@kernel.org>
To: Song Liu <song@kernel.org>
Cc: Ian Rogers <irogers@google.com>,
	Peter Zijlstra <peterz@infradead.org>,
	Ingo Molnar <mingo@redhat.com>,
	Namhyung Kim <namhyung@kernel.org>,
	Mark Rutland <mark.rutland@arm.com>,
	Alexander Shishkin <alexander.shishkin@linux.intel.com>,
	Jiri Olsa <jolsa@kernel.org>,
	Adrian Hunter <adrian.hunter@intel.com>,
	Kan Liang <kan.liang@linux.intel.com>,
	Aditya Gupta <adityag@linux.ibm.com>,
	Athira Rajeev <atrajeev@linux.vnet.ibm.com>,
	Charlie Jenkins <charlie@rivosinc.com>,
	James Clark <james.clark@linaro.org>,
	"Steinar H. Gunderson" <sesse@google.com>,
	Changbin Du <changbin.du@huawei.com>,
	Ravi Bangoria <ravi.bangoria@amd.com>,
	Howard Chu <howardchu95@gmail.com>,
	linux-kernel@vger.kernel.org, linux-perf-users@vger.kernel.org
Subject: Re: [PATCH v1 1/3] perf build: Remove libbfd support
Date: Mon, 13 Jan 2025 12:10:53 -0300	[thread overview]
Message-ID: <Z4Us_aB9PNk63MbG@x1> (raw)
In-Reply-To: <20250111202851.1075338-2-irogers@google.com>

On Sat, Jan 11, 2025 at 12:28:49PM -0800, Ian Rogers wrote:
> libbfd is license incompatible with perf and building requires the
> BUILD_NONDISTRO=1 build flag. Remove the code to simplify the code
> base.
> 
> Signed-off-by: Ian Rogers <irogers@google.com>

> diff --git a/tools/perf/util/disasm_bpf.c b/tools/perf/util/disasm_bpf.c
> index 1fee71c79b62..a891a0b909a7 100644
> --- a/tools/perf/util/disasm_bpf.c
> -
> -int symbol__disassemble_bpf(struct symbol *sym, struct annotate_args *args)
> -{
> -	struct annotation *notes = symbol__annotation(sym);

Song,

	Have you ever investigated how to reimplement BPF disassemble
using some other library than this one?

Thanks,

- Arnaldo

> -	struct bpf_prog_linfo *prog_linfo = NULL;
> -	struct bpf_prog_info_node *info_node;
> -	int len = sym->end - sym->start;
> -	disassembler_ftype disassemble;
> -	struct map *map = args->ms.map;
> -	struct perf_bpil *info_linear;
> -	struct disassemble_info info;
> -	struct dso *dso = map__dso(map);
> -	int pc = 0, count, sub_id;
> -	struct btf *btf = NULL;
> -	char tpath[PATH_MAX];
> -	size_t buf_size;
> -	int nr_skip = 0;
> -	char *buf;
> -	bfd *bfdf;
> -	int ret;
> -	FILE *s;
> -
> -	if (dso__binary_type(dso) != DSO_BINARY_TYPE__BPF_PROG_INFO)
> -		return SYMBOL_ANNOTATE_ERRNO__BPF_INVALID_FILE;
> -
> -	pr_debug("%s: handling sym %s addr %" PRIx64 " len %" PRIx64 "\n", __func__,
> -		  sym->name, sym->start, sym->end - sym->start);
> -
> -	memset(tpath, 0, sizeof(tpath));
> -	perf_exe(tpath, sizeof(tpath));
> -
> -	bfdf = bfd_openr(tpath, NULL);
> -	if (bfdf == NULL)
> -		abort();
> -
> -	if (!bfd_check_format(bfdf, bfd_object))
> -		abort();
> -
> -	s = open_memstream(&buf, &buf_size);
> -	if (!s) {
> -		ret = errno;
> -		goto out;
> -	}
> -	init_disassemble_info_compat(&info, s,
> -				     (fprintf_ftype) fprintf,
> -				     fprintf_styled);
> -	info.arch = bfd_get_arch(bfdf);
> -	info.mach = bfd_get_mach(bfdf);
> -
> -	info_node = perf_env__find_bpf_prog_info(dso__bpf_prog(dso)->env,
> -						 dso__bpf_prog(dso)->id);
> -	if (!info_node) {
> -		ret = SYMBOL_ANNOTATE_ERRNO__BPF_MISSING_BTF;
> -		goto out;
> -	}
> -	info_linear = info_node->info_linear;
> -	sub_id = dso__bpf_prog(dso)->sub_id;
> -
> -	info.buffer = (void *)(uintptr_t)(info_linear->info.jited_prog_insns);
> -	info.buffer_length = info_linear->info.jited_prog_len;
> -
> -	if (info_linear->info.nr_line_info)
> -		prog_linfo = bpf_prog_linfo__new(&info_linear->info);
> -
> -	if (info_linear->info.btf_id) {
> -		struct btf_node *node;
> -
> -		node = perf_env__find_btf(dso__bpf_prog(dso)->env,
> -					  info_linear->info.btf_id);
> -		if (node)
> -			btf = btf__new((__u8 *)(node->data),
> -				       node->data_size);
> -	}
> -
> -	disassemble_init_for_target(&info);
> -
> -#ifdef DISASM_FOUR_ARGS_SIGNATURE
> -	disassemble = disassembler(info.arch,
> -				   bfd_big_endian(bfdf),
> -				   info.mach,
> -				   bfdf);
> -#else
> -	disassemble = disassembler(bfdf);
> -#endif
> -	if (disassemble == NULL)
> -		abort();
> -
> -	fflush(s);
> -	do {
> -		const struct bpf_line_info *linfo = NULL;
> -		struct disasm_line *dl;
> -		size_t prev_buf_size;
> -		const char *srcline;
> -		u64 addr;
> -
> -		addr = pc + ((u64 *)(uintptr_t)(info_linear->info.jited_ksyms))[sub_id];
> -		count = disassemble(pc, &info);
> -
> -		if (prog_linfo)
> -			linfo = bpf_prog_linfo__lfind_addr_func(prog_linfo,
> -								addr, sub_id,
> -								nr_skip);
> -
> -		if (linfo && btf) {
> -			srcline = btf__name_by_offset(btf, linfo->line_off);
> -			nr_skip++;
> -		} else
> -			srcline = NULL;
> -
> -		fprintf(s, "\n");
> -		prev_buf_size = buf_size;
> -		fflush(s);
> -
> -		if (!annotate_opts.hide_src_code && srcline) {
> -			args->offset = -1;
> -			args->line = strdup(srcline);
> -			args->line_nr = 0;
> -			args->fileloc = NULL;
> -			args->ms.sym  = sym;
> -			dl = disasm_line__new(args);
> -			if (dl) {
> -				annotation_line__add(&dl->al,
> -						     &notes->src->source);
> -			}
> -		}
> -
> -		args->offset = pc;
> -		args->line = buf + prev_buf_size;
> -		args->line_nr = 0;
> -		args->fileloc = NULL;
> -		args->ms.sym  = sym;
> -		dl = disasm_line__new(args);
> -		if (dl)
> -			annotation_line__add(&dl->al, &notes->src->source);
> -
> -		pc += count;
> -	} while (count > 0 && pc < len);
> -
> -	ret = 0;
> -out:
> -	free(prog_linfo);
> -	btf__free(btf);
> -	fclose(s);
> -	bfd_close(bfdf);
> -	return ret;
> -}
> -#else // defined(HAVE_LIBBFD_SUPPORT) && defined(HAVE_LIBBPF_SUPPORT)
>  int symbol__disassemble_bpf(struct symbol *sym __maybe_unused, struct annotate_args *args __maybe_unused)
>  {
>  	return SYMBOL_ANNOTATE_ERRNO__NO_LIBOPCODES_FOR_BPF;
>  }
> -#endif // defined(HAVE_LIBBFD_SUPPORT) && defined(HAVE_LIBBPF_SUPPORT)
>  
>  int symbol__disassemble_bpf_image(struct symbol *sym, struct annotate_args *args)
>  {
> diff --git a/tools/perf/util/srcline.c b/tools/perf/util/srcline.c
> index f32d0d4f4bc9..e3ebe1095bcb 100644
> --- a/tools/perf/util/srcline.c
> +++ b/tools/perf/util/srcline.c
> @@ -187,247 +187,7 @@ void dso__free_a2l(struct dso *dso __maybe_unused)
>  	/* Nothing to free. */
>  }
>  
> -#elif defined(HAVE_LIBBFD_SUPPORT)
> -
> -/*
> - * Implement addr2line using libbfd.
> - */
> -#define PACKAGE "perf"
> -#include <bfd.h>
> -
> -struct a2l_data {
> -	const char 	*input;
> -	u64	 	addr;
> -
> -	bool 		found;
> -	const char 	*filename;
> -	const char 	*funcname;
> -	unsigned 	line;
> -
> -	bfd 		*abfd;
> -	asymbol 	**syms;
> -};
> -
> -static int bfd_error(const char *string)
> -{
> -	const char *errmsg;
> -
> -	errmsg = bfd_errmsg(bfd_get_error());
> -	fflush(stdout);
> -
> -	if (string)
> -		pr_debug("%s: %s\n", string, errmsg);
> -	else
> -		pr_debug("%s\n", errmsg);
> -
> -	return -1;
> -}
> -
> -static int slurp_symtab(bfd *abfd, struct a2l_data *a2l)
> -{
> -	long storage;
> -	long symcount;
> -	asymbol **syms;
> -	bfd_boolean dynamic = FALSE;
> -
> -	if ((bfd_get_file_flags(abfd) & HAS_SYMS) == 0)
> -		return bfd_error(bfd_get_filename(abfd));
> -
> -	storage = bfd_get_symtab_upper_bound(abfd);
> -	if (storage == 0L) {
> -		storage = bfd_get_dynamic_symtab_upper_bound(abfd);
> -		dynamic = TRUE;
> -	}
> -	if (storage < 0L)
> -		return bfd_error(bfd_get_filename(abfd));
> -
> -	syms = malloc(storage);
> -	if (dynamic)
> -		symcount = bfd_canonicalize_dynamic_symtab(abfd, syms);
> -	else
> -		symcount = bfd_canonicalize_symtab(abfd, syms);
> -
> -	if (symcount < 0) {
> -		free(syms);
> -		return bfd_error(bfd_get_filename(abfd));
> -	}
> -
> -	a2l->syms = syms;
> -	return 0;
> -}
> -
> -static void find_address_in_section(bfd *abfd, asection *section, void *data)
> -{
> -	bfd_vma pc, vma;
> -	bfd_size_type size;
> -	struct a2l_data *a2l = data;
> -	flagword flags;
> -
> -	if (a2l->found)
> -		return;
> -
> -#ifdef bfd_get_section_flags
> -	flags = bfd_get_section_flags(abfd, section);
> -#else
> -	flags = bfd_section_flags(section);
> -#endif
> -	if ((flags & SEC_ALLOC) == 0)
> -		return;
> -
> -	pc = a2l->addr;
> -#ifdef bfd_get_section_vma
> -	vma = bfd_get_section_vma(abfd, section);
> -#else
> -	vma = bfd_section_vma(section);
> -#endif
> -#ifdef bfd_get_section_size
> -	size = bfd_get_section_size(section);
> -#else
> -	size = bfd_section_size(section);
> -#endif
> -
> -	if (pc < vma || pc >= vma + size)
> -		return;
> -
> -	a2l->found = bfd_find_nearest_line(abfd, section, a2l->syms, pc - vma,
> -					   &a2l->filename, &a2l->funcname,
> -					   &a2l->line);
> -
> -	if (a2l->filename && !strlen(a2l->filename))
> -		a2l->filename = NULL;
> -}
> -
> -static struct a2l_data *addr2line_init(const char *path)
> -{
> -	bfd *abfd;
> -	struct a2l_data *a2l = NULL;
> -
> -	abfd = bfd_openr(path, NULL);
> -	if (abfd == NULL)
> -		return NULL;
> -
> -	if (!bfd_check_format(abfd, bfd_object))
> -		goto out;
> -
> -	a2l = zalloc(sizeof(*a2l));
> -	if (a2l == NULL)
> -		goto out;
> -
> -	a2l->abfd = abfd;
> -	a2l->input = strdup(path);
> -	if (a2l->input == NULL)
> -		goto out;
> -
> -	if (slurp_symtab(abfd, a2l))
> -		goto out;
> -
> -	return a2l;
> -
> -out:
> -	if (a2l) {
> -		zfree((char **)&a2l->input);
> -		free(a2l);
> -	}
> -	bfd_close(abfd);
> -	return NULL;
> -}
> -
> -static void addr2line_cleanup(struct a2l_data *a2l)
> -{
> -	if (a2l->abfd)
> -		bfd_close(a2l->abfd);
> -	zfree((char **)&a2l->input);
> -	zfree(&a2l->syms);
> -	free(a2l);
> -}
> -
> -static int inline_list__append_dso_a2l(struct dso *dso,
> -				       struct inline_node *node,
> -				       struct symbol *sym)
> -{
> -	struct a2l_data *a2l = dso__a2l(dso);
> -	struct symbol *inline_sym = new_inline_sym(dso, sym, a2l->funcname);
> -	char *srcline = NULL;
> -
> -	if (a2l->filename)
> -		srcline = srcline_from_fileline(a2l->filename, a2l->line);
> -
> -	return inline_list__append(inline_sym, srcline, node);
> -}
> -
> -static int addr2line(const char *dso_name, u64 addr,
> -		     char **file, unsigned int *line, struct dso *dso,
> -		     bool unwind_inlines, struct inline_node *node,
> -		     struct symbol *sym)
> -{
> -	int ret = 0;
> -	struct a2l_data *a2l = dso__a2l(dso);
> -
> -	if (!a2l) {
> -		a2l = addr2line_init(dso_name);
> -		dso__set_a2l(dso, a2l);
> -	}
> -
> -	if (a2l == NULL) {
> -		if (!symbol_conf.disable_add2line_warn)
> -			pr_warning("addr2line_init failed for %s\n", dso_name);
> -		return 0;
> -	}
> -
> -	a2l->addr = addr;
> -	a2l->found = false;
> -
> -	bfd_map_over_sections(a2l->abfd, find_address_in_section, a2l);
> -
> -	if (!a2l->found)
> -		return 0;
> -
> -	if (unwind_inlines) {
> -		int cnt = 0;
> -
> -		if (node && inline_list__append_dso_a2l(dso, node, sym))
> -			return 0;
> -
> -		while (bfd_find_inliner_info(a2l->abfd, &a2l->filename,
> -					     &a2l->funcname, &a2l->line) &&
> -		       cnt++ < MAX_INLINE_NEST) {
> -
> -			if (a2l->filename && !strlen(a2l->filename))
> -				a2l->filename = NULL;
> -
> -			if (node != NULL) {
> -				if (inline_list__append_dso_a2l(dso, node, sym))
> -					return 0;
> -				// found at least one inline frame
> -				ret = 1;
> -			}
> -		}
> -	}
> -
> -	if (file) {
> -		*file = a2l->filename ? strdup(a2l->filename) : NULL;
> -		ret = *file ? 1 : 0;
> -	}
> -
> -	if (line)
> -		*line = a2l->line;
> -
> -	return ret;
> -}
> -
> -void dso__free_a2l(struct dso *dso)
> -{
> -	struct a2l_data *a2l = dso__a2l(dso);
> -
> -	if (!a2l)
> -		return;
> -
> -	addr2line_cleanup(a2l);
> -
> -	dso__set_a2l(dso, NULL);
> -}
> -
> -#else /* HAVE_LIBBFD_SUPPORT */
> +#else /* HAVE_LIBLLVM_SUPPORT */
>  
>  static int filename_split(char *filename, unsigned int *line_nr)
>  {
> @@ -846,7 +606,7 @@ void dso__free_a2l(struct dso *dso)
>  	dso__set_a2l(dso, NULL);
>  }
>  
> -#endif /* HAVE_LIBBFD_SUPPORT */
> +#endif /* HAVE_LIBLLVM_SUPPORT */
>  
>  static struct inline_node *addr2inlines(const char *dso_name, u64 addr,
>  					struct dso *dso, struct symbol *sym)
> diff --git a/tools/perf/util/symbol-elf.c b/tools/perf/util/symbol-elf.c
> index e398abfd13a0..abd788c805db 100644
> --- a/tools/perf/util/symbol-elf.c
> +++ b/tools/perf/util/symbol-elf.c
> @@ -27,12 +27,7 @@
>  #include <symbol/kallsyms.h>
>  #include <internal/lib.h>
>  
> -#ifdef HAVE_LIBBFD_SUPPORT
> -#define PACKAGE 'perf'
> -#include <bfd.h>
> -#endif
> -
> -#if defined(HAVE_LIBBFD_SUPPORT) || defined(HAVE_CPLUS_DEMANGLE_SUPPORT)
> +#if defined(HAVE_CPLUS_DEMANGLE_SUPPORT)
>  #ifndef DMGL_PARAMS
>  #define DMGL_PARAMS     (1 << 0)  /* Include function args */
>  #define DMGL_ANSI       (1 << 1)  /* Include const, volatile, etc */
> @@ -290,11 +285,7 @@ static bool want_demangle(bool is_kernel_sym)
>  __weak char *cxx_demangle_sym(const char *str __maybe_unused, bool params __maybe_unused,
>  			      bool modifiers __maybe_unused)
>  {
> -#ifdef HAVE_LIBBFD_SUPPORT
> -	int flags = (params ? DMGL_PARAMS : 0) | (modifiers ? DMGL_ANSI : 0);
> -
> -	return bfd_demangle(NULL, str, flags);
> -#elif defined(HAVE_CPLUS_DEMANGLE_SUPPORT)
> +#if defined(HAVE_CPLUS_DEMANGLE_SUPPORT)
>  	int flags = (params ? DMGL_PARAMS : 0) | (modifiers ? DMGL_ANSI : 0);
>  
>  	return cplus_demangle(str, flags);
> @@ -933,37 +924,6 @@ static int elf_read_build_id(Elf *elf, void *bf, size_t size)
>  	return err;
>  }
>  
> -#ifdef HAVE_LIBBFD_BUILDID_SUPPORT
> -
> -static int read_build_id(const char *filename, struct build_id *bid)
> -{
> -	size_t size = sizeof(bid->data);
> -	int err = -1;
> -	bfd *abfd;
> -
> -	abfd = bfd_openr(filename, NULL);
> -	if (!abfd)
> -		return -1;
> -
> -	if (!bfd_check_format(abfd, bfd_object)) {
> -		pr_debug2("%s: cannot read %s bfd file.\n", __func__, filename);
> -		goto out_close;
> -	}
> -
> -	if (!abfd->build_id || abfd->build_id->size > size)
> -		goto out_close;
> -
> -	memcpy(bid->data, abfd->build_id->data, abfd->build_id->size);
> -	memset(bid->data + abfd->build_id->size, 0, size - abfd->build_id->size);
> -	err = bid->size = abfd->build_id->size;
> -
> -out_close:
> -	bfd_close(abfd);
> -	return err;
> -}
> -
> -#else // HAVE_LIBBFD_BUILDID_SUPPORT
> -
>  static int read_build_id(const char *filename, struct build_id *bid)
>  {
>  	size_t size = sizeof(bid->data);
> @@ -994,8 +954,6 @@ static int read_build_id(const char *filename, struct build_id *bid)
>  	return err;
>  }
>  
> -#endif // HAVE_LIBBFD_BUILDID_SUPPORT
> -
>  int filename__read_build_id(const char *filename, struct build_id *bid)
>  {
>  	struct kmod_path m = { .name = NULL, };
> @@ -1079,44 +1037,6 @@ int sysfs__read_build_id(const char *filename, struct build_id *bid)
>  	return err;
>  }
>  
> -#ifdef HAVE_LIBBFD_SUPPORT
> -
> -int filename__read_debuglink(const char *filename, char *debuglink,
> -			     size_t size)
> -{
> -	int err = -1;
> -	asection *section;
> -	bfd *abfd;
> -
> -	abfd = bfd_openr(filename, NULL);
> -	if (!abfd)
> -		return -1;
> -
> -	if (!bfd_check_format(abfd, bfd_object)) {
> -		pr_debug2("%s: cannot read %s bfd file.\n", __func__, filename);
> -		goto out_close;
> -	}
> -
> -	section = bfd_get_section_by_name(abfd, ".gnu_debuglink");
> -	if (!section)
> -		goto out_close;
> -
> -	if (section->size > size)
> -		goto out_close;
> -
> -	if (!bfd_get_section_contents(abfd, section, debuglink, 0,
> -				      section->size))
> -		goto out_close;
> -
> -	err = 0;
> -
> -out_close:
> -	bfd_close(abfd);
> -	return err;
> -}
> -
> -#else
> -
>  int filename__read_debuglink(const char *filename, char *debuglink,
>  			     size_t size)
>  {
> @@ -1169,8 +1089,6 @@ int filename__read_debuglink(const char *filename, char *debuglink,
>  	return err;
>  }
>  
> -#endif
> -
>  static int dso__swap_init(struct dso *dso, unsigned char eidata)
>  {
>  	static unsigned int const endian = 1;
> diff --git a/tools/perf/util/symbol.c b/tools/perf/util/symbol.c
> index 0037f1163919..ed376bb73d23 100644
> --- a/tools/perf/util/symbol.c
> +++ b/tools/perf/util/symbol.c
> @@ -1566,137 +1566,6 @@ static int dso__load_perf_map(const char *map_path, struct dso *dso)
>  	return -1;
>  }
>  
> -#ifdef HAVE_LIBBFD_SUPPORT
> -#define PACKAGE 'perf'
> -#include <bfd.h>
> -
> -static int bfd_symbols__cmpvalue(const void *a, const void *b)
> -{
> -	const asymbol *as = *(const asymbol **)a, *bs = *(const asymbol **)b;
> -
> -	if (bfd_asymbol_value(as) != bfd_asymbol_value(bs))
> -		return bfd_asymbol_value(as) - bfd_asymbol_value(bs);
> -
> -	return bfd_asymbol_name(as)[0] - bfd_asymbol_name(bs)[0];
> -}
> -
> -static int bfd2elf_binding(asymbol *symbol)
> -{
> -	if (symbol->flags & BSF_WEAK)
> -		return STB_WEAK;
> -	if (symbol->flags & BSF_GLOBAL)
> -		return STB_GLOBAL;
> -	if (symbol->flags & BSF_LOCAL)
> -		return STB_LOCAL;
> -	return -1;
> -}
> -
> -int dso__load_bfd_symbols(struct dso *dso, const char *debugfile)
> -{
> -	int err = -1;
> -	long symbols_size, symbols_count, i;
> -	asection *section;
> -	asymbol **symbols, *sym;
> -	struct symbol *symbol;
> -	bfd *abfd;
> -	u64 start, len;
> -
> -	abfd = bfd_openr(debugfile, NULL);
> -	if (!abfd)
> -		return -1;
> -
> -	if (!bfd_check_format(abfd, bfd_object)) {
> -		pr_debug2("%s: cannot read %s bfd file.\n", __func__,
> -			  dso__long_name(dso));
> -		goto out_close;
> -	}
> -
> -	if (bfd_get_flavour(abfd) == bfd_target_elf_flavour)
> -		goto out_close;
> -
> -	symbols_size = bfd_get_symtab_upper_bound(abfd);
> -	if (symbols_size == 0) {
> -		bfd_close(abfd);
> -		return 0;
> -	}
> -
> -	if (symbols_size < 0)
> -		goto out_close;
> -
> -	symbols = malloc(symbols_size);
> -	if (!symbols)
> -		goto out_close;
> -
> -	symbols_count = bfd_canonicalize_symtab(abfd, symbols);
> -	if (symbols_count < 0)
> -		goto out_free;
> -
> -	section = bfd_get_section_by_name(abfd, ".text");
> -	if (section) {
> -		for (i = 0; i < symbols_count; ++i) {
> -			if (!strcmp(bfd_asymbol_name(symbols[i]), "__ImageBase") ||
> -			    !strcmp(bfd_asymbol_name(symbols[i]), "__image_base__"))
> -				break;
> -		}
> -		if (i < symbols_count) {
> -			/* PE symbols can only have 4 bytes, so use .text high bits */
> -			u64 text_offset = (section->vma - (u32)section->vma)
> -				+ (u32)bfd_asymbol_value(symbols[i]);
> -			dso__set_text_offset(dso, text_offset);
> -			dso__set_text_end(dso, (section->vma - text_offset) + section->size);
> -		} else {
> -			dso__set_text_offset(dso, section->vma - section->filepos);
> -			dso__set_text_end(dso, section->filepos + section->size);
> -		}
> -	}
> -
> -	qsort(symbols, symbols_count, sizeof(asymbol *), bfd_symbols__cmpvalue);
> -
> -#ifdef bfd_get_section
> -#define bfd_asymbol_section bfd_get_section
> -#endif
> -	for (i = 0; i < symbols_count; ++i) {
> -		sym = symbols[i];
> -		section = bfd_asymbol_section(sym);
> -		if (bfd2elf_binding(sym) < 0)
> -			continue;
> -
> -		while (i + 1 < symbols_count &&
> -		       bfd_asymbol_section(symbols[i + 1]) == section &&
> -		       bfd2elf_binding(symbols[i + 1]) < 0)
> -			i++;
> -
> -		if (i + 1 < symbols_count &&
> -		    bfd_asymbol_section(symbols[i + 1]) == section)
> -			len = symbols[i + 1]->value - sym->value;
> -		else
> -			len = section->size - sym->value;
> -
> -		start = bfd_asymbol_value(sym) - dso__text_offset(dso);
> -		symbol = symbol__new(start, len, bfd2elf_binding(sym), STT_FUNC,
> -				     bfd_asymbol_name(sym));
> -		if (!symbol)
> -			goto out_free;
> -
> -		symbols__insert(dso__symbols(dso), symbol);
> -	}
> -#ifdef bfd_get_section
> -#undef bfd_asymbol_section
> -#endif
> -
> -	symbols__fixup_end(dso__symbols(dso), false);
> -	symbols__fixup_duplicate(dso__symbols(dso));
> -	dso__set_adjust_symbols(dso, true);
> -
> -	err = 0;
> -out_free:
> -	free(symbols);
> -out_close:
> -	bfd_close(abfd);
> -	return err;
> -}
> -#endif
> -
>  static bool dso__is_compatible_symtab_type(struct dso *dso, bool kmod,
>  					   enum dso_binary_type type)
>  {
> @@ -1898,10 +1767,6 @@ int dso__load(struct dso *dso, struct map *map)
>  			}
>  		}
>  
> -#ifdef HAVE_LIBBFD_SUPPORT
> -		if (is_reg)
> -			bfdrc = dso__load_bfd_symbols(dso, name);
> -#endif
>  		if (is_reg && bfdrc < 0)
>  			sirc = symsrc__init(ss, dso, name, symtab_type);
>  
> diff --git a/tools/perf/util/symbol.h b/tools/perf/util/symbol.h
> index 3fb5d146d9b1..508fd559a8a1 100644
> --- a/tools/perf/util/symbol.h
> +++ b/tools/perf/util/symbol.h
> @@ -174,10 +174,6 @@ int symbol__config_symfs(const struct option *opt __maybe_unused,
>  
>  struct symsrc;
>  
> -#ifdef HAVE_LIBBFD_SUPPORT
> -int dso__load_bfd_symbols(struct dso *dso, const char *debugfile);
> -#endif
> -
>  int dso__load_sym(struct dso *dso, struct map *map, struct symsrc *syms_ss,
>  		  struct symsrc *runtime_ss, int kmodule);
>  int dso__synthesize_plt_symbols(struct dso *dso, struct symsrc *ss);
> -- 
> 2.47.1.613.gc27f4b7a9f-goog

  reply	other threads:[~2025-01-13 15:10 UTC|newest]

Thread overview: 7+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2025-01-11 20:28 [PATCH v1 0/3] Remove BUILD_NONDISTRO Ian Rogers
2025-01-11 20:28 ` [PATCH v1 1/3] perf build: Remove libbfd support Ian Rogers
2025-01-13 15:10   ` Arnaldo Carvalho de Melo [this message]
2025-01-21 16:52     ` Ian Rogers
2025-01-21 18:03       ` Song Liu
2025-01-11 20:28 ` [PATCH v1 2/3] perf build: Remove libiberty support Ian Rogers
2025-01-11 20:28 ` [PATCH v1 3/3] perf build: Remove unused defines Ian Rogers

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=Z4Us_aB9PNk63MbG@x1 \
    --to=acme@kernel.org \
    --cc=adityag@linux.ibm.com \
    --cc=adrian.hunter@intel.com \
    --cc=alexander.shishkin@linux.intel.com \
    --cc=atrajeev@linux.vnet.ibm.com \
    --cc=changbin.du@huawei.com \
    --cc=charlie@rivosinc.com \
    --cc=howardchu95@gmail.com \
    --cc=irogers@google.com \
    --cc=james.clark@linaro.org \
    --cc=jolsa@kernel.org \
    --cc=kan.liang@linux.intel.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-perf-users@vger.kernel.org \
    --cc=mark.rutland@arm.com \
    --cc=mingo@redhat.com \
    --cc=namhyung@kernel.org \
    --cc=peterz@infradead.org \
    --cc=ravi.bangoria@amd.com \
    --cc=sesse@google.com \
    --cc=song@kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.