All of lore.kernel.org
 help / color / mirror / Atom feed
From: Yonghong Song <yonghong.song@linux.dev>
To: Alan Maguire <alan.maguire@oracle.com>,
	Arnaldo Carvalho de Melo <arnaldo.melo@gmail.com>,
	dwarves@vger.kernel.org
Cc: Alexei Starovoitov <ast@kernel.org>,
	Andrii Nakryiko <andrii@kernel.org>,
	bpf@vger.kernel.org, kernel-team@fb.com
Subject: [PATCH dwarves v5 08/11] dwarf_loader: Check whether two-reg parameter actually use two regs or not
Date: Sat, 23 May 2026 09:57:55 -0700	[thread overview]
Message-ID: <20260523165755.1229215-1-yonghong.song@linux.dev> (raw)
In-Reply-To: <20260523165712.1225231-1-yonghong.song@linux.dev>

For a parameter whose type occuplies two registers, for x86_64 and aarch64,
the parameter will actually use two registers. S390 is different
as it allocates on stack and pass a pointer to the function.

Signed-off-by: Yonghong Song <yonghong.song@linux.dev>
---
 dwarf_loader.c | 11 +++++++++++
 dwarves.h      |  1 +
 2 files changed, 12 insertions(+)

diff --git a/dwarf_loader.c b/dwarf_loader.c
index 97f576a..b888783 100644
--- a/dwarf_loader.c
+++ b/dwarf_loader.c
@@ -1100,6 +1100,16 @@ static void arch__set_register_params(const GElf_Ehdr *ehdr, struct cu *cu)
 	}
 }
 
+static bool arch__agg_use_two_regs(const GElf_Ehdr *ehdr)
+{
+	switch (ehdr->e_machine) {
+	case EM_S390:
+		return false;
+	default:
+		return true;
+	}
+}
+
 static struct template_type_param *template_type_param__new(Dwarf_Die *die, struct cu *cu, struct conf_load *conf)
 {
 	struct template_type_param *ttparm = tag__alloc(cu, sizeof(*ttparm));
@@ -3562,6 +3572,7 @@ static int cu__set_common(struct cu *cu, struct conf_load *conf,
 
 	cu->little_endian = ehdr.e_ident[EI_DATA] == ELFDATA2LSB;
 	cu->nr_register_params = arch__nr_register_params(&ehdr);
+	cu->agg_use_two_regs = arch__agg_use_two_regs(&ehdr);
 	arch__set_register_params(&ehdr, cu);
 	return 0;
 }
diff --git a/dwarves.h b/dwarves.h
index b49e651..2d94dff 100644
--- a/dwarves.h
+++ b/dwarves.h
@@ -307,6 +307,7 @@ struct cu {
 	uint8_t		 uses_global_strings:1;
 	uint8_t		 little_endian:1;
 	uint8_t		 producer_clang:1;
+	uint8_t		 agg_use_two_regs:1;	/* An aggregate like {long a; long b;} */
 	uint8_t		 nr_register_params;
 	int		 register_params[ARCH_MAX_REGISTER_PARAMS];
 	int		 functions_saved;
-- 
2.53.0-Meta


  parent reply	other threads:[~2026-05-23 16:58 UTC|newest]

Thread overview: 16+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-05-23 16:57 [PATCH dwarves v5 00/11] pahole: Encode true signatures in kernel BTF Yonghong Song
2026-05-23 16:57 ` [PATCH dwarves v5 01/11] dwarf_loader: Reduce parameter checking with clang DW_AT_calling_convention attr Yonghong Song
2026-06-11  9:15   ` Alan Maguire
2026-05-23 16:57 ` [PATCH dwarves v5 02/11] dwarf_loader: Prescan all parameters with expected registers Yonghong Song
2026-05-23 16:57 ` [PATCH dwarves v5 03/11] dwarf_loader: Handle signatures with dead arguments Yonghong Song
2026-05-23 16:57 ` [PATCH dwarves v5 04/11] dwarf_loader: Refactor initial ret -1 to be macro PARM_DEFAULT_FAIL Yonghong Song
2026-05-23 16:57 ` [PATCH dwarves v5 05/11] dwarf_laoder: Handle locations with DW_OP_fbreg Yonghong Song
2026-05-23 16:57 ` [PATCH dwarves v5 06/11] dwarf_loader: Change exprlen checking condition in parameter__reg() Yonghong Song
2026-05-23 16:57 ` [PATCH dwarves v5 07/11] dwarf_loader: Detect optimized parameters with locations having constant values Yonghong Song
2026-05-23 16:57 ` Yonghong Song [this message]
2026-05-23 16:58 ` [PATCH dwarves v5 09/11] dwarf_loader: Handle expression lists Yonghong Song
2026-05-23 16:58 ` [PATCH dwarves v5 10/11] btf_encoder: Handle optimized parameter properly Yonghong Song
2026-06-11  9:08   ` Alan Maguire
2026-05-23 16:58 ` [PATCH dwarves v5 11/11] tests: Add a few clang true signature tests Yonghong Song
2026-06-15 17:17 ` [PATCH dwarves v5 00/11] pahole: Encode true signatures in kernel BTF Alan Maguire
2026-06-16  4:06   ` Yonghong Song

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=20260523165755.1229215-1-yonghong.song@linux.dev \
    --to=yonghong.song@linux.dev \
    --cc=alan.maguire@oracle.com \
    --cc=andrii@kernel.org \
    --cc=arnaldo.melo@gmail.com \
    --cc=ast@kernel.org \
    --cc=bpf@vger.kernel.org \
    --cc=dwarves@vger.kernel.org \
    --cc=kernel-team@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.