From nobody Sun Apr 5 16:31:37 2026 Received: from mail-yx1-f45.google.com (mail-yx1-f45.google.com [74.125.224.45]) (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 4D79C3FD14D for ; Mon, 9 Mar 2026 17:56:01 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=74.125.224.45 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773078964; cv=none; b=ndooabYFCcVdI/MJHWqIhFK2FwvxXMzfTQw/kO4gDUHNQchTbYOOmz5pjpA3mrXAUGzVXAWXfFnPb4rJrQhZMtAc/36R/0Hm3NFtYsuDBnd00p7R1CcF4veFjYTVI18K6fp3L2ZuE9XeYOrZ44xSyYTwlsfDk2HpqPTzszTxC9A= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773078964; c=relaxed/simple; bh=mEoohDgaVS6P4BoQIj2tJG8GaDTdacWN+mjE91dMGAY=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=AyVSi+j5mgCMKK442I0MiIdqxa3okFg1IoizB81kaLGAJlIOAjdExc28F8e4L1kSQCc1H/PU05j298IsJ3ceiwfj2gPBm15y7MMb4KSbkZ3ZrABcWEoCxFx5Vk5WcFAnoyysrCp3JINFqwn1PE8TaYDANGEXHxp5g0BmSLWG4xA= 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=DNxzys8U; arc=none smtp.client-ip=74.125.224.45 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="DNxzys8U" Received: by mail-yx1-f45.google.com with SMTP id 956f58d0204a3-64ad79df972so11387694d50.1 for ; Mon, 09 Mar 2026 10:56:01 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ncsu.edu; s=google; t=1773078960; x=1773683760; 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=Q99YxW+Ht7TLrQtAPlxKv3AciWXzKlQ9lzRm/MiGx5k=; b=DNxzys8U3W38G8tv5EJaWkItOdpuE/pOQt+ZRkEh4+5S7Bpx8dYj6E4xf9K0Ums6Ve Y8RwcfBlui0eXROqF4v7MdhBubZsYl6XmJP1jv4s45EC+COQzZa0z/J27mL5diQhweRr tOuVCTtxbtRnvUE1yuopI/LUxU4IfVDLl2XI9sJXn4s6QHfQFbZ6KQIdK3W421+rfKBa OEJikBwliT5JlsMjFm5E6IrI8593X71ZL/4vAOno98z31dXSr3er8iO3g2nOmd1cKHcN Ekw9tYVmGi0WL2D99iAmDVUXGiViYDm8iEYDJJK4GxXjFavvJRohfNMG2Uj35fiFaRN1 yxQg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1773078960; x=1773683760; 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=Q99YxW+Ht7TLrQtAPlxKv3AciWXzKlQ9lzRm/MiGx5k=; b=hfKz71dEFpNXGrUi2EisxxSCt7L411PeP/33MpnaDbifPSPJVrSwFe3GutgwmNrxJL n3pPXA/D/OwTtEd+0Q/wThc81VSnnVntj2fBNnyPMtILCqUEhMdm8UjSFVyvV59Zz2WW AzPRsy/DYUntZYJzritiYteflS8+Uvno7Hl7z5BpGjbu8ACcg6J8xAi31cawunIBUJon 8f46PlAhicSlRmBtaJJIMvZKfIKN8mHgGFHB3w0bZ4wEdVgiQer3iQIGI08KAJ5ulJZN eBGvSYYlK2aIyvSCF439jSIcUfNrhZ7BOj1NBB5CaYVb4bxL6gS5ZoaOvbPwnhbzl07P OnPw== X-Forwarded-Encrypted: i=1; AJvYcCX66N+uxOM3wHyP0FM5Kn9eH/4PNG1GZ+ppoO0dc897qJ95ZxXMuV/sRn8nisx8NqNG7zMUc0+PwOQlAMw=@vger.kernel.org X-Gm-Message-State: AOJu0YzcxoSDOjXyAbdZTVBPdmyxXyfRW6Jo0/03zfKVCGV5c0xKxtSG FjCIf/gjjiGy51WT03+QoiqmZ/wAYHprwWuw+9eXRXwKp9cagwDgquCk38HcVQVxaQ== X-Gm-Gg: ATEYQzwzDp/u/2fyzHCoULAlkgqki+3IQ2GtHLCPBs5yMgVD/itEwJ5QJwJu6Zs+VMi VEMaDxW8CmdDbnZBrvB59E0eR1SN97cDQzMqr9UKflfPxhQYqqKDFxZ2UHwSTW/D8cLyWNH6IRb F8tpa1KOVB/w8d1/cx3gZXf0gM8Fewn2eFj6rRGN3RHQHMCE4DpJEtkhxH6wSbhiGMt6WZUY3vK Jm4ec9BbgMsFEbjJI5br+LwPsOzD2khnFYPvyLjL54pxqznAitga5VdAXGBjuZwFvAOsSws4Xnw E+Lr8OoaoxLywYTEVpDlUyW+qfJEq1gMTpvzRRba15Cciq2RUn4i/x6f2Zb8HS+CZwyxjsYqTw0 u2WHa2g+UUA8kEEZ2zyfhqj2iThiRjUkZDO1kz7DGBwWqtbC6SeVdZEkBons6JdbOPF8onTvZnR UUDcJLwEQvegZo+bIqdlbBGcZE6esqVdvaUFtIEbrS/xAziCS4MGZu7uwu X-Received: by 2002:a53:b442:0:b0:64c:97ae:2e71 with SMTP id 956f58d0204a3-64d14280e4fmr9557058d50.47.1773078960139; Mon, 09 Mar 2026 10:56:00 -0700 (PDT) Received: from um773-cachyos.sd.ncsu.edu ([152.7.255.206]) by smtp.gmail.com with ESMTPSA id 956f58d0204a3-64d176e70e7sm4992535d50.20.2026.03.09.10.55.59 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 09 Mar 2026 10:55:59 -0700 (PDT) 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 v2 08/11] perf annotate-data: Add invalidate_reg_state() helper for x86 Date: Mon, 9 Mar 2026 13:55:21 -0400 Message-ID: <20260309175546.916039-9-zli94@ncsu.edu> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260309175546.916039-1-zli94@ncsu.edu> References: <20260309175546.916039-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/util/annotate-arch/annotate-x86.c | 29 ++++++++++++-------- 1 file changed, 17 insertions(+), 12 deletions(-) diff --git a/tools/perf/util/annotate-arch/annotate-x86.c b/tools/perf/util= /annotate-arch/annotate-x86.c index eb9a649ca656..eb390a253d71 100644 --- a/tools/perf/util/annotate-arch/annotate-x86.c +++ b/tools/perf/util/annotate-arch/annotate-x86.c @@ -204,6 +204,13 @@ static int x86__cpuid_parse(struct arch *arch, const c= har *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) @@ -235,7 +242,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) */ @@ -364,8 +371,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) { @@ -433,8 +439,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 @@ -496,7 +501,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 @@ -524,7 +529,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 @@ -560,7 +565,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; @@ -575,7 +580,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 @@ -628,7 +633,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 @@ -679,7 +684,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 */ @@ -721,7 +726,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.53.0