lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [day] [month] [year] [list]
Message-ID: <Z4Us_aB9PNk63MbG@x1>
Date: Mon, 13 Jan 2025 12:10:53 -0300
From: Arnaldo Carvalho de Melo <acme@...nel.org>
To: Song Liu <song@...nel.org>
Cc: Ian Rogers <irogers@...gle.com>, Peter Zijlstra <peterz@...radead.org>,
	Ingo Molnar <mingo@...hat.com>, Namhyung Kim <namhyung@...nel.org>,
	Mark Rutland <mark.rutland@....com>,
	Alexander Shishkin <alexander.shishkin@...ux.intel.com>,
	Jiri Olsa <jolsa@...nel.org>,
	Adrian Hunter <adrian.hunter@...el.com>,
	Kan Liang <kan.liang@...ux.intel.com>,
	Aditya Gupta <adityag@...ux.ibm.com>,
	Athira Rajeev <atrajeev@...ux.vnet.ibm.com>,
	Charlie Jenkins <charlie@...osinc.com>,
	James Clark <james.clark@...aro.org>,
	"Steinar H. Gunderson" <sesse@...gle.com>,
	Changbin Du <changbin.du@...wei.com>,
	Ravi Bangoria <ravi.bangoria@....com>,
	Howard Chu <howardchu95@...il.com>, linux-kernel@...r.kernel.org,
	linux-perf-users@...r.kernel.org
Subject: Re: [PATCH v1 1/3] perf build: Remove libbfd support

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@...gle.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

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