From nobody Tue Feb 10 05:43:46 2026 Received: from mail-yx1-f52.google.com (mail-yx1-f52.google.com [74.125.224.52]) (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 C5EDA2DE6F8 for ; Tue, 27 Jan 2026 02:06:43 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=74.125.224.52 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769479606; cv=none; b=S0TIBZwaG9olx4tvXow1z+VPxNJV0oduuf2OwlJTC8qtiWduUJafaoOXzdQPK+Vk8PNHxg/+mHz3Opu1uqR1j396GvTjzZqOTbJxIXOADXOFjem1VXZd4J+EFBVA3AfgkFuj/BOsXMG3hXNpw3gKllHunwEaRu3dHnb8rLpScf0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769479606; c=relaxed/simple; bh=2GxPZYiJF6xLsgvMaP8XuY6n8Hllxdzw/fL0QUM7ek8=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=rcAR5Q4J/7+/yTuoQ4OZQrqdUeZJB6IneUrN9UBSPHjkkTAdHg183fw5vmp7qtYxk6hSh2S+i9mhKeXigYsO80/p2wfl77gUXNzMs3EcUOeBHOId5pU9SuQor/eUaX3rou/xb8a88WZ1lMXD3Oa5EYyG+Z1wTLsZXJN3KysEbWY= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=ncsu.edu; spf=pass smtp.mailfrom=ncsu.edu; dkim=pass (2048-bit key) header.d=ncsu.edu header.i=@ncsu.edu header.b=U8Ymw189; arc=none smtp.client-ip=74.125.224.52 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=ncsu.edu Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=ncsu.edu Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=ncsu.edu header.i=@ncsu.edu header.b="U8Ymw189" Received: by mail-yx1-f52.google.com with SMTP id 956f58d0204a3-649523df010so4618056d50.0 for ; Mon, 26 Jan 2026 18:06:43 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ncsu.edu; s=google; t=1769479602; x=1770084402; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=0f1gY9r/WleTG9LFphI7gM4RwbmM6PYZcL6EvuwpZSY=; b=U8Ymw189dnZSLuThnvPPhA4l0sfY9TlhX/ICd1AdOzAgGm+iMrSQ7IhK4HFd99Vxek V4g0Q8Uy+2maZAUDGUtscvROOMUNzCpgvpPfhd01jRdqjZ/4hqE6P05Dvdo1G0I5ZkB2 8/V729NVo579w5r0Qr8XzWEaBZsBm1VJZ7bDuspc3I52sJC0R0olr7AthFGcVejXP41E Ijj62aV1+Z5AyBVu0AXpIFBn06bVORges8yAB8njHccocs0p3/5eTA829mrBG4hqxhfe VBX1xDnZzoh/V+cs1tNWeARbf5kNXDBItH5LSYMJpfYA84sBP/cUjO9wZOuTAemFtDrP Mv2w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1769479602; x=1770084402; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=0f1gY9r/WleTG9LFphI7gM4RwbmM6PYZcL6EvuwpZSY=; b=ShFv2WINJa08R/6CfGMPNZ1sOb9RFvz2KpzMfViDsy03A5YwyXN4YtDVPMwrvHUPUa yktZJKu0EiRSWRrDSkq+JidqEe3dQiTrpWmQ+kQzwbR4YEpz+jsGJDs2k3VN/bPJ5yWT xgRCN8kGTIdMYHzxygtpVkgx2N4xUZQqtA3Q3tmxjiQ09WhKJBYcAY3xhIUznHogSecO vdYN4qPsKMxsbzGeo626KIWGD31xDDeFXuq8LBxRCjurz80PNaLme/O4m86RqCy2Snk2 uFmbFiQG/iPgUvNymAuhqevNY/Nrw3zU8Hn/rRpoHnzwouwvZTI4X3m1/rVIkl/VJ3eA NMZg== X-Forwarded-Encrypted: i=1; AJvYcCUoQj+9In+/+EsSfvADG7Da13i6dhZ7YflC0QLeqGvSdkfwoQIevpGeSDmf5oscUyNLEOP91eWkBpwcd6U=@vger.kernel.org X-Gm-Message-State: AOJu0YzrKmQAZmosulUedFasdUu7bzVXu/RtkHpzJYS95FOcooQHt9zV YdGY3KKxM57TXZLgCodapkP0EppZiSlyHbQzo+JNMERX1Jsv64RiuP3qC/Ht7qvHiQ== X-Gm-Gg: AZuq6aLLsEqB+9Xzk1EmYBmTRVHsEy1Q6BzDqYi2UVB+/4EqkWsHm88jcIQCTnQNP8X 9jU1Ze4644tMTMn84D0AC5wQFlD8lxpOdTSfNFsEUc6xE9ENMPFL9lSfx27s+aYv/sj1jLHv61h 8gqMkyO+ZciQ359WERryEX7U7/HAnWWBMqJ3LQb2qDBBZLNo7x9Z4rWlY+Al6EpWc++0ePDH8h3 iqCV/rGXOGhe7Ct9dF/Pq1CPHHBFCD4usUG9km6pSBrnqSi4N43y0Wy00gAUAUazqDJbYcyJ6xm pBAloc2o3NVj8H1lrmVpGTlADUsFis0t1u9RlDrQNR7R+Haj3nKw+7DaLernZh2ERqMDRXY8uoG IsiQbWVTN0PdVROcbVgOge0MOMuQ3orHOFsFilRwZpi7uCqQgvK0mIVouyzdDD1G9z/YWOrXVYj 32WJxcBXJWQw== X-Received: by 2002:a05:690e:1486:b0:644:7398:6682 with SMTP id 956f58d0204a3-6498fbf8fecmr9024d50.30.1769479602346; Mon, 26 Jan 2026 18:06:42 -0800 (PST) Received: from um773-cachyos ([2600:1700:cc0:94af:eca6:9ff9:6f3c:5de9]) by smtp.gmail.com with ESMTPSA id 956f58d0204a3-6496855d65esm4217415d50.12.2026.01.26.18.06.41 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 26 Jan 2026 18:06:41 -0800 (PST) From: Zecheng Li To: Peter Zijlstra , Ingo Molnar , Arnaldo Carvalho de Melo , Namhyung Kim Cc: Mark Rutland , Alexander Shishkin , Jiri Olsa , Ian Rogers , Adrian Hunter , James Clark , Zecheng Li , xliuprof@google.com, linux-perf-users@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v1 08/11] perf annotate-data: Add invalidate_reg_state() helper for x86 Date: Mon, 26 Jan 2026 21:05:01 -0500 Message-ID: <20260127020617.2804780-9-zli94@ncsu.edu> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260127020617.2804780-1-zli94@ncsu.edu> References: <20260127020617.2804780-1-zli94@ncsu.edu> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Add a helper function to consistently invalidate register state instead of field assignments. This ensures kind, ok, and copied_from are all properly cleared when a register becomes invalid. The helper sets: - kind =3D TSR_KIND_INVALID - ok =3D false - copied_from =3D -1 Replace all invalidation patterns with calls to this helper. No functional change and this removes some incorrect annotations that were caused by incomplete invalidation (e.g. a obsolete copied_from from an invalidated register). Signed-off-by: Zecheng Li --- tools/perf/arch/x86/annotate/instructions.c | 29 ++++++++++++--------- 1 file changed, 17 insertions(+), 12 deletions(-) diff --git a/tools/perf/arch/x86/annotate/instructions.c b/tools/perf/arch/= x86/annotate/instructions.c index 803f9351a3fb..e033abb0667b 100644 --- a/tools/perf/arch/x86/annotate/instructions.c +++ b/tools/perf/arch/x86/annotate/instructions.c @@ -209,6 +209,13 @@ static int x86__annotate_init(struct arch *arch, char = *cpuid) } =20 #ifdef HAVE_LIBDW_SUPPORT +static void invalidate_reg_state(struct type_state_reg *reg) +{ + reg->kind =3D TSR_KIND_INVALID; + reg->ok =3D false; + reg->copied_from =3D -1; +} + static void update_insn_state_x86(struct type_state *state, struct data_loc_info *dloc, Dwarf_Die *cu_die, struct disasm_line *dl) @@ -240,7 +247,7 @@ static void update_insn_state_x86(struct type_state *st= ate, /* Otherwise invalidate caller-saved registers after call */ for (unsigned i =3D 0; i < ARRAY_SIZE(state->regs); i++) { if (state->regs[i].caller_saved) - state->regs[i].ok =3D false; + invalidate_reg_state(&state->regs[i]); } =20 /* Update register with the return type (if any) */ @@ -369,8 +376,7 @@ static void update_insn_state_x86(struct type_state *st= ate, src_tsr =3D state->regs[sreg]; tsr =3D &state->regs[dst->reg1]; =20 - tsr->copied_from =3D -1; - tsr->ok =3D false; + invalidate_reg_state(tsr); =20 /* Case 1: Based on stack pointer or frame pointer */ if (sreg =3D=3D fbreg || sreg =3D=3D state->stack_reg) { @@ -438,8 +444,7 @@ static void update_insn_state_x86(struct type_state *st= ate, !strncmp(dl->ins.name, "inc", 3) || !strncmp(dl->ins.name, "dec", 3= )) { pr_debug_dtp("%s [%x] invalidate reg%d\n", dl->ins.name, insn_offset, dst->reg1); - state->regs[dst->reg1].ok =3D false; - state->regs[dst->reg1].copied_from =3D -1; + invalidate_reg_state(&state->regs[dst->reg1]); return; } =20 @@ -501,7 +506,7 @@ static void update_insn_state_x86(struct type_state *st= ate, if (!get_global_var_type(cu_die, dloc, ip, var_addr, &offset, &type_die) || !die_get_member_type(&type_die, offset, &type_die)) { - tsr->ok =3D false; + invalidate_reg_state(tsr); return; } =20 @@ -529,7 +534,7 @@ static void update_insn_state_x86(struct type_state *st= ate, =20 if (!has_reg_type(state, src->reg1) || !state->regs[src->reg1].ok) { - tsr->ok =3D false; + invalidate_reg_state(tsr); return; } =20 @@ -565,7 +570,7 @@ static void update_insn_state_x86(struct type_state *st= ate, =20 stack =3D find_stack_state(state, offset); if (stack =3D=3D NULL) { - tsr->ok =3D false; + invalidate_reg_state(tsr); return; } else if (!stack->compound) { tsr->type =3D stack->type; @@ -580,7 +585,7 @@ static void update_insn_state_x86(struct type_state *st= ate, tsr->offset =3D 0; tsr->ok =3D true; } else { - tsr->ok =3D false; + invalidate_reg_state(tsr); return; } =20 @@ -633,7 +638,7 @@ static void update_insn_state_x86(struct type_state *st= ate, if (!get_global_var_type(cu_die, dloc, ip, addr, &offset, &type_die) || !die_get_member_type(&type_die, offset, &type_die)) { - tsr->ok =3D false; + invalidate_reg_state(tsr); return; } =20 @@ -684,7 +689,7 @@ static void update_insn_state_x86(struct type_state *st= ate, } pr_debug_type_name(&tsr->type, tsr->kind); } else { - tsr->ok =3D false; + invalidate_reg_state(tsr); } } /* And then dereference the calculated pointer if it has one */ @@ -726,7 +731,7 @@ static void update_insn_state_x86(struct type_state *st= ate, } } =20 - tsr->ok =3D false; + invalidate_reg_state(tsr); } } /* Case 3. register to memory transfers */ --=20 2.52.0