From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail-pl1-f176.google.com (mail-pl1-f176.google.com [209.85.214.176]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id B9D8D2459C9 for ; Fri, 6 Feb 2026 05:00:57 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=pass smtp.client-ip=209.85.214.176 ARC-Seal:i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1770354057; cv=pass; b=CFmJacID4ZlkNIidHjstVz7CKJBSo7twOuBD6pSp0WULAy3abvat8Q8KmYCuoXQ7uxB3E0Atr9XLSHOjGjjreUzCprNCLr0DRC15l3tzqGWumxqsqdG92lM6q/q9Rea1/XiJ/TbFL4wyEhAfWXiNij+wlEYeFhBanxDtRcNVqbU= ARC-Message-Signature:i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1770354057; c=relaxed/simple; bh=8qnqepGyoMFsYnQ8mw1Wk6JuUtP2ANo3I+pbtv9t9OU=; h=MIME-Version:References:In-Reply-To:From:Date:Message-ID:Subject: To:Cc:Content-Type; b=oer5BWXGW3qEtqYC+Iarj5c7cmNH47dNgsAFvEQn+AN+3fwyOJGFzroJW34PmHB4aewOH4lqUWK25RRTP3vuZE/DYNb3c0PYzKVgl/iMdNFx7xIjNTlqZRvZQWZk2KJHJ1Zpci8hQbz2UEiOjtvPdA2BKduAzP+kj8Q1iqpE6C8= ARC-Authentication-Results:i=2; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=EkwGkTtu; arc=pass smtp.client-ip=209.85.214.176 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="EkwGkTtu" Received: by mail-pl1-f176.google.com with SMTP id d9443c01a7336-2a885af8ee7so30685ad.1 for ; Thu, 05 Feb 2026 21:00:57 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1770354057; cv=none; d=google.com; s=arc-20240605; b=CY/UhYtf6NSIAK/caLqO8qX70hpc7DI+4A1M2wYPnliJ0tGYA0H58SsoyK6bE8P3mW HKMQZGxgeXTWo2mBY2Jql8emPMXQ3sonPIoENxEvH8ZU3FyIRx7X3OTmNFh1phm8Jd55 muApdH+zbFT6++Q6GUUd7D8wbKtRK8fAIkhgSqRAd7cSw7bVD2Z9nmHHrSIOBUCOwdYa ZQAbBbtbj0OJXtr3Y/mYjzYwhrn4anHuya1XXdSKc/bgxBcq++4x6jbKTggts7IEa2ji lWlk3+wxufkwq//9itUs421pwPyCZidTrm/5XU64pdVoE/W6KxB/LsvAoplmUsncO2Vb 9Qdw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20240605; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:dkim-signature; bh=jLLeTvQ9a0+cEvpGQZPATnbYzCCv2L22rr9TC7pVu+c=; fh=i/idp8TWXkvS581g3Z6FhCc+S63Nz4V0UGC25sO8OFs=; b=c0fEiLLLHGygcHBnR4U3mT6MJAurJXJYniuifTVO64iZmvAHWoi91htEe4O+Sk2Bsl jQ/1IB4uosePYXdtiHO61yug7wNIP+dlFU27RDPxcbfraM0J2SJ6U8UA1jAoxj2OSyEe 9DkjU1TDfsHkEtyWYYx1F+Tbvt6n+OdaFuf5jXeFjOLLULTzlxDT4JrbToPlhtSgCLbg /X8UaRuiowLzdMjd5zJaZGalmPu04m23O7yJSEQOI95cJwmMV7sY4ezOGrrt+GcSQxxc 0T3Rk7nNUBQodTyBVEfc7wop5O/9zOlPP2q+9fVR+zWvih1Y0Rt/PPU4XiaZlyOQm7FC /29w==; darn=vger.kernel.org ARC-Authentication-Results: i=1; mx.google.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1770354057; x=1770958857; darn=vger.kernel.org; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:from:to:cc:subject:date :message-id:reply-to; bh=jLLeTvQ9a0+cEvpGQZPATnbYzCCv2L22rr9TC7pVu+c=; b=EkwGkTtuyeKC6oTBRZJpG5Q2nDVm5Br+HscM8PekkXDAI+un8e3DzDYZplbUMoUT6i AH76EoAeT+q1NSqumAgeAaOdcszbv79Z70s18SmMz14SDeX8Ai/1CPC6zkIxfTTLD53y MU3n2iWU5ayRyz2t2DNYkuMN1xu+5MFG6nqljUCG32kmmTyNMmvPdcJEy/7pb3htQOJc J42ITs66873cKiw8M1gxfksVxzsSRgiadSAZUZz1/SSdi03x+Fqi622LWyMxmG2h6rRU u5xghdhSuNY9W+lLmKF3j8ilJm3n03+Ikq4j51wHJ76ufUaiVdFlks2kFS8KRDhY+9xD aQXA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1770354057; x=1770958857; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=jLLeTvQ9a0+cEvpGQZPATnbYzCCv2L22rr9TC7pVu+c=; b=wLJyZpCHgbAHMKSyy5Uu9+L28rIfcqmPMNyvSHRHMYnBpPh4fwwKP1j6mbnntAIiVv QMDlxrwHtLJSmzs+C5uN/TRfj2E1Q5CJr9eNXWEH4ya0DNM828QqViem3fC6aeMOKZ3x QuKZRQxLV4Jn8b34Ld7+rmp6Lh8n+q3KxsHhxlAUNZowg6Vh/RCDj0V8byqyVOPLqmj2 r0psMOz/8eBLUvMJb1nLuJKkI5gcNhnfRNKe6Yha6xbAJ8jU/fRtLC3kHTNyp1t9swkd dkxo4AAaLDMa5whLftHl/AvXL6jtXwBkuvCjqQfcF2G9SHGpZ0q/9q3ln5zO6bU6AzBS LgtA== X-Forwarded-Encrypted: i=1; AJvYcCWKqBo1lPhnY03oQJX6uS/t+kBXPmhscSxR2UYmHjMpyKwke3ydWjQThlOlW6MnUmMa1EIXmDeqIlRVjP8=@vger.kernel.org X-Gm-Message-State: AOJu0YwL2umMx2SrFZG4varmoa/4B+jJ5LKCEv3yn9ADoqDaUJYKvEp3 CBLvlgovC2s9qHWjg0wW+W0539vldggPsY5KLSERO4qvIkt6FiXiaMPJNyjc7q1mvHCRtb/BQiz Q15Gp3NQBVNUbGNkUTWaIEruxkOYt7WfBqAEbUV/N X-Gm-Gg: AZuq6aKjH/9EXfpBI+6Cz8BEoqlgBZjJ/jSH/Z+sF4VlbnhERIRwAqmJamFHXeRLE1b bsjxWPsuosogUZt07o+LaE7AY9AaUuePqrQxwnhM/1ArmYP/scyWiniCZWcGNgUe1r/2LwR9Dn3 cmwE6i6oSucpGruRzo04y1zqeyp5GwI2LDJU4R6+Z3RiswkCZ9r7cEkkQBi94DbcAG4t/eMohq+ 6KBqdKYxgcgM1Tn4OIBig8Xx6Jw4BB+60rgtvWr9kulWsaL4+OPKUEWTiP+zxG8bE+qUAic X-Received: by 2002:a17:902:ceca:b0:2a8:ffed:4663 with SMTP id d9443c01a7336-2a95232ae6fmr1885525ad.12.1770354056609; Thu, 05 Feb 2026 21:00:56 -0800 (PST) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 References: <20260206012743.2617945-1-namhyung@kernel.org> In-Reply-To: <20260206012743.2617945-1-namhyung@kernel.org> From: Ian Rogers Date: Thu, 5 Feb 2026 21:00:43 -0800 X-Gm-Features: AZwV_QgxQWm7zp32HEOVOrRN6gviWXpN8VSMx2Upu3rIXV51wtlMou8scN4LxgE Message-ID: Subject: Re: [PATCH] perf annotate: Fix register usage in data type profiling To: Namhyung Kim Cc: Arnaldo Carvalho de Melo , James Clark , Jiri Olsa , Adrian Hunter , Peter Zijlstra , Ingo Molnar , LKML , linux-perf-users@vger.kernel.org, Zecheng Li , Dmitry Dolgov <9erthalion6@gmail.com> Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Thu, Feb 5, 2026 at 5:27=E2=80=AFPM Namhyung Kim w= rote: > > On data type profiling, it tried to match register name with a partial > string. For example, it allowed to match with "%rbp)" or "%rdi,8)". > But with recent change in the area, it doesn't match anymore and break > the data type profiling. Hmm.. the blamed patch was a strcmp before and after, so maybe something nearby changed causing this: https://web.git.kernel.org/pub/scm/linux/kernel/git/perf/perf-tools-next.gi= t/commit/?h=3Dperf-tools-next&id=3Dc31040085914f1188720073baa43d1483693c0a3 ``` - for (i =3D 0; i < ARRAY_SIZE(x86_regidx_table); i++) - if (!strcmp(x86_regidx_table[i].name, name + 1)) - return x86_regidx_table[i].idx; + name++; + for (size_t i =3D 0; i < num_entries; i++) { + if (!strcmp(entries[i].name, name)) + return entries[i].dwarf_regnum; ``` > Let's pass the correct register name by removing the unwanted part. Add > arch__dwarf_regnum() to handle it in a single place. > > Reported-by: Dmitry Dolgov <9erthalion6@gmail.com> > Closes: 7d3n23li6drroxrdlpxn7ixehdeszkjdftah3zyngjl2qs22ef@yelcjv53v42o > Signed-off-by: Namhyung Kim > --- > tools/perf/util/annotate.c | 61 +++++++++++++++++++------------------- > 1 file changed, 30 insertions(+), 31 deletions(-) > > diff --git a/tools/perf/util/annotate.c b/tools/perf/util/annotate.c > index 880b1bd300c21e67..2e3522905046c1ec 100644 > --- a/tools/perf/util/annotate.c > +++ b/tools/perf/util/annotate.c > @@ -2447,6 +2447,29 @@ int annotate_check_args(void) > return 0; > } > > +static int arch__dwarf_regnum(const struct arch *arch, const char *str) > +{ > + const char *p; > + char *regname, *q; > + int reg; > + > + p =3D strchr(str, arch->objdump.register_char); > + if (p =3D=3D NULL) > + return -1; > + > + regname =3D strdup(p); nit: Given register names are known to be so short it feels a shame to do a full strdup for this. > + if (regname =3D=3D NULL) > + return -1; > + > + q =3D strpbrk(regname, ",) "); > + if (q) > + *q =3D '\0'; > + > + reg =3D get_dwarf_regnum(regname, arch->id.e_machine, arch->id.e_= flags); nit: Perhaps pass a regname_len to avoid the strdup. Reviewed-by: Ian Rogers It'd be nice to have a test on this to avoid a regression. Dmitrii's patch: https://lore.kernel.org/linux-perf-users/20260127083030.5909-1-9erthalion6@= gmail.com/ does that for a Rust struct Buf, but it'd be nice to do something similar f= or C. Thanks, Ian > + free(regname); > + return reg; > +} > + > /* > * Get register number and access offset from the given instruction. > * It assumes AT&T x86 asm format like OFFSET(REG). Maybe it needs > @@ -2457,7 +2480,6 @@ static int extract_reg_offset(const struct arch *ar= ch, const char *str, > struct annotated_op_loc *op_loc) > { > char *p; > - char *regname; > > if (arch->objdump.register_char =3D=3D 0) > return -1; > @@ -2482,31 +2504,14 @@ static int extract_reg_offset(const struct arch *= arch, const char *str, > } > > op_loc->offset =3D strtol(str, &p, 0); > - > - p =3D strchr(p, arch->objdump.register_char); > - if (p =3D=3D NULL) > + op_loc->reg1 =3D arch__dwarf_regnum(arch, p); > + if (op_loc->reg1 =3D=3D -1) > return -1; > > - regname =3D strdup(p); > - if (regname =3D=3D NULL) > - return -1; > - > - op_loc->reg1 =3D get_dwarf_regnum(regname, arch->id.e_machine, ar= ch->id.e_flags); > - free(regname); > - > /* Get the second register */ > - if (op_loc->multi_regs) { > - p =3D strchr(p + 1, arch->objdump.register_char); > - if (p =3D=3D NULL) > - return -1; > - > - regname =3D strdup(p); > - if (regname =3D=3D NULL) > - return -1; > + if (op_loc->multi_regs) > + op_loc->reg2 =3D arch__dwarf_regnum(arch, p + 1); > > - op_loc->reg2 =3D get_dwarf_regnum(regname, arch->id.e_mac= hine, arch->id.e_flags); > - free(regname); > - } > return 0; > } > > @@ -2585,7 +2590,8 @@ int annotate_get_insn_location(const struct arch *a= rch, struct disasm_line *dl, > op_loc->multi_regs =3D multi_regs; > extract_reg_offset(arch, insn_str, op_loc); > } else { > - char *s, *p =3D NULL; > + const char *s =3D insn_str; > + char *p =3D NULL; > > if (arch__is_x86(arch)) { > /* FIXME: Handle other segment registers = */ > @@ -2599,21 +2605,14 @@ int annotate_get_insn_location(const struct arch = *arch, struct disasm_line *dl, > } > } > > - s =3D strdup(insn_str); > - if (s =3D=3D NULL) > - return -1; > - > if (*s =3D=3D arch->objdump.register_char) { > - op_loc->reg1 =3D get_dwarf_regnum(s, > - arch->id.= e_machine, > - arch->id.= e_flags); > + op_loc->reg1 =3D arch__dwarf_regnum(arch,= s); > } > else if (*s =3D=3D arch->objdump.imm_char) { > op_loc->offset =3D strtol(s + 1, &p, 0); > if (p && p !=3D s + 1) > op_loc->imm =3D true; > } > - free(s); > } > } > > -- > 2.53.0.rc2.204.g2597b5adb4-goog >