From: Arnaldo Carvalho de Melo <acme@kernel.org>
To: Alan Maguire <alan.maguire@oracle.com>
Cc: yhs@fb.com, ast@kernel.org, olsajiri@gmail.com,
eddyz87@gmail.com, sinquersw@gmail.com, timo@incline.eu,
daniel@iogearbox.net, andrii@kernel.org, songliubraving@fb.com,
john.fastabend@gmail.com, kpsingh@chromium.org, sdf@google.com,
haoluo@google.com, martin.lau@kernel.org, bpf@vger.kernel.org
Subject: Re: [PATCH v2 dwarves 1/5] dwarves: help dwarf loader spot functions with optimized-out parameters
Date: Mon, 30 Jan 2023 17:23:29 -0300 [thread overview]
Message-ID: <Y9gnQSUvJQ6WRx8y@kernel.org> (raw)
In-Reply-To: <Y9gkS6dcXO4HWovW@kernel.org>
Em Mon, Jan 30, 2023 at 05:10:51PM -0300, Arnaldo Carvalho de Melo escreveu:
> Em Mon, Jan 30, 2023 at 03:36:09PM -0300, Arnaldo Carvalho de Melo escreveu:
> > > +#define NR_REGISTER_PARAMS 8
> > > +#elif defined(__arc__)
> > > +#define NR_REGISTER_PARAMS 8
> > > +#else
> > > +#define NR_REGISTER_PARAMS 0
> > > +#endif
> >
> > This should be done as a function, something like:
> >
> > int cu__nr_register_params(struct cu *cu)
> > {
> > GElf_Ehdr ehdr;
> >
> > gelf_getehdr(cu->elf, &ehdr);
> >
> > switch (ehdr.machine) {
> > ...
> >
> > }
> >
> > I'm coding that now, will send the diff shortly.
> >
> > This is to support cross-builds.
>
> I made this change to this patch, please check.
And added this to that cset:
Committer notes:
Changed the NR_REGISTER_PARAMS definition from a if/elif/endif for the
native architecture into a function that uses the ELF header e_machine
to find the target architecture, to allow for cross builds.
---
- Arnaldo
> diff --git a/dwarf_loader.c b/dwarf_loader.c
> index 752a3c1afc4494f2..81963e71715c8435 100644
> --- a/dwarf_loader.c
> +++ b/dwarf_loader.c
> @@ -994,29 +994,29 @@ static struct class_member *class_member__new(Dwarf_Die *die, struct cu *cu,
>
> /* How many function parameters are passed via registers? Used below in
> * determining if an argument has been optimized out or if it is simply
> - * an argument > NR_REGISTER_PARAMS. Setting NR_REGISTER_PARAMS to 0
> - * allows unsupported architectures to skip tagging optimized-out
> + * an argument > cu__nr_register_params(). Making cu__nr_register_params()
> + * return 0 allows unsupported architectures to skip tagging optimized-out
> * values.
> */
> -#if defined(__x86_64__)
> -#define NR_REGISTER_PARAMS 6
> -#elif defined(__s390__)
> -#define NR_REGISTER_PARAMS 5
> -#elif defined(__aarch64__)
> -#define NR_REGISTER_PARAMS 8
> -#elif defined(__mips__)
> -#define NR_REGISTER_PARAMS 8
> -#elif defined(__powerpc__)
> -#define NR_REGISTER_PARAMS 8
> -#elif defined(__sparc__)
> -#define NR_REGISTER_PARAMS 6
> -#elif defined(__riscv) && __riscv_xlen == 64
> -#define NR_REGISTER_PARAMS 8
> -#elif defined(__arc__)
> -#define NR_REGISTER_PARAMS 8
> -#else
> -#define NR_REGISTER_PARAMS 0
> -#endif
> +static int arch__nr_register_params(const GElf_Ehdr *ehdr)
> +{
> + switch (ehdr->e_machine) {
> + case EM_S390: return 5;
> + case EM_SPARC:
> + case EM_SPARCV9:
> + case EM_X86_64: return 6;
> + case EM_AARCH64:
> + case EM_ARC:
> + case EM_ARM:
> + case EM_MIPS:
> + case EM_PPC:
> + case EM_PPC64:
> + case EM_RISCV: return 8;
> + default: break;
> + }
> +
> + return 0;
> +}
>
> static struct parameter *parameter__new(Dwarf_Die *die, struct cu *cu,
> struct conf_load *conf, int param_idx)
> @@ -1031,7 +1031,7 @@ static struct parameter *parameter__new(Dwarf_Die *die, struct cu *cu,
> tag__init(&parm->tag, cu, die);
> parm->name = attr_string(die, DW_AT_name, conf);
>
> - if (param_idx >= NR_REGISTER_PARAMS)
> + if (param_idx >= cu->nr_register_params)
> return parm;
> /* Parameters which use DW_AT_abstract_origin to point at
> * the original parameter definition (with no name in the DIE)
> @@ -2870,6 +2870,7 @@ static int cu__set_common(struct cu *cu, struct conf_load *conf,
> return DWARF_CB_ABORT;
>
> cu->little_endian = ehdr.e_ident[EI_DATA] == ELFDATA2LSB;
> + cu->nr_register_params = arch__nr_register_params(&ehdr);
> return 0;
> }
>
> diff --git a/dwarves.h b/dwarves.h
> index fd1ca3ae9f4ab531..ddf56f0124e0ec03 100644
> --- a/dwarves.h
> +++ b/dwarves.h
> @@ -262,6 +262,7 @@ struct cu {
> uint8_t has_addr_info:1;
> uint8_t uses_global_strings:1;
> uint8_t little_endian:1;
> + uint8_t nr_register_params;
> uint16_t language;
> unsigned long nr_inline_expansions;
> size_t size_inline_expansions;
--
- Arnaldo
next prev parent reply other threads:[~2023-01-30 20:23 UTC|newest]
Thread overview: 40+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-01-30 14:29 [PATCH v2 dwarves 0/5] dwarves: support encoding of optimized-out parameters, removal of inconsistent static functions Alan Maguire
2023-01-30 14:29 ` [PATCH v2 dwarves 1/5] dwarves: help dwarf loader spot functions with optimized-out parameters Alan Maguire
2023-01-30 18:36 ` Arnaldo Carvalho de Melo
2023-01-30 20:10 ` Arnaldo Carvalho de Melo
2023-01-30 20:23 ` Arnaldo Carvalho de Melo [this message]
2023-01-30 22:37 ` Alan Maguire
2023-01-31 0:25 ` Arnaldo Carvalho de Melo
2023-01-31 1:04 ` Arnaldo Carvalho de Melo
2023-01-31 12:14 ` Alan Maguire
2023-01-31 12:33 ` Arnaldo Carvalho de Melo
2023-01-31 13:35 ` Jiri Olsa
2023-01-31 17:43 ` Alexei Starovoitov
2023-01-31 18:16 ` Alexei Starovoitov
2023-01-31 23:45 ` Alan Maguire
2023-01-31 23:58 ` David Vernet
2023-02-01 0:14 ` Alexei Starovoitov
2023-02-01 3:02 ` David Vernet
2023-02-01 13:59 ` Alan Maguire
2023-02-01 15:02 ` Arnaldo Carvalho de Melo
2023-02-01 15:13 ` Alan Maguire
2023-02-01 15:19 ` David Vernet
2023-02-01 16:49 ` Alexei Starovoitov
2023-02-01 17:01 ` Arnaldo Carvalho de Melo
2023-02-01 17:18 ` Alan Maguire
2023-02-01 18:54 ` Arnaldo Carvalho de Melo
2023-02-01 22:33 ` Alan Maguire
2023-02-01 22:32 ` Arnaldo Carvalho de Melo
2023-02-02 1:09 ` Arnaldo Carvalho de Melo
2023-02-03 1:09 ` Yonghong Song
2023-01-30 14:29 ` [PATCH v2 dwarves 2/5] btf_encoder: refactor function addition into dedicated btf_encoder__add_func Alan Maguire
2023-02-01 17:19 ` Arnaldo Carvalho de Melo
2023-02-01 17:50 ` Alan Maguire
2023-02-01 18:59 ` Arnaldo Carvalho de Melo
2023-01-30 14:29 ` [PATCH v2 dwarves 3/5] btf_encoder: rework btf_encoders__*() API to allow traversal of encoders Alan Maguire
2023-01-30 22:04 ` Jiri Olsa
2023-01-31 0:24 ` Arnaldo Carvalho de Melo
2023-01-30 14:29 ` [PATCH v2 dwarves 4/5] btf_encoder: represent "."-suffixed functions (".isra.0") in BTF Alan Maguire
2023-01-30 14:29 ` [PATCH v2 dwarves 5/5] btf_encoder: delay function addition to check for function prototype inconsistencies Alan Maguire
2023-01-30 17:20 ` Alexei Starovoitov
2023-01-30 18:08 ` Arnaldo Carvalho de Melo
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=Y9gnQSUvJQ6WRx8y@kernel.org \
--to=acme@kernel.org \
--cc=alan.maguire@oracle.com \
--cc=andrii@kernel.org \
--cc=ast@kernel.org \
--cc=bpf@vger.kernel.org \
--cc=daniel@iogearbox.net \
--cc=eddyz87@gmail.com \
--cc=haoluo@google.com \
--cc=john.fastabend@gmail.com \
--cc=kpsingh@chromium.org \
--cc=martin.lau@kernel.org \
--cc=olsajiri@gmail.com \
--cc=sdf@google.com \
--cc=sinquersw@gmail.com \
--cc=songliubraving@fb.com \
--cc=timo@incline.eu \
--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.