All of lore.kernel.org
 help / color / mirror / Atom feed
From: Jiri Olsa <jolsa@redhat.com>
To: Jiri Olsa <jolsa@kernel.org>, Alexei Starovoitov <ast@kernel.org>,
	Song Liu <songliubraving@fb.com>
Cc: Arnaldo Carvalho de Melo <acme@kernel.org>,
	lkml <linux-kernel@vger.kernel.org>,
	Peter Zijlstra <a.p.zijlstra@chello.nl>,
	Ingo Molnar <mingo@kernel.org>,
	Mark Rutland <mark.rutland@arm.com>,
	Namhyung Kim <namhyung@kernel.org>,
	Alexander Shishkin <alexander.shishkin@linux.intel.com>,
	Michael Petlan <mpetlan@redhat.com>,
	Ian Rogers <irogers@google.com>,
	Stephane Eranian <eranian@google.com>,
	Alexey Budankov <alexey.budankov@linux.intel.com>,
	Andi Kleen <ak@linux.intel.com>,
	Adrian Hunter <adrian.hunter@intel.com>
Subject: Re: [PATCH 02/25] bpf: Add size arg to build_id_parse function
Date: Thu, 3 Dec 2020 20:24:38 +0100	[thread overview]
Message-ID: <20201203192438.GA3613628@krava> (raw)
In-Reply-To: <20201126170026.2619053-3-jolsa@kernel.org>

On Thu, Nov 26, 2020 at 06:00:03PM +0100, Jiri Olsa wrote:
> It's possible to have other build id types (other than default SHA1).
> Currently there's also ld support for MD5 build id.
> 
> Adding size argument to build_id_parse function, that returns (if defined)
> size of the parsed build id, so we can recognize the build id type.
> 
> Cc: Alexei Starovoitov <ast@kernel.org>
> Cc: Song Liu <songliubraving@fb.com>

Alexei, Song,
could you guys please check on this one?

thanks,
jirka


