From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 4D24CC636CD for ; Mon, 30 Jan 2023 20:23:38 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229437AbjA3UXh (ORCPT ); Mon, 30 Jan 2023 15:23:37 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:36250 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229476AbjA3UXg (ORCPT ); Mon, 30 Jan 2023 15:23:36 -0500 Received: from ams.source.kernel.org (ams.source.kernel.org [145.40.68.75]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 06BD537F10 for ; Mon, 30 Jan 2023 12:23:35 -0800 (PST) Received: from smtp.kernel.org (relay.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ams.source.kernel.org (Postfix) with ESMTPS id B5AC0B815E9 for ; Mon, 30 Jan 2023 20:23:33 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 4971EC433EF; Mon, 30 Jan 2023 20:23:32 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1675110212; bh=dHOZXO1mZXN14ehqvNT6AU50W9dWKXZTRkOnPJuqSqM=; h=Date:From:To:Cc:Subject:References:In-Reply-To:From; b=Bl+6cytXrb1HtvFqoVbCDd6KQg+IFqbsFPkKELqAj/GRduIZz4diKu5x4TDvoW8Sy TDhFobZKhw/svraARAoeg/OUbVxsLZFL4FOePAmYUtQ5Ac3iwJzhhEwk5dthcyi2Us zxsBlbNMePnK3rOaxMzHaZcr0cqq2ON38Oh/dfHCp3RB7HLJei0FRKGMdGghwSJe20 /ScaYR4iOcSSlYi+rUzuCu/GAhwa/rq0JOMDq4iDYNOLjm+//QzbRWg7EwLbR9SblS njSyDpcUxOfktwtNlYUCKc0BJMo2RBOHZy/bHsmzjXDry5oHZ6HUEKWTu3ZwYFj9+z PqbjnUZ6156pA== Received: by quaco.ghostprotocols.net (Postfix, from userid 1000) id 827EA405BE; Mon, 30 Jan 2023 17:23:29 -0300 (-03) Date: Mon, 30 Jan 2023 17:23:29 -0300 From: Arnaldo Carvalho de Melo To: Alan Maguire 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 Message-ID: References: <1675088985-20300-1-git-send-email-alan.maguire@oracle.com> <1675088985-20300-2-git-send-email-alan.maguire@oracle.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: X-Url: http://acmel.wordpress.com Precedence: bulk List-ID: X-Mailing-List: bpf@vger.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