All of lore.kernel.org
 help / color / mirror / Atom feed
From: Arnaldo Carvalho de Melo <acme@kernel.org>
To: Jiri Olsa <jolsa@kernel.org>
Cc: Alexei Starovoitov <ast@kernel.org>,
	Daniel Borkmann <daniel@iogearbox.net>,
	Andrii Nakryiko <andriin@fb.com>,
	dwarves@vger.kernel.org, netdev@vger.kernel.org,
	bpf@vger.kernel.org, Yonghong Song <yhs@fb.com>,
	Hao Luo <haoluo@google.com>, Martin KaFai Lau <kafai@fb.com>,
	Song Liu <songliubraving@fb.com>,
	John Fastabend <john.fastabend@gmail.com>,
	KP Singh <kpsingh@chromium.org>,
	Joe Lawrence <joe.lawrence@redhat.com>,
	Mark Wielaard <mjw@redhat.com>
Subject: Re: [PATCH 1/2] elf_symtab: Add support for SHN_XINDEX index to elf_section_by_name
Date: Fri, 22 Jan 2021 16:45:59 -0300	[thread overview]
Message-ID: <20210122194559.GA617095@kernel.org> (raw)
In-Reply-To: <20210122163920.59177-2-jolsa@kernel.org>

Em Fri, Jan 22, 2021 at 05:39:19PM +0100, Jiri Olsa escreveu:
> In case the elf's header e_shstrndx contains SHN_XINDEX,
> we need to call elf_getshdrstrndx to get the proper
> string table index.

Applied, but changed the changelog comment to:

------------------------------------------------------------------
elf_symtab: Handle SHN_XINDEX index in elf_section_by_name()

Use elf_getshdrstrndx() to cover the case where the ELF header
'e_shstrndx' field contains the special value SHN_XINDEX so that we get
the proper string table index.

This is necessary to handle files with over 65536 sections, such as when
building the kernel with -f[function|data]-sections.  Other cases may
include when using FG-ASLR, LTO.

With so many sections, ELF is using extended section index table, which
is used to hold values for some of the indexes and extra code is needed
to retrieve them.
------------------------------------------------------------------

This is from the thread, so that we can have a more comprehensive idea
of what is this SHN_XINDEX and where it can show up when looking at this
code 10 years from now (or next month) :-)

Holler if I've messed up something.

Thanks,

- Arnaldo
 
> Signed-off-by: Jiri Olsa <jolsa@kernel.org>
> ---
>  dutil.c | 8 +++++++-
>  1 file changed, 7 insertions(+), 1 deletion(-)
> 
> diff --git a/dutil.c b/dutil.c
> index 7b667647420f..11fb7202049c 100644
> --- a/dutil.c
> +++ b/dutil.c
> @@ -179,12 +179,18 @@ Elf_Scn *elf_section_by_name(Elf *elf, GElf_Ehdr *ep,
>  {
>  	Elf_Scn *sec = NULL;
>  	size_t cnt = 1;
> +	size_t str_idx;
> +
> +	if (elf_getshdrstrndx(elf, &str_idx))
> +		return NULL;
>  
>  	while ((sec = elf_nextscn(elf, sec)) != NULL) {
>  		char *str;
>  
>  		gelf_getshdr(sec, shp);
> -		str = elf_strptr(elf, ep->e_shstrndx, shp->sh_name);
> +		str = elf_strptr(elf, str_idx, shp->sh_name);
> +		if (!str)
> +			return NULL;
>  		if (!strcmp(name, str)) {
>  			if (index)
>  				*index = cnt;
> -- 
> 2.26.2
> 

-- 

- Arnaldo

  reply	other threads:[~2021-01-22 22:39 UTC|newest]

Thread overview: 14+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-01-22 16:39 [PATCHv3 0/2] libbpf: Add support to use optional extended section index table Jiri Olsa
2021-01-22 16:39 ` [PATCH 1/2] elf_symtab: Add support for SHN_XINDEX index to elf_section_by_name Jiri Olsa
2021-01-22 19:45   ` Arnaldo Carvalho de Melo [this message]
2021-01-22 20:05   ` Andrii Nakryiko
2021-01-22 16:39 ` [PATCH 2/2] bpf_encoder: Translate SHN_XINDEX in symbol's st_shndx values Jiri Olsa
2021-01-22 19:52   ` Arnaldo Carvalho de Melo
2021-01-22 20:24     ` Jiri Olsa
2021-01-22 20:33       ` Arnaldo Carvalho de Melo
2021-01-25 16:16     ` Joe Lawrence
2021-01-22 20:16   ` Andrii Nakryiko
2021-01-22 20:37     ` Jiri Olsa
2021-01-25 17:37       ` Arnaldo Carvalho de Melo
2021-01-25 17:38         ` Arnaldo Carvalho de Melo
  -- strict thread matches above, loose matches on Subject: below --
2021-01-24 22:15 [PATCHv4 0/2] libbpf: Add support to use optional extended section index table Jiri Olsa
2021-01-24 22:15 ` [PATCH 1/2] elf_symtab: Add support for SHN_XINDEX index to elf_section_by_name 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=20210122194559.GA617095@kernel.org \
    --to=acme@kernel.org \
    --cc=andriin@fb.com \
    --cc=ast@kernel.org \
    --cc=bpf@vger.kernel.org \
    --cc=daniel@iogearbox.net \
    --cc=dwarves@vger.kernel.org \
    --cc=haoluo@google.com \
    --cc=joe.lawrence@redhat.com \
    --cc=john.fastabend@gmail.com \
    --cc=jolsa@kernel.org \
    --cc=kafai@fb.com \
    --cc=kpsingh@chromium.org \
    --cc=mjw@redhat.com \
    --cc=netdev@vger.kernel.org \
    --cc=songliubraving@fb.com \
    --cc=yhs@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.