> Signed-off-by: Jiri Olsa <jolsa@kernel.org>
> ---
>  include/linux/buildid.h |  3 ++-
>  kernel/bpf/stackmap.c   |  2 +-
>  lib/buildid.c           | 29 +++++++++++++++++++++--------
>  3 files changed, 24 insertions(+), 10 deletions(-)
> 
> diff --git a/include/linux/buildid.h b/include/linux/buildid.h
> index 3be5b49719f1..72639d433873 100644
> --- a/include/linux/buildid.h
> +++ b/include/linux/buildid.h
> @@ -6,6 +6,7 @@
>  
>  #define BUILD_ID_SIZE 20
>  
> -int build_id_parse(struct vm_area_struct *vma, unsigned char *build_id);
> +int build_id_parse(struct vm_area_struct *vma, unsigned char *build_id,
> +		   __u32 *size);
>  
>  #endif
> diff --git a/kernel/bpf/stackmap.c b/kernel/bpf/stackmap.c
> index 7df08f8af5a1..a05fac2cbb05 100644
> --- a/kernel/bpf/stackmap.c
> +++ b/kernel/bpf/stackmap.c
> @@ -199,7 +199,7 @@ static void stack_map_get_build_id_offset(struct bpf_stack_build_id *id_offs,
>  
>  	for (i = 0; i < trace_nr; i++) {
>  		vma = find_vma(current->mm, ips[i]);
> -		if (!vma || build_id_parse(vma, id_offs[i].build_id)) {
> +		if (!vma || build_id_parse(vma, id_offs[i].build_id, NULL)) {
>  			/* per entry fall back to ips */
>  			id_offs[i].status = BPF_STACK_BUILD_ID_IP;
>  			id_offs[i].ip = ips[i];
> diff --git a/lib/buildid.c b/lib/buildid.c
> index e8d5feb7ef20..dbe1b7e247f3 100644
> --- a/lib/buildid.c
> +++ b/lib/buildid.c
> @@ -12,6 +12,7 @@
>   */
>  static inline int parse_build_id(void *page_addr,
>  				 unsigned char *build_id,
> +				 __u32 *size,
>  				 void *note_start,
>  				 Elf32_Word note_size)
>  {
> @@ -38,6 +39,8 @@ static inline int parse_build_id(void *page_addr,
>  			       nhdr->n_descsz);
>  			memset(build_id + nhdr->n_descsz, 0,
>  			       BUILD_ID_SIZE - nhdr->n_descsz);
> +			if (size)
> +				*size = nhdr->n_descsz;
>  			return 0;
>  		}
>  		new_offs = note_offs + sizeof(Elf32_Nhdr) +
> @@ -50,7 +53,8 @@ static inline int parse_build_id(void *page_addr,
>  }
>  
>  /* Parse build ID from 32-bit ELF */
> -static int get_build_id_32(void *page_addr, unsigned char *build_id)
> +static int get_build_id_32(void *page_addr, unsigned char *build_id,
> +			   __u32 *size)
>  {
>  	Elf32_Ehdr *ehdr = (Elf32_Ehdr *)page_addr;
>  	Elf32_Phdr *phdr;
> @@ -65,7 +69,7 @@ static int get_build_id_32(void *page_addr, unsigned char *build_id)
>  
>  	for (i = 0; i < ehdr->e_phnum; ++i) {
>  		if (phdr[i].p_type == PT_NOTE &&
> -		    !parse_build_id(page_addr, build_id,
> +		    !parse_build_id(page_addr, build_id, size,
>  				    page_addr + phdr[i].p_offset,
>  				    phdr[i].p_filesz))
>  			return 0;
> @@ -74,7 +78,8 @@ static int get_build_id_32(void *page_addr, unsigned char *build_id)
>  }
>  
>  /* Parse build ID from 64-bit ELF */
> -static int get_build_id_64(void *page_addr, unsigned char *build_id)
> +static int get_build_id_64(void *page_addr, unsigned char *build_id,
> +			   __u32 *size)
>  {
>  	Elf64_Ehdr *ehdr = (Elf64_Ehdr *)page_addr;
>  	Elf64_Phdr *phdr;
> @@ -89,7 +94,7 @@ static int get_build_id_64(void *page_addr, unsigned char *build_id)
>  
>  	for (i = 0; i < ehdr->e_phnum; ++i) {
>  		if (phdr[i].p_type == PT_NOTE &&
> -		    !parse_build_id(page_addr, build_id,
> +		    !parse_build_id(page_addr, build_id, size,
>  				    page_addr + phdr[i].p_offset,
>  				    phdr[i].p_filesz))
>  			return 0;
> @@ -97,8 +102,16 @@ static int get_build_id_64(void *page_addr, unsigned char *build_id)
>  	return -EINVAL;
>  }
>  
> -/* Parse build ID of ELF file mapped to vma */
> -int build_id_parse(struct vm_area_struct *vma, unsigned char *build_id)
> +/*
> + * Parse build ID of ELF file mapped to vma
> + * @vma:      vma object
> + * @build_id: buffer to store build id, at least BUILD_ID_SIZE long
> + * @size:     returns actual build id size in case of success
> + *
> + * Returns 0 on success, otherwise error (< 0).
> + */
> +int build_id_parse(struct vm_area_struct *vma, unsigned char *build_id,
> +		   __u32 *size)
>  {
>  	Elf32_Ehdr *ehdr;
>  	struct page *page;
> @@ -126,9 +139,9 @@ int build_id_parse(struct vm_area_struct *vma, unsigned char *build_id)
>  		goto out;
>  
>  	if (ehdr->e_ident[EI_CLASS] == ELFCLASS32)
> -		ret = get_build_id_32(page_addr, build_id);
> +		ret = get_build_id_32(page_addr, build_id, size);
>  	else if (ehdr->e_ident[EI_CLASS] == ELFCLASS64)
> -		ret = get_build_id_64(page_addr, build_id);
> +		ret = get_build_id_64(page_addr, build_id, size);
>  out:
>  	kunmap_atomic(page_addr);
>  	put_page(page);
> -- 
> 2.26.2
> 


  reply	other threads:[~2020-12-03 19:26 UTC|newest]

Thread overview: 48+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-11-26 17:00 [PATCHv4 00/25] perf: Add mmap2 build id support Jiri Olsa
2020-11-26 17:00 ` [PATCH 01/25] bpf: Move stack_map_get_build_id into lib Jiri Olsa
2020-11-26 17:00 ` [PATCH 02/25] bpf: Add size arg to build_id_parse function Jiri Olsa
2020-12-03 19:24   ` Jiri Olsa [this message]
2020-12-03 21:23   ` Song Liu
2020-12-04 23:30     ` Jiri Olsa
2020-11-26 17:00 ` [PATCH 03/25] perf: Add build id data in mmap2 event Jiri Olsa
2020-11-26 17:00 ` [PATCH 04/25] tools headers uapi: Sync tools/include/uapi/linux/perf_event.h Jiri Olsa
2020-11-26 17:00 ` [PATCH 05/25] tools lib: Adopt memchr_inv() from kernel Jiri Olsa
2020-11-26 17:42   ` Arnaldo Carvalho de Melo
2020-11-26 17:00 ` [PATCH 06/25] perf tools: Do not swap mmap2 fields in case it contains build id Jiri Olsa
2020-11-26 17:30   ` Arnaldo Carvalho de Melo
2020-11-27 19:46     ` Jiri Olsa
2020-11-26 17:00 ` [PATCH 07/25] perf tools: Add build_id__is_defined function Jiri Olsa
2020-11-26 17:43   ` Arnaldo Carvalho de Melo
2020-11-26 17:00 ` [PATCH 08/25] perf tools: Add filename__decompress function Jiri Olsa
2020-11-26 17:44   ` Arnaldo Carvalho de Melo
2020-11-26 17:00 ` [PATCH 09/25] perf tools: Add support to read build id from compressed elf Jiri Olsa
2020-11-26 17:46   ` Arnaldo Carvalho de Melo
2020-11-27 19:45     ` Jiri Olsa
2020-11-26 17:00 ` [PATCH 10/25] perf tools: Add check for existing link in buildid dir Jiri Olsa
2020-11-26 17:47   ` Arnaldo Carvalho de Melo
2020-11-26 17:00 ` [PATCH 11/25] perf tools: Use struct extra_kernel_map in machine__process_kernel_mmap_event Jiri Olsa
2020-11-26 17:48   ` Arnaldo Carvalho de Melo
2020-11-26 17:00 ` [PATCH 12/25] perf tools: Try to load vmlinux from buildid database Jiri Olsa
2020-11-26 17:50   ` Arnaldo Carvalho de Melo
2020-11-26 17:00 ` [PATCH 13/25] perf tools: Store build id from mmap2 events Jiri Olsa
2020-11-26 17:00 ` [PATCH 14/25] perf tools: Allow mmap2 event to synthesize kernel image Jiri Olsa
2020-11-26 17:00 ` [PATCH 15/25] perf tools: Allow mmap2 event to synthesize modules Jiri Olsa
2020-11-26 17:00 ` [PATCH 16/25] perf tools: Synthesize build id for kernel/modules/tasks Jiri Olsa
2020-11-26 17:00 ` [PATCH 17/25] perf tools: Add support to display build id for mmap2 events Jiri Olsa
2020-11-26 17:00 ` [PATCH 18/25] perf tools: Use machine__for_each_dso in perf_session__cache_build_ids Jiri Olsa
2020-11-26 17:52   ` Arnaldo Carvalho de Melo
2020-11-26 17:00 ` [PATCH 19/25] perf tools: Add __perf_session__cache_build_ids function Jiri Olsa
2020-11-26 17:53   ` Arnaldo Carvalho de Melo
2020-11-26 17:00 ` [PATCH 20/25] perf tools: Add is_perf_data function Jiri Olsa
2020-11-26 17:51   ` Arnaldo Carvalho de Melo
2020-11-26 17:00 ` [PATCH 21/25] perf tools: Add build_id_cache__add function Jiri Olsa
2020-11-26 17:53   ` Arnaldo Carvalho de Melo
2020-11-26 17:00 ` [PATCH 22/25] perf buildid-cache: Add support to add build ids from perf data Jiri Olsa
2020-11-26 17:57   ` Arnaldo Carvalho de Melo
2020-11-27 19:49     ` Jiri Olsa
2020-11-26 17:00 ` [PATCH 23/25] perf buildid-cache: Add --debuginfod option Jiri Olsa
2020-11-26 17:00 ` [PATCH 24/25] perf buildid-list: Add support for mmap2's buildid events Jiri Olsa
2020-11-26 17:00 ` [PATCH 25/25] perf record: Add --buildid-mmap option to enable mmap's build id Jiri Olsa
2020-11-26 17:40   ` Arnaldo Carvalho de Melo
2020-11-27  4:41 ` [PATCHv4 00/25] perf: Add mmap2 build id support Namhyung Kim
  -- strict thread matches above, loose matches on Subject: below --
2020-11-23 23:04 [PATCHv3 " Jiri Olsa
2020-11-23 23:04 ` [PATCH 02/25] bpf: Add size arg to build_id_parse function Jiri Olsa

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=20201203192438.GA3613628@krava \
    --to=jolsa@redhat.com \
    --cc=a.p.zijlstra@chello.nl \
    --cc=acme@kernel.org \
    --cc=adrian.hunter@intel.com \
    --cc=ak@linux.intel.com \
    --cc=alexander.shishkin@linux.intel.com \
    --cc=alexey.budankov@linux.intel.com \
    --cc=ast@kernel.org \
    --cc=eranian@google.com \
    --cc=irogers@google.com \
    --cc=jolsa@kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mark.rutland@arm.com \
    --cc=mingo@kernel.org \
    --cc=mpetlan@redhat.com \
    --cc=namhyung@kernel.org \
    --cc=songliubraving@fb.com \
    /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.