From nobody Fri Apr 3 04:52:59 2026 Received: from mail-yx1-f53.google.com (mail-yx1-f53.google.com [74.125.224.53]) (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 F1C5E3F23B9 for ; Mon, 9 Mar 2026 17:55:53 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=74.125.224.53 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773078958; cv=none; b=DS3wqyXvNeu8+ZtJGvSj9FSLcy/3aAbUIo+VSkY9qCAF/NYhK/gzCVOjeCaUpDsqJg1tBAEcpNZVJC9jCQvtdRNAgUCkj3kGqw+UZpKvm3l7s3mLhVYgCmTha3EiwXuL8siIOk5XzSCt4NpOdzEZ1vh0tWhZHYuCaZOBezOCCNA= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773078958; c=relaxed/simple; bh=jZkqxNuYYxB3LoWNGONWU5a5o1Wwng84PdjBv7LMNv0=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=STl7KTzfPRHT8psq6sdqHbCnLebC3SSgHsCyQdiePctvHPyAZ155c/tRIUlnkZ7ukXzrIl7HDdgIGqq2syacDqIToHZzCfbMwkedVdbsq0/zAvyIJyHkJZnLISb0GTtm0ALGE8ko8kP5Jhw8ldwV+HKiuWid4abNu1NSpKst4uE= 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=ergh+Jii; arc=none smtp.client-ip=74.125.224.53 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="ergh+Jii" Received: by mail-yx1-f53.google.com with SMTP id 956f58d0204a3-64ad79dfb7cso11527007d50.2 for ; Mon, 09 Mar 2026 10:55:53 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ncsu.edu; s=google; t=1773078953; x=1773683753; 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=4lPHrHUbCvA0nk/Bz11ONoeBHbNhRdJurUU0iBLUrTc=; b=ergh+Jiic6FQECc2jF+2eW05PYdBCdK+cgrAA9w4tT9m7FV1W4chf45Ru33SHsnAWr kYQ/2Qp2W72M1qeH+M9g917lXoDR1jN2grQNq28cu+o+kO6aKi/ZdQ/o1DUc0tTWo9hk O5q1uGzRSWPOM0bo451hOBB0MhWwmcmmKip507vy+2K2BbSdv+vEe7luHceU5ZMZ2q5T fH1dkj+vOog8BMVR3h5TXLvE8JCyTY84V1gi9fL6aGY3PeGdHREfn6Cl7vDQZyYN0RVx gmQGQwoR9PfDiPmUf0eO/69xUvjmw4AXEXgw9nFJUmgcM6rI9OFT88E43xB06jNH2fcn 7ElQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1773078953; x=1773683753; 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=4lPHrHUbCvA0nk/Bz11ONoeBHbNhRdJurUU0iBLUrTc=; b=H3Wf0rBDFIHiTN7Nxr7yxSnK65UOdPJB6DYMV+0suF4AR0WlvRCIstrF//6XE8TaeK b9V3mkfNsnPAZEWzoP/nfj5yNOevFPhyyuNziFDebvXLmnn3anw7/PWwnVFPvtkAu3eJ WW1tSb6088wI+zvcLmaKL2AeaxlJO58Upp1EUXxKvVa9jiLk47qKtQx/Yq5wLApQT7O+ bnxh1wx3HIKHjgvCsDy8l3lfAWuCg3UfdMz3KqTkJE0hN++kNeNqCUpJHuIniGY2Ro9a lFqizyY6UF48UkyJaKNnFw9pgM5f51k5lkNtVd3SaFRQOWIMQS1ktFY78V4lTTOIei4P v73g== X-Forwarded-Encrypted: i=1; AJvYcCUNZIobCiuUxUXQzjGZiLgCnPIoRnh8aPiM0B3jU7SftJAy0DtYOW4336HmiOe/n7SLArO+ISu7mOTUTmA=@vger.kernel.org X-Gm-Message-State: AOJu0YzwfZ1x6yLmogrgNa2QATkRG+OvTnDEOKUTUiNSfWPBq97GctF9 NvPPCLlBslhVA5yCa3cmBmbNAEQPlIfYAptK78G7pEnPO8GoWy++waotNYNwAqR/OA== X-Gm-Gg: ATEYQzw6c3ZlDvWxOXKJ3vFkFFiUlc6wqdzmNAqE7emNIq0BVr6r+wBCNAEAV+eWHiL Hunp0bl+atJ7qZU4f5kfNXBloEIjnQDvY1nX6dL84sXvNVpSRkGChoNjV26jLSmdmHBB02EhVQS 6b8lvENfzfb36D2x7ozmnjAjV9UtvQx5L2+FGM76h3Jc7P8BvxMXs9dYRL6B8Z1Pti16LwYlf7w u90HQdi9KIO8B+reiXMetXTrrmWVbYmrdgJ/5JO/6V0GOUDvRqHbpawVQV0ymrPAmrXGxei2fS+ ODCkJrUONrXUjODrBlZYoWIlg17uSs9LErslNQfNDqJ78qYiXM8JIZuO/uNxyu5Z0HYeO582tSN pu/pSYIUAZTEyeKGjMMJYZbdDa+4lAs2FCOayr87P2erooqBEi11UpbwWKaR+DhFtooA3SaR4yD SFfovd1doSOFxL0u7ikbYTZ7cQwp1lFAY8fRbWlWtvkYEXgiHJG1vVNwx8 X-Received: by 2002:a05:690e:6c3:b0:64c:9b19:9238 with SMTP id 956f58d0204a3-64d142034c7mr8345441d50.40.1773078952719; Mon, 09 Mar 2026 10:55:52 -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.51 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 09 Mar 2026 10:55:52 -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 01/11] perf dwarf-aux: Add die_get_pointer_type to get pointer types Date: Mon, 9 Mar 2026 13:55:14 -0400 Message-ID: <20260309175546.916039-2-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" When a variable type is wrapped in typedef/qualifiers, callers may need to first resolve it to the underlying DW_TAG_pointer_type or DW_TAG_array_type. A simple tag check is not enough and directly calling __die_get_real_type() can stop at the pointer type (e.g. typedef -> pointer) instead of the pointee type. Add die_get_pointer_type() helper that follows typedef/qualifier chains and returns the underlying pointer DIE. Use it in annotate-data.c so pointer checks and dereference work correctly for typedef'd pointers. Signed-off-by: Zecheng Li --- tools/perf/util/annotate-data.c | 39 +++++++++++++++++++-------------- tools/perf/util/dwarf-aux.c | 27 +++++++++++++++++++++++ tools/perf/util/dwarf-aux.h | 2 ++ 3 files changed, 51 insertions(+), 17 deletions(-) diff --git a/tools/perf/util/annotate-data.c b/tools/perf/util/annotate-dat= a.c index 44fbd41e3845..cda020ea18d5 100644 --- a/tools/perf/util/annotate-data.c +++ b/tools/perf/util/annotate-data.c @@ -455,13 +455,6 @@ static const char *match_result_str(enum type_match_re= sult tmr) } } =20 -static bool is_pointer_type(Dwarf_Die *type_die) -{ - int tag =3D dwarf_tag(type_die); - - return tag =3D=3D DW_TAG_pointer_type || tag =3D=3D DW_TAG_array_type; -} - static bool is_compound_type(Dwarf_Die *type_die) { int tag =3D dwarf_tag(type_die); @@ -474,19 +467,24 @@ static bool is_better_type(Dwarf_Die *type_a, Dwarf_D= ie *type_b) { Dwarf_Word size_a, size_b; Dwarf_Die die_a, die_b; + Dwarf_Die ptr_a, ptr_b; + Dwarf_Die *ptr_type_a, *ptr_type_b; + + ptr_type_a =3D die_get_pointer_type(type_a, &ptr_a); + ptr_type_b =3D die_get_pointer_type(type_b, &ptr_b); =20 /* pointer type is preferred */ - if (is_pointer_type(type_a) !=3D is_pointer_type(type_b)) - return is_pointer_type(type_b); + if ((ptr_type_a !=3D NULL) !=3D (ptr_type_b !=3D NULL)) + return ptr_type_b !=3D NULL; =20 - if (is_pointer_type(type_b)) { + if (ptr_type_b) { /* * We want to compare the target type, but 'void *' can fail to * get the target type. */ - if (die_get_real_type(type_a, &die_a) =3D=3D NULL) + if (die_get_real_type(ptr_type_a, &die_a) =3D=3D NULL) return true; - if (die_get_real_type(type_b, &die_b) =3D=3D NULL) + if (die_get_real_type(ptr_type_b, &die_b) =3D=3D NULL) return false; =20 type_a =3D &die_a; @@ -539,7 +537,7 @@ static enum type_match_result check_variable(struct dat= a_loc_info *dloc, * and local variables are accessed directly without a pointer. */ if (needs_pointer) { - if (!is_pointer_type(type_die) || + if (die_get_pointer_type(type_die, type_die) =3D=3D NULL || __die_get_real_type(type_die, type_die) =3D=3D NULL) return PERF_TMR_NO_POINTER; } @@ -880,12 +878,16 @@ static void update_var_state(struct type_state *state= , struct data_loc_info *dlo continue; =20 if (var->reg =3D=3D DWARF_REG_FB || var->reg =3D=3D fbreg || var->reg = =3D=3D state->stack_reg) { + Dwarf_Die ptr_die; + Dwarf_Die *ptr_type; int offset =3D var->offset; struct type_state_stack *stack; =20 + ptr_type =3D die_get_pointer_type(&mem_die, &ptr_die); + /* If the reg location holds the pointer value, dereference the type */ - if (!var->is_reg_var_addr && is_pointer_type(&mem_die) && - __die_get_real_type(&mem_die, &mem_die) =3D=3D NULL) + if (!var->is_reg_var_addr && ptr_type && + __die_get_real_type(ptr_type, &mem_die) =3D=3D NULL) continue; =20 if (var->reg !=3D DWARF_REG_FB) @@ -1110,7 +1112,9 @@ static enum type_match_result check_matching_type(str= uct type_state *state, goto check_non_register; =20 if (state->regs[reg].kind =3D=3D TSR_KIND_TYPE) { + Dwarf_Die ptr_die; Dwarf_Die sized_type; + Dwarf_Die *ptr_type; struct strbuf sb; =20 strbuf_init(&sb, 32); @@ -1122,7 +1126,8 @@ static enum type_match_result check_matching_type(str= uct type_state *state, * Normal registers should hold a pointer (or array) to * dereference a memory location. */ - if (!is_pointer_type(&state->regs[reg].type)) { + ptr_type =3D die_get_pointer_type(&state->regs[reg].type, &ptr_die); + if (!ptr_type) { if (dloc->op->offset < 0 && reg !=3D state->stack_reg) goto check_kernel; =20 @@ -1130,7 +1135,7 @@ static enum type_match_result check_matching_type(str= uct type_state *state, } =20 /* Remove the pointer and get the target type */ - if (__die_get_real_type(&state->regs[reg].type, type_die) =3D=3D NULL) + if (__die_get_real_type(ptr_type, type_die) =3D=3D NULL) return PERF_TMR_NO_POINTER; =20 dloc->type_offset =3D dloc->op->offset + state->regs[reg].offset; diff --git a/tools/perf/util/dwarf-aux.c b/tools/perf/util/dwarf-aux.c index 9267af204c7d..38142062d6e5 100644 --- a/tools/perf/util/dwarf-aux.c +++ b/tools/perf/util/dwarf-aux.c @@ -303,6 +303,33 @@ Dwarf_Die *die_get_real_type(Dwarf_Die *vr_die, Dwarf_= Die *die_mem) return vr_die; } =20 +/** + * die_get_pointer_type - Get a pointer/array type die + * @type_die: a DIE of a type + * @die_mem: where to store a type DIE + * + * Get a pointer/array type DIE from @type_die. If the type is a typedef or + * qualifier (const, volatile, etc.), follow the chain to find the underly= ing + * pointer type. + */ +Dwarf_Die *die_get_pointer_type(Dwarf_Die *type_die, Dwarf_Die *die_mem) +{ + int tag; + + do { + tag =3D dwarf_tag(type_die); + if (tag =3D=3D DW_TAG_pointer_type || tag =3D=3D DW_TAG_array_type) + return type_die; + if (tag !=3D DW_TAG_typedef && tag !=3D DW_TAG_const_type && + tag !=3D DW_TAG_restrict_type && tag !=3D DW_TAG_volatile_type && + tag !=3D DW_TAG_shared_type) + return NULL; + type_die =3D die_get_type(type_die, die_mem); + } while (type_die); + + return NULL; +} + /* Get attribute and translate it as a udata */ static int die_get_attr_udata(Dwarf_Die *tp_die, unsigned int attr_name, Dwarf_Word *result) diff --git a/tools/perf/util/dwarf-aux.h b/tools/perf/util/dwarf-aux.h index cd481ec9c5a1..99d2735122d5 100644 --- a/tools/perf/util/dwarf-aux.h +++ b/tools/perf/util/dwarf-aux.h @@ -60,6 +60,8 @@ Dwarf_Die *die_get_type(Dwarf_Die *vr_die, Dwarf_Die *die= _mem); Dwarf_Die *__die_get_real_type(Dwarf_Die *vr_die, Dwarf_Die *die_mem); /* Get a type die, but skip qualifiers and typedef */ Dwarf_Die *die_get_real_type(Dwarf_Die *vr_die, Dwarf_Die *die_mem); +/* Get a pointer/array type, following typedefs/qualifiers */ +Dwarf_Die *die_get_pointer_type(Dwarf_Die *type_die, Dwarf_Die *die_mem); =20 /* Check whether the DIE is signed or not */ bool die_is_signed_type(Dwarf_Die *tp_die); --=20 2.53.0 From nobody Fri Apr 3 04:52:59 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 0CACB3E95B6 for ; Mon, 9 Mar 2026 17:55:54 +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=1773078959; cv=none; b=mYInz0b8v/OhDhYIi6HqqomNIzXkDKhv3n0kPB7mCe+zTBmdMkGPi4m3DGksTuyxuKO+p5JUiONASb7ummFlaEdXYet3b2eoaa6y3oztEa3dkKPvEA33+cDlh9MmM5QiSJnaSBKs7yA6WxeO3Ly7N6+Df1T4wm67WCMcvKeMLus= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773078959; c=relaxed/simple; bh=gr5gzJz+zJGQrTtkuM3wSWcpKQ5StwlicyaLJNKlcq0=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=a2XxQJpfIuu7bDmOZ9MKu/3z6hQMRTU7lHSBhLIHBUTmGKDFOy6HvDI+BD0wfGhvJaRpVR1HJQQk2LjdemeaW8szblGrt6iX06wj8fNfUpPoIWloMtT+CtWlrq6o365EvUdh7OJGVtIqVjX4aI56TSYCQUd7NGT1eX/UMcuOVVE= 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=J2BgIqRf; 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="J2BgIqRf" Received: by mail-yx1-f45.google.com with SMTP id 956f58d0204a3-64ca6595c8aso11728141d50.0 for ; Mon, 09 Mar 2026 10:55:54 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ncsu.edu; s=google; t=1773078954; x=1773683754; 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=ejER9XjyWi4jI3dlIAUxOX0udAsfG8pEAsk5mvY+7tE=; b=J2BgIqRf4P4r3NWQVSgrDsiQ6aHB634LBci6lJez0270GAja1tQvlmVHFsmJNI7wwD Pr/JbWw3iYmYNH2vMZG//oRS1uaT+Qq2BHzYenTKiySNgiXqBk1Lwy/QxFwiWPNbDaYp hm7UTvDu/Bs0sREVynN+QAs8D8VWbBxJY5DdqXZ5mOmxmKsLnii+heAJ/xJCZcgpGkB9 XWoVWRF/LseXCW75XOyDj5wtVywrTKFgQX85K9F2L2NtbN/qEqep84+BA0PTXBEkHYYq VUyHKACzELZxhrfhRhDVuLlsVkrFo+QsBGz3+zAHe+adp3YxZlKSUZmGGZzn9DcXTaOc Rd+Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1773078954; x=1773683754; 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=ejER9XjyWi4jI3dlIAUxOX0udAsfG8pEAsk5mvY+7tE=; b=AbvPAZJ4kRcm5IJnNnq7HXIYMRR5rJbRJ43vJRRKYp9tvbQ63aYk94s7iaG8cke2ha QCzBMzYScGi5K5HHR6NBA+/5AWc09EyymNaPAnAUiQbe3E8wMdWq+Xw8IO3Rf5O9EmFZ F7bY8uoS7WybpxiusG7Z6axGttyFkp7Qw/CJ+ez6Gc6yzW9kIri2e3Rd61evWz8AV+mU yprBhggBc1N1j3ZWvsQo5ZHdaltFhgbgD6XuEKPLimna1oTWef4GmcV8VkIkrcAnRyXF ifRFj9IS3lBJYvOe7T66SzP799ruJ6DlYmT9rcoztd97ybgMQA/MWpwJLyDXbNq7RaOJ C6YQ== X-Forwarded-Encrypted: i=1; AJvYcCVkO4jGsqmGAP+k/nuvi4Ug28szd/Bq5biRZL/QcowLCARXh3UrlB8b+au6bmViBI4Hzd9yS6RrHONHHqA=@vger.kernel.org X-Gm-Message-State: AOJu0Yz98y0mNgQOsRWvVkOnkNwfRfJjf4yFqyhhgt5LFHnGBueYyLWR 8S8DK0zGgKgc/kzLCAGaVF38di0fBOLIuYYicOT9UyCAahInlb8QAgHYaqZ0v2Z79w== X-Gm-Gg: ATEYQzziGLyKwzLKnan6lJPRgwvmvZrVDv8pzjvVYYUwaCadMGDN4HHgjMox5mxSvQe eBftCMFXGTgWyduBaPCxkXl2z+ntmyP2rwYnQpINUkU0+WNqv+64KC9ZXcycP0BItdMJRuQUiBk Nq9/ysHOaujG4lUd/2F+CHrhGmnzAcAE8M5AfVA1o+Q1vXZrKAjSzydI6+ZfUxkHwxHTFv0ONmU NGvVa43tT+3zwumdGGup8+3zLzkGKMlUEOG+AjqGZQURLLtpg0OQc6839UFURhR0v8BLEXteX1Q O7xxwQgeWtBebt4lbFQv8WvEDVF8lh0EYZpJPEdpJsvmSBP5MgZ4y7Hl7JoC4SNzqUdhk6opzzM Y1eSAY5HEfl114rEBaGRgNSv6cuVgQNFM3Rjn7brWxZt9mafS8k8aFHWE7EIVXEDpvIAwFALzpT 2HluqbY2aVVPxyOjMCkfKeHegfcBNu6Rr6GwhacQGLDPkAMZr7LLiQ/RuxUPfGVtkf1cs= X-Received: by 2002:a53:e194:0:b0:64a:d6eb:6e with SMTP id 956f58d0204a3-64d1436ec4fmr8312416d50.80.1773078953722; Mon, 09 Mar 2026 10:55:53 -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.52 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 09 Mar 2026 10:55:53 -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, Zecheng Li Subject: [PATCH v2 02/11] perf dwarf-aux: Preserve typedefs in match_var_offset Date: Mon, 9 Mar 2026 13:55:15 -0400 Message-ID: <20260309175546.916039-3-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" From: Zecheng Li Preserve typedefs in match_var_offset to match the results by __die_get_real_type. Also move the (offset =3D=3D 0) branch after the is_pointer check to ensure the correct type is used, fixing cases where an incorrect pointer type was chosen when the access offset was 0. Signed-off-by: Zecheng Li Signed-off-by: Zecheng Li --- tools/perf/util/dwarf-aux.c | 26 +++++++++++++++----------- 1 file changed, 15 insertions(+), 11 deletions(-) diff --git a/tools/perf/util/dwarf-aux.c b/tools/perf/util/dwarf-aux.c index 38142062d6e5..3b0fc9038f19 100644 --- a/tools/perf/util/dwarf-aux.c +++ b/tools/perf/util/dwarf-aux.c @@ -1405,6 +1405,8 @@ struct find_var_data { Dwarf_Addr addr; /* Target register */ unsigned reg; + /* Access data type */ + Dwarf_Die type; /* Access offset, set for global data */ int offset; /* True if the current register is the frame base */ @@ -1417,29 +1419,31 @@ struct find_var_data { static bool match_var_offset(Dwarf_Die *die_mem, struct find_var_data *dat= a, s64 addr_offset, s64 addr_type, bool is_pointer) { - Dwarf_Die type_die; Dwarf_Word size; + Dwarf_Die ptr_die; + Dwarf_Die *ptr_type; s64 offset =3D addr_offset - addr_type; =20 - if (offset =3D=3D 0) { - /* Update offset relative to the start of the variable */ - data->offset =3D 0; - return true; - } - if (offset < 0) return false; =20 - if (die_get_real_type(die_mem, &type_die) =3D=3D NULL) + if (__die_get_real_type(die_mem, &data->type) =3D=3D NULL) return false; =20 - if (is_pointer && dwarf_tag(&type_die) =3D=3D DW_TAG_pointer_type) { + ptr_type =3D die_get_pointer_type(&data->type, &ptr_die); + if (is_pointer && ptr_type) { /* Get the target type of the pointer */ - if (die_get_real_type(&type_die, &type_die) =3D=3D NULL) + if (__die_get_real_type(ptr_type, &data->type) =3D=3D NULL) return false; } =20 - if (dwarf_aggregate_size(&type_die, &size) < 0) + if (offset =3D=3D 0) { + /* Update offset relative to the start of the variable */ + data->offset =3D 0; + return true; + } + + if (dwarf_aggregate_size(&data->type, &size) < 0) return false; =20 if ((u64)offset >=3D size) --=20 2.53.0 From nobody Fri Apr 3 04:52:59 2026 Received: from mail-yx1-f53.google.com (mail-yx1-f53.google.com [74.125.224.53]) (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 222E63D7D6E for ; Mon, 9 Mar 2026 17:55:55 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=74.125.224.53 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773078960; cv=none; b=M2FR0dtA7BRXzRI4p60Vsen4nEflUpo7dpWGbvC8/73KqpkWCXklwxMWAD3salrhO0v3fANt9NnIf3BZ+NR85fykT9th4coMeCjOc/QEQEuGW5G29PII6b3r2GfD7RSmaqpb5ZCs+MtcEzks49/y5VppY2NEn8+SpTI+yq0jzFE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773078960; c=relaxed/simple; bh=I0bHNrXIoabZx/3kXJ4rgQ5TfmaboCIWyV/MOFLzpcg=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=oQfozVdyB+K2WdVJOXITmOyuPlVjxn0anqFL89NDFe6CDG2PJKncw2nafcO+dYybNtOpFtlpTN/C8Ngj+TNw+7RrthN3dbE8Oo+tuJG4eOK28YwMAe86wEfQXYBE5oDcIwWz7DU4o7LPVY9ee8ZQ2pI/EDl4+9z43a5/D4Vef/M= 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=fjF4P9fu; arc=none smtp.client-ip=74.125.224.53 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="fjF4P9fu" Received: by mail-yx1-f53.google.com with SMTP id 956f58d0204a3-64d5a7926cfso118980d50.2 for ; Mon, 09 Mar 2026 10:55:55 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ncsu.edu; s=google; t=1773078955; x=1773683755; 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=id5lmV/YuEYOAzPj/+aTg1r+vark3Tzx2cS0LXicP3k=; b=fjF4P9fuA4286PTqBOLFzkGzZQKkFCyI15OhuFixBBCsW31YlyqVDZzZBwfHPpdvE9 46UIn20O+z0fJX889yX7+zHIq8c2FU+0TCyyoEfWkunaqzsXar6yy+EFQRcAY1NzAFSS nL7q0ht9vJPCLv0SXS35eBuKVrw9+x4kcbfLhVFvy43PjAZY9paEkDwH5hHsnPAEPAzZ 1BY+ura8szZtlQvT20oWcGokENrhSyjM8ye1z42WnmqlI6vdTsZOmP1d51QaAVswnK4I CwinkirmK4aAyCA9Z4NQWTLkIv3hERO0Ydz2bbpoTtDDzzGtqC1h2y0K1JNvZ+skywAa 0eTQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1773078955; x=1773683755; 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=id5lmV/YuEYOAzPj/+aTg1r+vark3Tzx2cS0LXicP3k=; b=XaOlHu7sul7FOhwW71lUKt+AqF1SIkJ7UI/SrDHlTCCCrP+2ElcplKVOGfljE8mk6j qEFLbJ9V/JCaK9PBVCY8LvJeDp1dRvvXojx/P1/b3a4c2sN3Bn5CbOPiJ7AqjzJ9zzfb 2V7QgvLyL1gjW+XcFNqh4O7aus4nr7rx91ZuTtsbAksLJ/fXaSm+etVVEtUOcufiHFDm NTW8hBCYwjvGfuDR1B2k/RuHhV9Ea90N58p2+OISs1btCKhAraJWeAem9JW4U98MqhSU ODcdS/7fzSJ5V/VrJG/wyNbgwe9SCc5UL/L1JOlonEzNjY9/AU3GWJdnDLIVve67Qj6I SaGA== X-Forwarded-Encrypted: i=1; AJvYcCVBNeG/uQE+XJGCLBv69dCCdWnWZDPxkZbqobI5AX4sGxAJmgv0RoiBa4S/t33MFFpTGaWWmMtgMbOLKeQ=@vger.kernel.org X-Gm-Message-State: AOJu0Yy9wOn5+Hk2DVs7PAX+10QZOsEPW/NZtR8crFndnAtf9kgew3vV /Vve/vGwxIzfFmGTDQIxp1I/xQNEhdH321rvLWvHZSAMftGcfSih1gdNKofVGuwqkw== X-Gm-Gg: ATEYQzyV4YhMsjP4MS9EH39qCdA12fCFvy68nOpQIRxmyirGBO0/7MPjvflbs64CvXF KDrzPNAxf0zkkgKXwZglLdO0s1ZYHtyrNYxmAm+GlXEUURHXBs4ORz45zx4pIJMZPBkR2SgVSO4 rpvWoJLWF3Xq2zdPJYAGxQEd6gbsLvJCM3gFxoTTbl8chqglFFXIISeqRmRwUhcX2BaQyiYpPgG djiMMEznW4ITHZXY/8j1VPculuwuYvITOv0LVaubn0OZSw5TTwP3j0N0NLeW5XtV8+LhIRX23ML VQuNLndTAJoe2X4wZNnnYlpYpcrko1adm+VkPobM61lSqg+K7gJrN0Z4OmfWdHs6uDXP7dd/epK 1wKeVXWKk2WySf8SWaCpqAOmz2qSCQadr5spi8G1ORs0lRzbN9GIAqd68KxZBOaxzQZvMsfx5ox +2+3WwJ1tDL76KDlqGIsPAfutjNlbXWkU+9cif1ORmDaVIQklTOH7wo3vW X-Received: by 2002:a05:690e:1a8d:b0:649:e4eb:cc6e with SMTP id 956f58d0204a3-64d14141211mr8245960d50.34.1773078954804; Mon, 09 Mar 2026 10:55:54 -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.53 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 09 Mar 2026 10:55:54 -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, Zecheng Li Subject: [PATCH v2 03/11] perf dwarf-aux: Skip check_variable for variable lookup Date: Mon, 9 Mar 2026 13:55:16 -0400 Message-ID: <20260309175546.916039-4-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" From: Zecheng Li Both die_find_variable_by_reg and die_find_variable_by_addr call match_var_offset which already performs sufficient checking and type matching. The additional check_variable call is redundant, and its need_pointer logic is only a heuristic. Since DWARF encodes accurate type information, which match_var_offset verifies, skipping check_variable improves both coverage and accuracy. Return the matched type from die_find_variable_by_reg and die_find_variable_by_addr via the existing `type` field in find_var_data, removing the need for check_variable in find_data_type_die. Signed-off-by: Zecheng Li Signed-off-by: Zecheng Li --- tools/perf/util/annotate-data.c | 42 ++++++++++++++------------------- tools/perf/util/dwarf-aux.c | 13 ++++++---- tools/perf/util/dwarf-aux.h | 5 ++-- 3 files changed, 30 insertions(+), 30 deletions(-) diff --git a/tools/perf/util/annotate-data.c b/tools/perf/util/annotate-dat= a.c index cda020ea18d5..23a09bf58f86 100644 --- a/tools/perf/util/annotate-data.c +++ b/tools/perf/util/annotate-data.c @@ -814,9 +814,8 @@ bool get_global_var_type(Dwarf_Die *cu_die, struct data= _loc_info *dloc, } =20 /* Try to get the variable by address first */ - if (die_find_variable_by_addr(cu_die, var_addr, &var_die, &offset) && - check_variable(dloc, &var_die, type_die, DWARF_REG_PC, offset, - /*is_fbreg=3D*/false) =3D=3D PERF_TMR_OK) { + if (die_find_variable_by_addr(cu_die, var_addr, &var_die, type_die, + &offset)) { var_name =3D dwarf_diename(&var_die); *var_offset =3D offset; goto ok; @@ -1606,12 +1605,13 @@ static int find_data_type_die(struct data_loc_info = *dloc, Dwarf_Die *type_die) =20 if (reg =3D=3D DWARF_REG_PC) { if (!die_find_variable_by_addr(&scopes[i], dloc->var_addr, - &var_die, &type_offset)) + &var_die, &mem_die, + &type_offset)) continue; } else { /* Look up variables/parameters in this scope */ if (!die_find_variable_by_reg(&scopes[i], pc, reg, - &type_offset, is_fbreg, &var_die)) + &mem_die, &type_offset, is_fbreg, &var_die)) continue; } =20 @@ -1619,26 +1619,20 @@ static int find_data_type_die(struct data_loc_info = *dloc, Dwarf_Die *type_die) dwarf_diename(&var_die), (long)dwarf_dieoffset(&var_die), i+1, nr_scopes, (long)dwarf_dieoffset(&scopes[i])); =20 - /* Found a variable, see if it's correct */ - result =3D check_variable(dloc, &var_die, &mem_die, reg, type_offset, is= _fbreg); - if (result =3D=3D PERF_TMR_OK) { - if (reg =3D=3D DWARF_REG_PC) { - pr_debug_dtp("addr=3D%#"PRIx64" type_offset=3D%#x\n", - dloc->var_addr, type_offset); - } else if (reg =3D=3D DWARF_REG_FB || is_fbreg) { - pr_debug_dtp("stack_offset=3D%#x type_offset=3D%#x\n", - fb_offset, type_offset); - } else { - pr_debug_dtp("type_offset=3D%#x\n", type_offset); - } - - if (!found || is_better_type(type_die, &mem_die)) { - *type_die =3D mem_die; - dloc->type_offset =3D type_offset; - found =3D true; - } + if (reg =3D=3D DWARF_REG_PC) { + pr_debug_dtp("addr=3D%#"PRIx64" type_offset=3D%#x\n", + dloc->var_addr, type_offset); + } else if (reg =3D=3D DWARF_REG_FB || is_fbreg) { + pr_debug_dtp("stack_offset=3D%#x type_offset=3D%#x\n", + fb_offset, type_offset); } else { - pr_debug_dtp("failed: %s\n", match_result_str(result)); + pr_debug_dtp("type_offset=3D%#x\n", type_offset); + } + + if (!found || is_better_type(type_die, &mem_die)) { + *type_die =3D mem_die; + dloc->type_offset =3D type_offset; + found =3D true; } =20 pr_debug_location(&var_die, pc, reg); diff --git a/tools/perf/util/dwarf-aux.c b/tools/perf/util/dwarf-aux.c index 3b0fc9038f19..1484aa756826 100644 --- a/tools/perf/util/dwarf-aux.c +++ b/tools/perf/util/dwarf-aux.c @@ -1560,7 +1560,7 @@ static int __die_find_var_reg_cb(Dwarf_Die *die_mem, = void *arg) * when the variable is in the stack. */ Dwarf_Die *die_find_variable_by_reg(Dwarf_Die *sc_die, Dwarf_Addr pc, int = reg, - int *poffset, bool is_fbreg, + Dwarf_Die *type_die, int *poffset, bool is_fbreg, Dwarf_Die *die_mem) { struct find_var_data data =3D { @@ -1572,8 +1572,10 @@ Dwarf_Die *die_find_variable_by_reg(Dwarf_Die *sc_di= e, Dwarf_Addr pc, int reg, Dwarf_Die *result; =20 result =3D die_find_child(sc_die, __die_find_var_reg_cb, &data, die_mem); - if (result) + if (result) { *poffset =3D data.offset; + *type_die =3D data.type; + } return result; } =20 @@ -1617,7 +1619,8 @@ static int __die_find_var_addr_cb(Dwarf_Die *die_mem,= void *arg) * This is usually for global variables. */ Dwarf_Die *die_find_variable_by_addr(Dwarf_Die *sc_die, Dwarf_Addr addr, - Dwarf_Die *die_mem, int *offset) + Dwarf_Die *die_mem, Dwarf_Die *type_die, + int *offset) { struct find_var_data data =3D { .addr =3D addr, @@ -1625,8 +1628,10 @@ Dwarf_Die *die_find_variable_by_addr(Dwarf_Die *sc_d= ie, Dwarf_Addr addr, Dwarf_Die *result; =20 result =3D die_find_child(sc_die, __die_find_var_addr_cb, &data, die_mem); - if (result) + if (result) { *offset =3D data.offset; + *type_die =3D data.type; + } return result; } =20 diff --git a/tools/perf/util/dwarf-aux.h b/tools/perf/util/dwarf-aux.h index 99d2735122d5..939a59c91796 100644 --- a/tools/perf/util/dwarf-aux.h +++ b/tools/perf/util/dwarf-aux.h @@ -165,12 +165,13 @@ int die_get_var_range(Dwarf_Die *sp_die, Dwarf_Die *v= r_die, struct strbuf *buf); =20 /* Find a variable saved in the 'reg' at given address */ Dwarf_Die *die_find_variable_by_reg(Dwarf_Die *sc_die, Dwarf_Addr pc, int = reg, - int *poffset, bool is_fbreg, + Dwarf_Die *type_die, int *poffset, bool is_fbreg, Dwarf_Die *die_mem); =20 /* Find a (global) variable located in the 'addr' */ Dwarf_Die *die_find_variable_by_addr(Dwarf_Die *sc_die, Dwarf_Addr addr, - Dwarf_Die *die_mem, int *offset); + Dwarf_Die *die_mem, Dwarf_Die *type_die, + int *offset); =20 /* Save all variables and parameters in this scope */ void die_collect_vars(Dwarf_Die *sc_die, struct die_var_type **var_types); --=20 2.53.0 From nobody Fri Apr 3 04:52:59 2026 Received: from mail-yx1-f49.google.com (mail-yx1-f49.google.com [74.125.224.49]) (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 4E7AF3F23AD for ; Mon, 9 Mar 2026 17:55:57 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=74.125.224.49 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773078961; cv=none; b=ndwAZK0Sv3bpw3iK6YE7/F2IhN0TwABJwBGJuQX/PCORQlgUEIGhn7OaGMnzxRXw4T6K7VIkeO+F6aPoPxtMXb2JptkuBCHteXn+/+bUxOq/j/CAmmyte/L/6jToG0KigKJO8xgrosK3ZnmuUT1NnOdaQX7zYS4h96Rost8SwBg= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773078961; c=relaxed/simple; bh=aLAu5L0fib6HrBbWc1UtveitoT71aNAt4ZUMnsx8dho=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=c/k839AM0OIiLbCFp098r3FK/r+habWnDrkBtekiHeFcBVIE3MsgEzjZZpmrg3HAqRTlQL3317zEoFICCTsqOl2ek9WUN02hTta1f9AXX+tRVBKGSdINWJnfkjQg11yqX/2w/GVYIYFRjluarO8sHsU0CeSUTMgtZ/r/cgUAtzY= 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=Avdkf+yA; arc=none smtp.client-ip=74.125.224.49 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="Avdkf+yA" Received: by mail-yx1-f49.google.com with SMTP id 956f58d0204a3-64ad9fabd08so10142499d50.2 for ; Mon, 09 Mar 2026 10:55:57 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ncsu.edu; s=google; t=1773078956; x=1773683756; 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=ZCxAsFvxZFzdJH9MRwGNnxrTqhY6BlYrnwFDORcP738=; b=Avdkf+yAfDD3RY3Xb1GXiMz56HWZW+x3cTiP3yM34TR2jBh00IWAosDznPJHQWIR7h RS5qw3ZohpDsQTgxQB2QoGQ0cq+fQyvQZPzzki7UftDkxbR3oHgmT/lZSX1LCsnRwjrO 3yPl4e3SyMo3OV5spm0/NnKii7z3qGCayXNQ69bGYItwB0sC3wMHiPhAKE5AkKY9nmSk E7ztARpdniAokPbIm1rVMT7VlXZqqAsXrRLoZEDCblDTmN1E3Yi6dtgcEdE+qng7UG/A /xKACCD05Kmy6YQh6SvaLo6yTz2SsbTAxxk1gdgs0RR/yMvgEbODrFmsEYO6/GcCOzNX 0r3w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1773078956; x=1773683756; 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=ZCxAsFvxZFzdJH9MRwGNnxrTqhY6BlYrnwFDORcP738=; b=JcozaKxx7wttInk0LaHdaHnctny0zjNfyGB3GxkHrQeUL0h92giiXIFp45HbUnVoDM ajg/AnhSbsE6VJfpt/KM7XIbbR4D2ObwPHEaUQMYP4z1cfFLeZcNTaR3P1F+z51eH6+X twF9bX+p8gvxHX0z2FcFvslrdCud/bbxyiq8nY2mo/NadEvT6jxGwMuPwHA7C7KNE2k4 hVxqRpKf8ys7rxjlwemHtpJWKb0y3NBhOOZOnZhItKvpA0whOLPr+MfIqYCAmf0KgyJl HC/Ztw7G0f/QjlOc3zhtQpmEUH7LBQRubzw5iWKT5PT6zA22B3fOFCCyntPaxMjT4HcP MacQ== X-Forwarded-Encrypted: i=1; AJvYcCWyhb7jFldG48V0MJR1M9yXNp9xG+OCnOtFTUvZ1eGarnCLIA1IsBvnvNqf8x+gb1ITNOTIzmz5bgeK3Sg=@vger.kernel.org X-Gm-Message-State: AOJu0YyJWzAk4vNm5o/TIQ0RrSMUkdBABddi7j71+NL63NOI1c78z9FB ucVlj7wJflrjXtg46pPueBlJoRHU26pU+65FbQqrWAZ2HU3TIlAv26oQcvFrlEz6bQ== X-Gm-Gg: ATEYQzw15fKVmPz34edNjqAl0MUNdUhLuDnHSObihNsM7t9qAtog4i7cX80dhv4RDvy FIiBlzVZ3hdjDa2U2ZwdTVuqlzTTvgkv7iGfVD2H1b7Yon8LD63kbCdbuhhfeVQyxvwX0g+LDSF 5QRP7RhQ6OF08uhA7+z4dPekJXUgCGBvvoN+21wLVx4T8apvlcfS9gu8hKKxLM6I4EdLtHL2/xi JD91HXcQ7NC5Lue7g2fNyz7K3VFLFK6FVmCCw0XaY3Je+54MWhUty3s3dqSY2/UZsORE1anMGq7 xMsBjzMV82pPAv+50FauY6sqAc9yvhjLKMZGS6leSniuWy4lcoGSPqr0IfMRtBa3ULp6Do1XHwp cIPOXXfiCDzYGhVA62QtI2nj3YBKkTiCC6EJim0i9o24ldrBJwSC9JMoRF/WhiNqk6+vx/bYZag xbdtA8/+YRZDsNLeI7ui5KKpADKTAjPUjo+YQl2rz/TRr7+s+El5j4G8Xx X-Received: by 2002:a05:690e:4012:b0:646:b1f3:aeb2 with SMTP id 956f58d0204a3-64d1405ec3fmr11748106d50.3.1773078955907; Mon, 09 Mar 2026 10:55:55 -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.54 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 09 Mar 2026 10:55:55 -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, Zecheng Li Subject: [PATCH v2 04/11] perf annotate-data: Improve type comparison from different scopes Date: Mon, 9 Mar 2026 13:55:17 -0400 Message-ID: <20260309175546.916039-5-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" From: Zecheng Li When comparing types from different scopes, first compare their type offsets. A larger offset means the field belongs to an outer (enclosing) struct. This helps resolve cases where a pointer is found in an inner scope, but a struct containing that pointer exists in an outer scope. Previously, is_better_type would prefer the pointer type, but the struct type is actually more complete and should be chosen. Prefer types from outer scopes when is_better_type cannot determine a better type. This is a heuristic for the case `struct A { struct B; }` where A and B have the same size but I think in most cases A is in the outer scope and should be preferred. Signed-off-by: Zecheng Li Signed-off-by: Zecheng Li --- tools/perf/util/annotate-data.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/tools/perf/util/annotate-data.c b/tools/perf/util/annotate-dat= a.c index 23a09bf58f86..6fe2efd48a83 100644 --- a/tools/perf/util/annotate-data.c +++ b/tools/perf/util/annotate-data.c @@ -1629,7 +1629,9 @@ static int find_data_type_die(struct data_loc_info *d= loc, Dwarf_Die *type_die) pr_debug_dtp("type_offset=3D%#x\n", type_offset); } =20 - if (!found || is_better_type(type_die, &mem_die)) { + if (!found || dloc->type_offset < type_offset || + (dloc->type_offset =3D=3D type_offset && + !is_better_type(&mem_die, type_die))) { *type_die =3D mem_die; dloc->type_offset =3D type_offset; found =3D true; --=20 2.53.0 From nobody Fri Apr 3 04:52:59 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 278883F23CF for ; Mon, 9 Mar 2026 17:55:58 +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=1773078961; cv=none; b=mJvGNSrZ7dVfxA1IjFTUaJFfYRAyBmNumOxBY5mRCmBh86CGdZi4HgJdD3OsHY/zH+6+XPEp8bg7Kbc+QUtm9Nzbw+uzaL8l08SLkH7QDgO1CybgCauznpuIk07NhWMOK3FyPPWZ8Ck/c8aEmo83EgIRLzPqd8jZVmoVttI9dyw= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773078961; c=relaxed/simple; bh=OAU4joyMCvkTz0gfnas3vvrqU9KLdL5ai5pE4aFt60k=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=dkXwOTbTWc0cUe6WSMz09KKHnzwKbvUHRw93KcI8KADjAYJy8vqfFGOaOWgIDULJcqFtySuBXbDKlJck9i0eBYtexztsXarDrnAh5mFQB+PI+dZsUriVVQ7jiE9WGCV2Ms4iMbox8oaa2SkZjh7zwVVqBT0rTXo0nvW7vw4DJCA= 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=RaLAwFbz; 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="RaLAwFbz" Received: by mail-yx1-f52.google.com with SMTP id 956f58d0204a3-64c9f7576d4so8887088d50.0 for ; Mon, 09 Mar 2026 10:55:57 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ncsu.edu; s=google; t=1773078957; x=1773683757; 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=sSYCnTvgRwKgqJAv6DduOBpprY0x2d8AW9Jn0k87SVE=; b=RaLAwFbzkRcbjJaJXXz6kwuYB4M5qX+FSesZ4AzXwjJXOUw1fAp2COXxpyefz2iW+2 qmnu0QYr+2+riFb10x8X40L/gr3LYE0EbiLBfAziKqaMMB9+4ghOiPUzxL1wxWFIpGv3 HzGQk+NWOAzO3jr2uLev6yOFFbT16hSBXuRMRI6GNhoJI4NqA2FrG1tiOnZ4gzStSzBX nplxlABEBI7rxjn1sZVFXwMCatiIhFuNS4x+x9PXOfYEcyv+IsK25YQgnhqDqSX6eZtu 8zG4rrAl0S9WDngUUMMpHLmNOvTyMesRpIQnoQ9xvr3JOIRyunKB7prylqGMkbVhDBi5 S4DQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1773078957; x=1773683757; 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=sSYCnTvgRwKgqJAv6DduOBpprY0x2d8AW9Jn0k87SVE=; b=nvme01iRzNJ7ZSZs+t9Ow8sCE963JuU3AroHSpbFJGPUEcUdzIlCYq7k9d3sieIvK0 qBimly1OfFiQcT6NfPoZ0Hv2jlolDmT01B/2/wRvCYXsstSvjoe2M+G2QIlCr9uSfRLa +hw+8KhOu81R/NK+hK+Q2WdrAeqPwcFu5+wDSzGTmSzkNNTuC2MZuck+WBAUa+/h0eQ9 EYhjyiuhRR10Ng+iJb9wbu+7Z7x13Lwws4XPOrENg5J/v5QHVIPu3hCmFypCe3+ah1he 2IUniQmAk66sKv0dcSsFdivjSruJ1ylju6ZJbPjz0beFy15otXcXt7I5HLMQ3P/NZzFx DW9A== X-Forwarded-Encrypted: i=1; AJvYcCUIuvY8BkBF1Gfkv7+uA3CcdZSGxBl4tBV18uGNGTQOncll8B7vy/QreOnRP8k4F2w4g0iv4Rt4DPxH5yY=@vger.kernel.org X-Gm-Message-State: AOJu0Ywrq7wJ2M/79Kh5lhY8A2KHc10CyVNDxpicJbOaKfuJW9bu26D8 Q18kjKblTPjD+Ft1cuFfJ8k083VkFi8ZlMBKnhCPfQbrIG64iHSIIb4QseIst4r3+g== X-Gm-Gg: ATEYQzyLIGi2n6T6e0iNnL8Lmwpme+Xr2KG3JILYFR2rbRr36P2SyqEt6BUClcVFKcc bfBO5LO/rH1vmEDrpCnjKWgmQYD6A9KNF37vG8+FwQNpFJj4eTjudUutcNmEn0Odq5x0hrvFi2P uRkZ5rEgbf6oT21klG25cyq7+7HAWeCFDvwqU3MA1lvjovsw973MtfQFUln7Q/ZEZwi6IGRBOTa 191VTfbNl54wc928A2og7rcfxuxnTw7u6sca9VF7NYFSHb3kPtUWvWL93rcGQsQFFrNK0yI1BvF 0pQ/y50seX6Xl4pxMHBhZ1LAZqoD/J4iQ0XfrDkV/+Xj5LOxvUquMXltS3gqVA5pRqI/vDOHtZL APXqcQSLKZTM4TojcTmiCDU29JjGMxpZKmZbP1vkFqpS+f4YR+gUugA2Fyd1XrbXMlLmAl9X7ov viUaZ2+AFQ2F7Ju3JRTrK3Tg/45uSqaQV4N3Cl4r3OtdRiAY7YaW4nv07V X-Received: by 2002:a05:690e:134a:b0:64a:d1a9:a64 with SMTP id 956f58d0204a3-64d142baacdmr10625010d50.55.1773078956967; Mon, 09 Mar 2026 10:55:56 -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.56 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 09 Mar 2026 10:55:56 -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 05/11] perf dwarf-aux: Handle array types in die_get_member_type Date: Mon, 9 Mar 2026 13:55:18 -0400 Message-ID: <20260309175546.916039-6-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" When a struct member is an array type, die_get_member_type() would stop iterating since array types weren't handled in the loop. This caused accesses to array elements within structs to not resolve properly. Add array type handling by resolving the array to its element type and calculating the offset within an element using modulo arithmetic This improves type annotation coverage for struct members that are arrays. Signed-off-by: Zecheng Li --- tools/perf/util/dwarf-aux.c | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/tools/perf/util/dwarf-aux.c b/tools/perf/util/dwarf-aux.c index 1484aa756826..1feefc329154 100644 --- a/tools/perf/util/dwarf-aux.c +++ b/tools/perf/util/dwarf-aux.c @@ -2127,13 +2127,28 @@ Dwarf_Die *die_get_member_type(Dwarf_Die *type_die,= int offset, =20 tag =3D dwarf_tag(&mb_type); =20 - if (tag =3D=3D DW_TAG_structure_type || tag =3D=3D DW_TAG_union_type) { + if (tag =3D=3D DW_TAG_structure_type || tag =3D=3D DW_TAG_union_type || + tag =3D=3D DW_TAG_array_type) { Dwarf_Word loc; =20 /* Update offset for the start of the member struct */ if (die_get_data_member_location(member, &loc) =3D=3D 0) offset -=3D loc; } + + /* Handle array types: resolve to the element type by one level */ + if (tag =3D=3D DW_TAG_array_type) { + Dwarf_Word size; + + if (die_get_real_type(&mb_type, &mb_type) =3D=3D NULL) + return NULL; + + if (dwarf_aggregate_size(&mb_type, &size) < 0) + return NULL; + + offset =3D offset % size; + tag =3D dwarf_tag(&mb_type); + } } *die_mem =3D mb_type; return die_mem; --=20 2.53.0 From nobody Fri Apr 3 04:52:59 2026 Received: from mail-yx1-f47.google.com (mail-yx1-f47.google.com [74.125.224.47]) (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 1EFBB3D410A for ; Mon, 9 Mar 2026 17:55:58 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=74.125.224.47 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773078962; cv=none; b=bFFUb3eFX/p27g7EKJMaADqu7ZAgwQZVCF6UnHiHEPj+qbntBbPaKzoKuKteiZg5ulxE1rBUJiHs6cZYPh34r12Dm8itCM263ccLEn6O0CpSoKsC4sPDTELDpNw60adt3OiTCDDBGl6Xf+t287wARoHwZsAy2SuWmizr5kuzchA= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773078962; c=relaxed/simple; bh=pvxNnOKqeHa3u9P/BSdLX/F7/QbZo7WG8Lg+nWmEajQ=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=kh09Ary7shBkvllenAHLR4Sa+vqcJft4btjYv4/XssKeOamgdEd4XuAmkil6mZSe2apTnj0Hz0R/eHpNGIokouYZfLk/967lknzTeEgfTsVuDENZIGSYlrBROAahw5BdT5f3al04onoVWsf82RZEsw+J+tW7g3Kuhi6bJ1UV5yg= 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=RczIOqwJ; arc=none smtp.client-ip=74.125.224.47 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="RczIOqwJ" Received: by mail-yx1-f47.google.com with SMTP id 956f58d0204a3-64c9a398bc7so10846678d50.2 for ; Mon, 09 Mar 2026 10:55:58 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ncsu.edu; s=google; t=1773078958; x=1773683758; 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=KPYwqT1EEY7+NbPzds3BGnxWg5Bdt7m7QdEJl4nIWoA=; b=RczIOqwJ6ihTF8Imcou4a3eoOb2tlIuHjkjVLFXlQtfOqiM/rW0rDf4HLuikNpRVie Grrj7k7I/HvE7AJT5PGWi00bO86EVmqq0AAi/ehrWtp5/xMNg8jxyVjJteW4mnXfA2Fq SF3TaYbzETE0cqXsl56gpWHlOQiBM4NxMOsxDVHEYUhAOi4tU6O2jn/E21VnLfXPnyYq Zc5F2lXh/2dkE9tQRJRIogf655RTL9ZVUOsXpH055SMfRc5dXRXLTNmGy9AJ8n3GXvCp yk7a96Xq6fli1dlUelITRTTOX6iDWyd2Z73JNM5xAuhZtkAx4MxSH4lyEzcD2i5WF681 QLOQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1773078958; x=1773683758; 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=KPYwqT1EEY7+NbPzds3BGnxWg5Bdt7m7QdEJl4nIWoA=; b=F5WN60Rgt685OaqI47/QAf4py20VdmU+VessEtgb2/ERz1YR7b2xs6dsk3/gwZ5o08 8sJ6ZUaE98yA0SbowbcLuVk2bMHhJCwG2YQXwEabcYOIPbApUkEisdM5ILyXJZPUy8tK yoMqiloFO5IQNH917ED6z/+LSeG3A9WCucf+7aFXmx1tjv4Vx8Olj86OyTa5eg3AjI+a jDCr+qurUresbgoY2DWXh5q+BKaCX/Nmn32EVdOuehtOSwz8KFnSQ31GNgT37mCk1ozv 9Et0HHiKQQfcfjU1yCYHzB/KXFW0Xf8OYzdDlwsXjIHVruECpsQf7VwPL6wrOOE8SPvd q1fA== X-Forwarded-Encrypted: i=1; AJvYcCVo4ly9weqjs2g6Mg6KXloRKO3ylGVI2Ckm0p67zn8bKTXLI4xCyZ4zbUayGOJunuUsPMBdC91pFNIT9rQ=@vger.kernel.org X-Gm-Message-State: AOJu0YwpyC+iUxIxxrc61Mxz3iuEWH1X1X1xc5Q2arhGGI8ZHDBKu1Gf IltsdqgUi5QNDZm9f6kF1CjU9+IanZrX0gmdYXvbp8Pv8lUizvc3Er2zO8hmXq1oew== X-Gm-Gg: ATEYQzwTtbyDZf/Stgzs6ZAUBnIfoV9GPK4E9Wc6Jz5DFvXxyjr88p0QBSbIck6evTx VqyNDAuq8ZWd6b3pQg7B+v3InDqo4qdFvuK62zi7eV91/fHY11sGon0XugB6Zh0YWqDeOw1sWVH RMrcdE8lxjqbgTsLRhV8UqP0fULEpaw6qnjYXVgFtrOYXOOVTOYghdj6Wk25ZWgaP4/B2UQZ7o1 TxrqebyXb4YzBSi/Ao40ueB5kCAqS7sixI+ZjfKay0f1S2H7fdTCjJKHhPceV37gQr+SUyhBFf7 XwHWV3Y9XTnXK3A8bmb2892SraeGVtuwrEHxeVyOOAI27ItHDquyj3nlNWEOEFTtv9Eqws59NZH JAsjYsvG+7PqG7OZEEs9+DmyHQ5OClJz03aPRrwkZuEFGOFLqkTRyE/ld9mzUGL62IPhYNnCrNE UfyndHK4hI8LoMYbpw+Q79/KBNUxSuGql/RX6Rq1DDJ3s5Qr98CDu7anmk X-Received: by 2002:a05:690e:c44:b0:649:ca5c:5990 with SMTP id 956f58d0204a3-64d14316d3dmr11274047d50.66.1773078957901; Mon, 09 Mar 2026 10:55:57 -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.57 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 09 Mar 2026 10:55:57 -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 06/11] perf annotate-data: Collect global variables without name Date: Mon, 9 Mar 2026 13:55:19 -0400 Message-ID: <20260309175546.916039-7-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" Previously, global_var__collect() required get_global_var_info() to succeed (i.e., the variable must have a symbol name) before caching a global variable. This prevented variables that exist in DWARF but lack symbol table coverage from being cached. Remove the symbol table requirement since DW_OP_addr already provides the variable's address directly from DWARF. The symbol table lookup is now optional to obtain the variable name when available. Also remove the var_offset !=3D 0 check, which was intended to skip variables where the access address doesn't match the symbol start. The symbol table lookup is now optional and I found removing this check has no effect on the annotation results for both kernel and userspace programs. Test results show improved annotation coverage especially for userspace programs with RIP-relative addressing instructions. Signed-off-by: Zecheng Li --- tools/perf/util/annotate-data.c | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/tools/perf/util/annotate-data.c b/tools/perf/util/annotate-dat= a.c index 6fe2efd48a83..301f73ea8275 100644 --- a/tools/perf/util/annotate-data.c +++ b/tools/perf/util/annotate-data.c @@ -774,12 +774,7 @@ static void global_var__collect(struct data_loc_info *= dloc) if (!dwarf_offdie(dwarf, pos->die_off, &type_die)) continue; =20 - if (!get_global_var_info(dloc, pos->addr, &var_name, - &var_offset)) - continue; - - if (var_offset !=3D 0) - continue; + get_global_var_info(dloc, pos->addr, &var_name, &var_offset); =20 global_var__add(dloc, pos->addr, var_name, &type_die); } --=20 2.53.0 From nobody Fri Apr 3 04:52:59 2026 Received: from mail-yx1-f43.google.com (mail-yx1-f43.google.com [74.125.224.43]) (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 8BB383FB064 for ; Mon, 9 Mar 2026 17:56:00 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=74.125.224.43 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773078964; cv=none; b=NMNTu4Uejo3J8KYw+WLvqvHyLLXRpWfCpl3PKKkezvh25khsO9MEB0TcrYStKk6+XUQtvsXK/NklxSwy1oqIM9TEJLMFHOY3xTWel4UNbHvymSBKGpCXiR67FZe02+WtcJI83qaxatT29jt3Mi4gnqcFWN0PrCcuYvShGfkljJY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773078964; c=relaxed/simple; bh=9uNtpknv29cmQteZhSGGznRmJ73KHryeX5TUxc7eu8Y=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=pOCElQI4f/uMUetANDcUaqZMNfth60Si1QwTZht7Sz+Pc8oa1zEp6J5yHCfGYW2bYi0gZU00RTd4TIXIGBLm4DTgRc4z5QpCRQ4n9aF9Jcw4A5aUw7bfKhLFkEPeiKVpcWrheLGwgXmM9P4Ewm0V1xsZLiKZzXjdGBah4FxHpKI= 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=ONcZWxa6; arc=none smtp.client-ip=74.125.224.43 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="ONcZWxa6" Received: by mail-yx1-f43.google.com with SMTP id 956f58d0204a3-64ae2ce2fe1so11016420d50.1 for ; Mon, 09 Mar 2026 10:56:00 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ncsu.edu; s=google; t=1773078959; x=1773683759; 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=S7oosy5/acey/h5OCheMNJ9lzD2RKykZWn+tBKBfRfY=; b=ONcZWxa6FsK3tMxk99UDimwn5IByxqxiUlAgd55fWChkCAlnRNfkuD9kMhovTF/hY/ I3w+UcVv5dtEhhpw3r66WHe2S8r87M1gPErcHlP18xcVXj09IYPIJStECEFkiKhi8G6N 5b0O8uidN7H3qG4IvlDiLI/DNxPdDMQp9XufLr73r+Eixb1SuyOgH0dpnMer7FdbXaoQ 9LK5DhyZ98zlRDUldI7BG22nHolw0i3KW68tA+b7VcumrjsRsnGK7oBBmFwarbV3J6QX LDLXZFY4Nl+NVzqZ8rBgxSEZvQLqFzmfBvcTSfYBARjdmtvMqgvFIm+w5ZrEfO024p04 SCmQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1773078959; x=1773683759; 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=S7oosy5/acey/h5OCheMNJ9lzD2RKykZWn+tBKBfRfY=; b=j7epUg04y/M1MO0do1aBLdDD829tLwCUoEQ8aB64KJ0ObS2qyN3foJxVtY2lb3O6d1 +k0ntOBn1ihHESzbLSKl0Rsa1y2OJXgMx3SNEVD1hf64DrId7WDUEKIwIUdl42U/wKus rtQW6Dzr6YEzMxBKgpipJx9UFi3o7iRZv0Fdph4x2zlYks4AHkQqFlIPkGgyLyJmWFR4 b2IwgMja6UMgunJMVxE2RE3SOrMPKa00ddYdd8Dm1E29Rs6bc+yNIJszKpf6yFI/Zis9 hrHl44VNhrtmmcaCQcx4MRliUSN4OXPUzsvlGhCe+wXZGCEE9Ya3FNhaZwWRzJ7GsxrF mQBw== X-Forwarded-Encrypted: i=1; AJvYcCVvI3i97ELJDDCBrkaKQlTBLE2AzaRnBfeAlFvAy6To9IX15sLa1AvN/Br0Zz+kU3A9PqtGiF2hCQ+ayOM=@vger.kernel.org X-Gm-Message-State: AOJu0Yy2vLjU5FbQPF224g/pQGDvbDjxmv8yqi+H01fkEChZXlvp9d/M q2B0zczRT96hhkRoOMkscSTd/Jtw48KGb6zDZInQICLDNZNM3L24fN6+DbVg1vjhew== X-Gm-Gg: ATEYQzzYxZbUUZ1XpwWpk92lrD4YQ//XfhugpfJfthyYrZ1yTIht+ZZr5dMSRWEeL0j c+OuShlWbb5SyUEl3kXnInxOwfdRaZzNn7baRQc2Ee6/zORUuEY8ISgTpXh1YcGfSJ1S4eyje7J rhJdaShi4IusFbQuOBaAIEw0OyGTqdso2+O+tOEH9PhybPapd3wnMgMvCtZ1v/7eUhVb2t+ekg5 7zMBLQrhW21qeD6eWiqV0CptMo5iK/UWkY1pZ+nCPp2J7aKYyQ88qpEd5umdfUbBk27uedyabNJ CdoLEzfPoFAyGgDhehM/ZoxKyU1hRtriPqboZggyAZbsyf5uBDavn9rx+Y2X47Ol2L3VtHxvRKl cwTQg89yOniopx3Cgke3uXbNalpg7fPyzzv2eNqk0tMYW0+eL96TmoHhU7FNXgUWkIhLMBeB2lc 6ScXHr8WrzBWRd+TK0q1PF7KTtkrJwc1XWE8u40zt2ID2yuBeV4QNb+0F/ X-Received: by 2002:a05:690e:118a:b0:64a:d80f:5cf with SMTP id 956f58d0204a3-64d141120b3mr11987752d50.25.1773078959162; Mon, 09 Mar 2026 10:55:59 -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.58 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 09 Mar 2026 10:55:58 -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 07/11] perf annotate-data: Handle global variable access with const register Date: Mon, 9 Mar 2026 13:55:20 -0400 Message-ID: <20260309175546.916039-8-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" When a register holds a constant value (TSR_KIND_CONST) and is used with a negative offset, treat it as a potential global variable access instead of falling through to CFA (frame) handling. This fixes cases like array indexing with computed offsets: movzbl -0x7d72725a(%rax), %eax # array[%rax] Where %rax contains a computed index and the negative offset points to a global array. Previously this fell through to the CFA path which doesn't handle global variables, resulting in "no type information". The fix redirects such accesses to check_kernel which calls get_global_var_type() to resolve the type from the global variable cache. This is only done for kernel DSOs since the pattern relies on kernel-specific global variable resolution. We could also treat registers with integer types to the global variable path, but this requires more changes. Signed-off-by: Zecheng Li --- tools/perf/util/annotate-data.c | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/tools/perf/util/annotate-data.c b/tools/perf/util/annotate-dat= a.c index 301f73ea8275..50c82c91f828 100644 --- a/tools/perf/util/annotate-data.c +++ b/tools/perf/util/annotate-data.c @@ -1229,6 +1229,11 @@ static enum type_match_result check_matching_type(st= ruct type_state *state, return PERF_TMR_BAIL_OUT; } =20 + if (state->regs[reg].kind =3D=3D TSR_KIND_CONST && + dso__kernel(map__dso(dloc->ms->map))) { + if (dloc->op->offset < 0 && reg !=3D state->stack_reg && reg !=3D dloc->= fbreg) + goto check_kernel; + } check_non_register: if (reg =3D=3D dloc->fbreg || reg =3D=3D state->stack_reg) { struct type_state_stack *stack; --=20 2.53.0 From nobody Fri Apr 3 04:52:59 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 From nobody Fri Apr 3 04:52:59 2026 Received: from mail-yx1-f42.google.com (mail-yx1-f42.google.com [74.125.224.42]) (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 67263401499 for ; Mon, 9 Mar 2026 17:56:02 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=74.125.224.42 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773078966; cv=none; b=B5rhdsvjuGeUalWLwaQBzDUHxEER7bwbXas+g+23HUgu6zvldtlay2mIP+peHTwLsrq+KWtQeK0A0N5033OjIhA5XGl7J4o1+p2qGY40CoAvFxpiwb9tx3BRspbeo1S+mkRfdQdb6UPNPFpxEuRk73bxLRMlGIPEUwz6bjC3nbY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773078966; c=relaxed/simple; bh=Srv1ikITokT9OVyx2gFl2fZqBR0h7zamS7/rBlEZHVw=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=WFBHnKYVqcDDYbT6yJ0sgV30xJaropG4UqwPPYHxwGkTeOUv4YmS1et5BvKr7ikAlx4SfG+mec1TuCeblnWYiQ1BZ0zt7BstDV1pDsK9Dez66X5epmcYUpCR2Mx7aEg8iM8MGCegJzc/u4IN19SY9UqfCCgh9BhEPUvn+Lfs46c= 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=APEpG2+K; arc=none smtp.client-ip=74.125.224.42 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="APEpG2+K" Received: by mail-yx1-f42.google.com with SMTP id 956f58d0204a3-64acd19e1dfso10050136d50.0 for ; Mon, 09 Mar 2026 10:56:02 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ncsu.edu; s=google; t=1773078961; x=1773683761; 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=lS3bf96XLrwY4W7aIs+xdKEyTPWgsbIOpYmGdzST5mA=; b=APEpG2+KCeYIz1dHuRl7ldzSW0xmfgd/+q82tjpX7xAWbKfR5byHIHHVYMc57MDkaz 6i6FLK5dhOkrAd4DCCN2sWwb6+LMGUe6rccILLrFRWoxE4rlTJkN6VJCbtYIhdbDnLVZ E6h5bwbPN1x7RvH61KhfO5YZk0ADlQkaxRxSf/aiP6/cfteogfaSqyEGv2+kcbMse1PQ K5YXochunxONnbPzqwyO2+CQS1gNPjbwjnaHJ1b4hiLYISxHGPbuiXT1uXYsJx2h6/zF KJJV/eR8KBX8sthup01ELzWZ1E4LmEt3CTZFgIf24QO1g/pQHYR6AA8cTElruLyjAqID KcyQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1773078961; x=1773683761; 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=lS3bf96XLrwY4W7aIs+xdKEyTPWgsbIOpYmGdzST5mA=; b=C6JD04JyeBKrKDlExyoJRk8o+CR04xUEzl4TgFLU77ZFdXk+oidhnta/EFIR30uHve AGyykgYmx4kknAkphAwJrx8JjPnySmCPUmkXewN09i6pDpvqH6j0eSanqFfyJGR6fXai geZ5hIjnh4UkrkBX7LH80/nfkSbUL1TDxmtkWuAoNHvqNJWHwMNEd4HAbZNR7njHTQus ezvs8eo+2hcb8c7q3pKhdxpjGt28pfTYhO/Y4H1kOJniC5b/M7gwYjgkG2DucYG+KVLa +XruyIRS0Ai+38CnznzsrkTwciJAaT8KI68LjsPdsaaq5qeQWwROMNBD+anigpe9HpDm TxYA== X-Forwarded-Encrypted: i=1; AJvYcCWHDPaljAz9A629kuZdPoLyShheyjDLeMxz6Bgn1gilDV00XRrPURC9rm5H2U04egWrLZXc7y31jDOHOXM=@vger.kernel.org X-Gm-Message-State: AOJu0YzcK6+BObXo1f2Mad6ubWWsxMIHLS9v5CMg1W6TFAaMPQRidk7W qdW5VWf+DywN6959BBrB2RYUR96khPW6/EAYaRETqSwEYaw72n2OUsMAHS97dLFLzg== X-Gm-Gg: ATEYQzyy7VXVr28CCwrX4O25WIgm/j97CLJhEATsy230b7y4j7nT5SUeuYmNK8MGfZK K9eCgiwI/nAZ0DYX6MpXr+HVfNy1nBnVOroz/Bo873OLNcuu8aoGBfDt+c8QbeUrcDmUxX/OsEZ gByjfPHVi/eiAdMOA9+o2pQmi326za97Gw7qLOpVrVpYQVRHwMzUzlUjQrxh/ZnEfAKLyZYcOwR Xw9i4xTbiwEVK+F7n7rBCAscg8dE6i83tuP/LC8SgH354xVFxVqzyvlaaewXVRYrcQziuEukLgv OHX2jp0pgruSQzm2NNNwGcGCpzoo7mO5NUYGPcNptxK05OTB6cn1L6SkWfcqYxLgOdhGL/kPRqL aeyNYX94AUgYy3CbgXSak+1kCGGn0jRlpPMGWu5YzZU6PjysNXFXNoqVfr3tyH/M7GbIz2+vGlC KUYlaldeTILP7YpMogmT0I+2g3JW87GCmy4L2+WyEVhFanNUeyKHQZfgWp X-Received: by 2002:a05:690e:e11:b0:64c:b44e:dfe0 with SMTP id 956f58d0204a3-64d1407f8c9mr9466801d50.13.1773078961107; Mon, 09 Mar 2026 10:56:01 -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.56.00 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 09 Mar 2026 10:56:00 -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 09/11] perf annotate-data: Invalidate caller-saved regs for all calls Date: Mon, 9 Mar 2026 13:55:22 -0400 Message-ID: <20260309175546.916039-10-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" Previously, the x86 call handler returned early without invalidating caller-saved registers when the call target symbol could not be resolved (func =3D=3D NULL). This violated the ABI which requires caller-saved registers to be considered clobbered after any call instruction. Fix this by: 1. Always invalidating caller-saved registers for any call instruction (except __fentry__ which preserves registers) 2. Using dl->ops.target.name as fallback when func->name is unavailable, allowing return type lookup for more call targets This is a conservative change that may reduce type coverage for indirect calls (e.g., callq *(%rax)) where we cannot determine the return type but it ensures correctness. Signed-off-by: Zecheng Li --- tools/perf/util/annotate-arch/annotate-x86.c | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/tools/perf/util/annotate-arch/annotate-x86.c b/tools/perf/util= /annotate-arch/annotate-x86.c index eb390a253d71..df9fc0a51b39 100644 --- a/tools/perf/util/annotate-arch/annotate-x86.c +++ b/tools/perf/util/annotate-arch/annotate-x86.c @@ -229,24 +229,31 @@ static void update_insn_state_x86(struct type_state *= state, =20 if (ins__is_call(&dl->ins)) { struct symbol *func =3D dl->ops.target.sym; + const char *call_name; =20 - if (func =3D=3D NULL) - return; + /* Try to resolve the call target name */ + if (func) + call_name =3D func->name; + else + call_name =3D dl->ops.target.name; =20 /* __fentry__ will preserve all registers */ - if (!strcmp(func->name, "__fentry__")) + if (call_name && !strcmp(call_name, "__fentry__")) return; =20 - pr_debug_dtp("call [%x] %s\n", insn_offset, func->name); + if (call_name) + pr_debug_dtp("call [%x] %s\n", insn_offset, call_name); + else + pr_debug_dtp("call [%x] \n", insn_offset); =20 - /* Otherwise invalidate caller-saved registers after call */ + /* Invalidate caller-saved registers after call (ABI requirement) */ for (unsigned i =3D 0; i < ARRAY_SIZE(state->regs); i++) { if (state->regs[i].caller_saved) invalidate_reg_state(&state->regs[i]); } =20 /* Update register with the return type (if any) */ - if (die_find_func_rettype(cu_die, func->name, &type_die)) { + if (call_name && die_find_func_rettype(cu_die, call_name, &type_die)) { tsr =3D &state->regs[state->ret_reg]; tsr->type =3D type_die; tsr->kind =3D TSR_KIND_TYPE; --=20 2.53.0 From nobody Fri Apr 3 04:52:59 2026 Received: from mail-yx1-f43.google.com (mail-yx1-f43.google.com [74.125.224.43]) (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 3EB7240B6CB for ; Mon, 9 Mar 2026 17:56:05 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=74.125.224.43 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773078970; cv=none; b=Dr/T+NAVyslXZX5BlF5bjSUHU80MPT+uDv6bINbqTelSlxgGNY+KuLfp8AfrUic4Ec6mMD/bk3k3pP6aGcLU4B7FMo0NIyAJ+MjvzQ22+RW0qe9QdJCEk7KbpAOpWN0wC7IAYMUwHA/h/+Jw68mm5nZclQdfca3VfAF/RwROUnA= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773078970; c=relaxed/simple; bh=q6LE+ixU1zVz16lgmY2eKxe6TkipgC5NpO0sfrkT0Wk=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=lKZ59IhSzN6f2UgAKHqdq/TSGCMHEUO6HGv58igAusFeS71Gd+AT6INqrozJZyfAXBvWdaECG04u6U66JQAQc6+f6HYAWtW5R5Q8QUAZZ36lkmBOK9J+zhCAME/bXPr0bTq1qojRkH5re5sz2JatpVKLUbGrIJQOahZb35hl/NQ= 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=cBzKWTyS; arc=none smtp.client-ip=74.125.224.43 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="cBzKWTyS" Received: by mail-yx1-f43.google.com with SMTP id 956f58d0204a3-64937edbc9eso10913732d50.2 for ; Mon, 09 Mar 2026 10:56:05 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ncsu.edu; s=google; t=1773078964; x=1773683764; 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=NXlD/hErpPiic9ODLls/lxSmno+4Yc8/kOa6LrdepnM=; b=cBzKWTySOn8qXWCA4XoDCCaM89ZzObrOqD9Fc2Svj6oxV35rMxDbg5PREo9gKAjeGB zSrRaQ0+R4KLgzjOeBafv+5dj4rUkgD/DVk+WS8hp6ZgVGsrRUbKacrdPjnF6LXMi4FV Sjh0HiOamRjgqZixyIkC9Wl/iPVRo63+9cGRzi0b9uF3/aZGW5tB3HEWziI84xLj3ibS 3DFzN06IQ/pPzyOPH+P/6TC27syAn6HUzYM94G798r5BF0Pw6s2WEGkEMBoRm8I0lTvs 0vKWCitfZhzO9/bhcbe+91Y0ZpoOuCn8D+NJlclP9G+B8Fb3zIwtNZ5YXGM0/+uZ4TUK hVMg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1773078964; x=1773683764; 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=NXlD/hErpPiic9ODLls/lxSmno+4Yc8/kOa6LrdepnM=; b=ts7MwY/4MSMw7+SVbDXyW+b90C+WzohEvmiBrGn4Gij00q7JzuAhxK2jJunQqWiQRw xbFilcoCGhfE3ufgaHW6AbvXfepPtYicbznPTSdnQz8aKX7Ixe0BLY509/yZN/Ea0y8t 2SyQPNBavLXSPcV4HH+dM2yLsYwone69KIZZFHH7oyA7azlCNCOdcOCFqdrf6SUjW/2S WNLntliuZX6QjM1WWiQB5XMkCRDANbLsL92YZcwmrj5T3UxCY52DdTabNUFdCBc+TUGm yFhYtF2pPYFoCx9Zd6Fhcpi/smm+9Pdf5yJu0voZla0fvIwLl/6jWWum7/eUjISJzj7q cj6w== X-Forwarded-Encrypted: i=1; AJvYcCXiQUj1CBK2Y3e8XlzmGlC7O4qp/avRsok2jtlP5KHVVJU01SU7uLhl0Bm2Wjbbgt1b606nfgVo1EwO4zA=@vger.kernel.org X-Gm-Message-State: AOJu0YwU2mVqu2Yb5yZLKwkVAw/RP0G70qQ8a87mJntyk4oKEuNLFXTx ss8WO9DhjJnnyP2uVM8Tr3SYKjCgMVFGv1aYv5St2AUb88ToxVxquuwictORmTKFSw== X-Gm-Gg: ATEYQzxKLtV3g/vVxBNFxh7sXBpAdVWleLVGQJp21ABfAxferw9mE0pELiY9yqMDJxS prXx4yRIX9AuPFZXUh3sGx0n2dILk4mFMQKngIDT/FIxR1HL72edUiyTE77oykhE7hpeD+Wal+e ULFQtzH98AA4Oicr/svMP1uqExLVt2aQVbKZOLdjmic+xF1MuOYBMw3M4CZHDVejpyCxJyIlz9i oEfo/QreNIRr9JamRUYCkOD7vIJEz77CzZ1QT3jObgHE5fyY5hYd4Q7A3hfFeQCqj0HFIoM1YwD xE5xRtKwiSrAprUXy5y7K2vJdvoECikd2jfCmZFDhpvcByS7jq1KPue93ooGWYtajJcKmXjyrRz EkRw0jMQVjbXjj4HcW0ouT8yPH5fbahjEZKEihsfTS+A4bPv+ccrNOyCub6/yOs46d2egLgO2aX 3J7+KbjO2F+eEIYzEgTko3la7QskmBULAkmb31b/IFf1UohJYWj7cVtBN2 X-Received: by 2002:a05:690e:b88:b0:64d:29a4:c933 with SMTP id 956f58d0204a3-64d29a4cc49mr5162990d50.56.1773078963881; Mon, 09 Mar 2026 10:56:03 -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.56.01 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 09 Mar 2026 10:56:01 -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 10/11] perf annotate-data: Use DWARF location ranges to preserve reg state Date: Mon, 9 Mar 2026 13:55:23 -0400 Message-ID: <20260309175546.916039-11-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" When a function call occurs, caller-saved registers are typically invalidated since the callee may clobber them. However, DWARF debug info provides location ranges that indicate exactly where a variable is valid in a register. Track the DWARF location range end address in type_state_reg and use it to determine if a caller-saved register should be preserved across a call. If the current call address is within the DWARF-specified lifetime of the variable, keep the register state valid instead of invalidating it. This improves type annotation for code where the compiler knows a register value survives across calls (e.g., when the callee is known not to clobber certain registers or when the value is reloaded after the call at the same logical location). Changes: - Add `end` and `has_range` fields to die_var_type to capture DWARF location range information - Add `lifetime_active` and `lifetime_end` fields to type_state_reg - Check location lifetime before invalidating caller-saved registers Signed-off-by: Zecheng Li --- tools/perf/util/annotate-arch/annotate-x86.c | 25 +++++++++++++++++--- tools/perf/util/annotate-data.c | 24 +++++++++++++++++-- tools/perf/util/annotate-data.h | 3 +++ tools/perf/util/dwarf-aux.c | 6 ++++- tools/perf/util/dwarf-aux.h | 2 ++ 5 files changed, 54 insertions(+), 6 deletions(-) diff --git a/tools/perf/util/annotate-arch/annotate-x86.c b/tools/perf/util= /annotate-arch/annotate-x86.c index df9fc0a51b39..c77aabd48eba 100644 --- a/tools/perf/util/annotate-arch/annotate-x86.c +++ b/tools/perf/util/annotate-arch/annotate-x86.c @@ -208,6 +208,8 @@ static void invalidate_reg_state(struct type_state_reg = *reg) { reg->kind =3D TSR_KIND_INVALID; reg->ok =3D false; + reg->lifetime_active =3D false; + reg->lifetime_end =3D 0; reg->copied_from =3D -1; } =20 @@ -230,6 +232,7 @@ static void update_insn_state_x86(struct type_state *st= ate, if (ins__is_call(&dl->ins)) { struct symbol *func =3D dl->ops.target.sym; const char *call_name; + u64 call_addr; =20 /* Try to resolve the call target name */ if (func) @@ -246,10 +249,18 @@ static void update_insn_state_x86(struct type_state *= state, else pr_debug_dtp("call [%x] \n", insn_offset); =20 - /* Invalidate caller-saved registers after call (ABI requirement) */ + /* Invalidate caller-saved registers after call */ + call_addr =3D map__rip_2objdump(dloc->ms->map, + dloc->ms->sym->start + dl->al.offset); for (unsigned i =3D 0; i < ARRAY_SIZE(state->regs); i++) { - if (state->regs[i].caller_saved) - invalidate_reg_state(&state->regs[i]); + struct type_state_reg *reg =3D &state->regs[i]; + + if (!reg->caller_saved) + continue; + /* Keep register valid within DWARF location lifetime */ + if (reg->lifetime_active && call_addr < reg->lifetime_end) + continue; + invalidate_reg_state(reg); } =20 /* Update register with the return type (if any) */ @@ -279,6 +290,8 @@ static void update_insn_state_x86(struct type_state *st= ate, =20 tsr =3D &state->regs[dst->reg1]; tsr->copied_from =3D -1; + tsr->lifetime_active =3D false; + tsr->lifetime_end =3D 0; =20 if (src->imm) imm_value =3D src->offset; @@ -344,6 +357,8 @@ static void update_insn_state_x86(struct type_state *st= ate, =20 tsr =3D &state->regs[dst->reg1]; tsr->copied_from =3D -1; + tsr->lifetime_active =3D false; + tsr->lifetime_end =3D 0; =20 if (src->imm) imm_value =3D src->offset; @@ -458,6 +473,8 @@ static void update_insn_state_x86(struct type_state *st= ate, state->regs[dst->reg1].kind =3D TSR_KIND_CONST; state->regs[dst->reg1].imm_value =3D 0; state->regs[dst->reg1].ok =3D true; + state->regs[dst->reg1].lifetime_active =3D false; + state->regs[dst->reg1].lifetime_end =3D 0; state->regs[dst->reg1].copied_from =3D -1; return; } @@ -544,6 +561,8 @@ static void update_insn_state_x86(struct type_state *st= ate, tsr->kind =3D state->regs[src->reg1].kind; tsr->imm_value =3D state->regs[src->reg1].imm_value; tsr->offset =3D state->regs[src->reg1].offset; + tsr->lifetime_active =3D state->regs[src->reg1].lifetime_active; + tsr->lifetime_end =3D state->regs[src->reg1].lifetime_end; tsr->ok =3D true; =20 /* To copy back the variable type later (hopefully) */ diff --git a/tools/perf/util/annotate-data.c b/tools/perf/util/annotate-dat= a.c index 50c82c91f828..1eff0a27237d 100644 --- a/tools/perf/util/annotate-data.c +++ b/tools/perf/util/annotate-data.c @@ -840,6 +840,18 @@ static bool die_is_same(Dwarf_Die *die_a, Dwarf_Die *d= ie_b) return (die_a->cu =3D=3D die_b->cu) && (die_a->addr =3D=3D die_b->addr); } =20 +static void tsr_set_lifetime(struct type_state_reg *tsr, + const struct die_var_type *var) +{ + if (var && var->has_range && var->end > var->addr) { + tsr->lifetime_active =3D true; + tsr->lifetime_end =3D var->end; + } else { + tsr->lifetime_active =3D false; + tsr->lifetime_end =3D 0; + } +} + /** * update_var_state - Update type state using given variables * @state: type state table @@ -865,8 +877,14 @@ static void update_var_state(struct type_state *state,= struct data_loc_info *dlo } =20 for (var =3D var_types; var !=3D NULL; var =3D var->next) { - if (var->addr !=3D addr) - continue; + /* Check if addr falls within the variable's valid range */ + if (var->has_range) { + if (addr < var->addr || (var->end && addr >=3D var->end)) + continue; + } else { + if (addr !=3D var->addr) + continue; + } /* Get the type DIE using the offset */ if (!dwarf_offdie(dloc->di->dbg, var->die_off, &mem_die)) continue; @@ -923,6 +941,7 @@ static void update_var_state(struct type_state *state, = struct data_loc_info *dlo reg->type =3D mem_die; reg->kind =3D TSR_KIND_POINTER; reg->ok =3D true; + tsr_set_lifetime(reg, var); =20 pr_debug_dtp("var [%"PRIx64"] reg%d addr offset %x", insn_offset, var->reg, var->offset); @@ -939,6 +958,7 @@ static void update_var_state(struct type_state *state, = struct data_loc_info *dlo reg->type =3D mem_die; reg->kind =3D TSR_KIND_TYPE; reg->ok =3D true; + tsr_set_lifetime(reg, var); =20 pr_debug_dtp("var [%"PRIx64"] reg%d offset %x", insn_offset, var->reg, var->offset); diff --git a/tools/perf/util/annotate-data.h b/tools/perf/util/annotate-dat= a.h index 9b222869e42d..c26130744260 100644 --- a/tools/perf/util/annotate-data.h +++ b/tools/perf/util/annotate-data.h @@ -182,6 +182,9 @@ struct type_state_reg { s32 offset; bool ok; bool caller_saved; + /* DWARF location range tracking for register lifetime */ + bool lifetime_active; + u64 lifetime_end; u8 kind; u8 copied_from; }; diff --git a/tools/perf/util/dwarf-aux.c b/tools/perf/util/dwarf-aux.c index 1feefc329154..0710c875416f 100644 --- a/tools/perf/util/dwarf-aux.c +++ b/tools/perf/util/dwarf-aux.c @@ -1641,7 +1641,7 @@ static int __die_collect_vars_cb(Dwarf_Die *die_mem, = void *arg) Dwarf_Die type_die; int tag =3D dwarf_tag(die_mem); Dwarf_Attribute attr; - Dwarf_Addr base, start, end; + Dwarf_Addr base, start, end =3D 0; Dwarf_Op *ops; size_t nops; struct die_var_type *vt; @@ -1681,6 +1681,8 @@ static int __die_collect_vars_cb(Dwarf_Die *die_mem, = void *arg) =20 vt->die_off =3D dwarf_dieoffset(&type_die); vt->addr =3D start; + vt->end =3D end; + vt->has_range =3D (end !=3D 0 || start !=3D 0); vt->reg =3D reg_from_dwarf_op(ops); vt->offset =3D offset_from_dwarf_op(ops); vt->next =3D *var_types; @@ -1743,6 +1745,8 @@ static int __die_collect_global_vars_cb(Dwarf_Die *di= e_mem, void *arg) =20 vt->die_off =3D dwarf_dieoffset(&type_die); vt->addr =3D ops->number; + vt->end =3D 0; + vt->has_range =3D false; vt->reg =3D -1; vt->offset =3D 0; vt->next =3D *var_types; diff --git a/tools/perf/util/dwarf-aux.h b/tools/perf/util/dwarf-aux.h index 939a59c91796..a79968a2e573 100644 --- a/tools/perf/util/dwarf-aux.h +++ b/tools/perf/util/dwarf-aux.h @@ -148,10 +148,12 @@ struct die_var_type { struct die_var_type *next; u64 die_off; u64 addr; + u64 end; /* end address of location range */ int reg; int offset; /* Whether the register holds a address to the type */ bool is_reg_var_addr; + bool has_range; /* whether end is valid */ }; =20 /* Return type info of a member at offset */ --=20 2.53.0 From nobody Fri Apr 3 04:52:59 2026 Received: from mail-yx1-f48.google.com (mail-yx1-f48.google.com [74.125.224.48]) (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 23A4D40B6EC for ; Mon, 9 Mar 2026 17:56:05 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=74.125.224.48 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773078969; cv=none; b=O8jhAQDYLe5bhGdESDv/YKwPHRGgUIj6mfW22UMbOXhp0h+hupTVQnX0An1YDQHtDR7RoMFUHDiQHj/77172VhRgbxE006uh/gt2JWz6cc/KU/O8u3rjNJKzvC8HtZpMqqjy5xlEnfJoVqe08jb+tD28BMaRlF6l90lsj9Tg4tA= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773078969; c=relaxed/simple; bh=yfqm2QIm9DrBHUBV2T+7awknKmkDXbJNSO4jPUJtrEw=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=kAxinJn5giegtNlcrS+3I+8RKIc0fScwqypjkwqZOPQrTcQv30H5tHFbKh84qKuGiRJYKYLyf8bS/YYTT74nj5LZpS2RZ7y5/0+fP9qARtiCimblE4JX49WvPbtzLawvWNiBlC/gHndQIOqS1DwOcn8f+JNh5OExHkyufmi5P4s= 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=ebqiCELc; arc=none smtp.client-ip=74.125.224.48 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="ebqiCELc" Received: by mail-yx1-f48.google.com with SMTP id 956f58d0204a3-64c9a6d6b70so10238328d50.3 for ; Mon, 09 Mar 2026 10:56:05 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ncsu.edu; s=google; t=1773078965; x=1773683765; 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=Icb2OeUbMfEBKUBW7i3iadIMPsLzVm7CTfwwfYCzkE4=; b=ebqiCELcg+zrBS777S3ABGM73wthsfcTxvO9/0Xgs1TizbLlqw870debfi2AsyEGsk 8qki/M44WhuLQdT3jqG9syEqUxK2Hrh9pd6ilOeMXa45CR8K2cVRbERc51l70XXAOdIX I4HOloVN4Lfc0LYJjvT+5hWYysSuPjwlACrpXD5qAK8IwmpwIK8o6KtnQv/Yu1OZCV4J DOSSTC21o3Zn0X1dB+R5OuLyZ7A1jqw8P3CI6Dv9QcfB5zw/EcjWgveb9QxAKysfcjBC ldrBAa0CubgXisjpy9S+cUVWkTQYVgXqK5eu7ql0fh7Hlq7JSkMTwh6QcCXL9dx5ZRX9 HIwQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1773078965; x=1773683765; 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=Icb2OeUbMfEBKUBW7i3iadIMPsLzVm7CTfwwfYCzkE4=; b=G3njwyyws4AjGMtWryLHXhD2Q89ZbhyvDRtLFscOH0aCRXaCq0VNADraD6ygzO3lJ1 a8yvPDEUqR6nW8epdQS/w5sAjceolDGul/RCBzBeAAPuGlDxdmWy5u+IXId/GUHIy0ly GtLRMhvhJbM7zIVYjD33juyx0kjNhdaqTRLkiAGW58rAr+l7kGmvNUmsryY16xgpWcUJ 4SjSrpJ8Tk+IjO05l1SOMzYj7qBYu0oF1LLTOMU2me836lSYgOdtpXasCGZ3wx9ycRCi SYbzQdkQLs27X0xIgen/Appw784zmSTz07TZzJzdkDCgGXuxOBiQgLnDQL7QPiiWf4f9 CMDA== X-Forwarded-Encrypted: i=1; AJvYcCWCjDVHn+Z5DUpV0Ni6XG7EbYyzpht+CAtFA7iavo3Mk/0AEIJhNHR8P2gdJM4S4aPcLbP+uevtx1MEH/o=@vger.kernel.org X-Gm-Message-State: AOJu0YwS9tPHS/our8sJe5wnfSYkDvjIxAHxWWIAN15fPeStuu187Ybt vk0bOjiXV2OTBvHiq7leh8OdYTZRtgA3McGLOD3meM9qDUW1T7oRzWeNmeVEEq7GHQ== X-Gm-Gg: ATEYQzzI1zjC9sisBA6FM9Tx/4mrNsnkvq7XUdoiPaLYe0RK0HuNbgAb+sy0yjj5fRt 52nBHYAIckIze+f42Uvvc5cXx31YcSELeBsjES2hX3E+afV1gAJY4EhUES5Lfzj86y9aiXYzWIG jXB445eybJz+Mg8cNo9fIgkQbwEcnVQkV+lscOjT5fEAfYcsWT024IlAUvpAYsX4DumO/O866PQ aLoctbSGf5lJnM5iAU+ERlJXi1f7IGxyHlD4FYDbo5PX/rjjdVYJFG3OhiBm55pKXeu5AVpA5n+ 1F0UO2V1z6kPh6EKjZqFneBpPOaLCOZwa59DtmO3ikxUtqESzkhPG6uY9JT2PZzQEmYBTY854s+ DCtbxJHWhoev/f7sTRVnR+L+WiOutZuWeamm1BfBuDkuLtsUxXG3UsTyntoc140B5O1M7SSXJms zrF66GULhlmjbsy1O454vVcl1yjLVmkQwpm86VJft6AftjUOlfDVYaWTF0 X-Received: by 2002:a05:690e:e27:b0:649:c308:90ab with SMTP id 956f58d0204a3-64d1418d3admr9582783d50.32.1773078964886; Mon, 09 Mar 2026 10:56:04 -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.56.04 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 09 Mar 2026 10:56:04 -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 11/11] perf dwarf-aux: Collect all variable locations for insn tracking Date: Mon, 9 Mar 2026 13:55:24 -0400 Message-ID: <20260309175546.916039-12-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" Previously, only the first DWARF location entry was collected for each variable. This was based on the assumption that instruction tracking could reconstruct the remaining state. However, variables may have different locations across different address ranges, and relying solely on instruction tracking can miss valid type information. Change __die_collect_vars_cb() to iterate over all location entries using dwarf_getlocations() in a loop. This ensures that variables with multiple location ranges are properly tracked, improving type coverage. Signed-off-by: Zecheng Li --- tools/perf/util/dwarf-aux.c | 60 ++++++++++++++++++------------------- 1 file changed, 30 insertions(+), 30 deletions(-) diff --git a/tools/perf/util/dwarf-aux.c b/tools/perf/util/dwarf-aux.c index 0710c875416f..92db2fccc788 100644 --- a/tools/perf/util/dwarf-aux.c +++ b/tools/perf/util/dwarf-aux.c @@ -1645,6 +1645,7 @@ static int __die_collect_vars_cb(Dwarf_Die *die_mem, = void *arg) Dwarf_Op *ops; size_t nops; struct die_var_type *vt; + ptrdiff_t off; =20 if (tag !=3D DW_TAG_variable && tag !=3D DW_TAG_formal_parameter) return DIE_FIND_CB_SIBLING; @@ -1652,41 +1653,40 @@ static int __die_collect_vars_cb(Dwarf_Die *die_mem= , void *arg) if (dwarf_attr(die_mem, DW_AT_location, &attr) =3D=3D NULL) return DIE_FIND_CB_SIBLING; =20 - /* - * Only collect the first location as it can reconstruct the - * remaining state by following the instructions. - * start =3D 0 means it covers the whole range. - */ - if (dwarf_getlocations(&attr, 0, &base, &start, &end, &ops, &nops) <=3D 0) - return DIE_FIND_CB_SIBLING; - - if (!check_allowed_ops(ops, nops)) - return DIE_FIND_CB_SIBLING; - if (__die_get_real_type(die_mem, &type_die) =3D=3D NULL) return DIE_FIND_CB_SIBLING; =20 - vt =3D malloc(sizeof(*vt)); - if (vt =3D=3D NULL) - return DIE_FIND_CB_END; - - /* Usually a register holds the value of a variable */ - vt->is_reg_var_addr =3D false; + /* + * Collect all location entries as variables may have different + * locations across different address ranges. + */ + off =3D 0; + while ((off =3D dwarf_getlocations(&attr, off, &base, &start, &end, &ops,= &nops)) > 0) { + if (!check_allowed_ops(ops, nops)) + continue; =20 - if (((ops->atom >=3D DW_OP_breg0 && ops->atom <=3D DW_OP_breg31) || - ops->atom =3D=3D DW_OP_bregx || ops->atom =3D=3D DW_OP_fbreg) && - !is_breg_access_indirect(ops, nops)) - /* The register contains an address of the variable. */ - vt->is_reg_var_addr =3D true; + vt =3D malloc(sizeof(*vt)); + if (vt =3D=3D NULL) + return DIE_FIND_CB_END; =20 - vt->die_off =3D dwarf_dieoffset(&type_die); - vt->addr =3D start; - vt->end =3D end; - vt->has_range =3D (end !=3D 0 || start !=3D 0); - vt->reg =3D reg_from_dwarf_op(ops); - vt->offset =3D offset_from_dwarf_op(ops); - vt->next =3D *var_types; - *var_types =3D vt; + /* Usually a register holds the value of a variable */ + vt->is_reg_var_addr =3D false; + + if (((ops->atom >=3D DW_OP_breg0 && ops->atom <=3D DW_OP_breg31) || + ops->atom =3D=3D DW_OP_bregx || ops->atom =3D=3D DW_OP_fbreg) && + !is_breg_access_indirect(ops, nops)) + /* The register contains an address of the variable. */ + vt->is_reg_var_addr =3D true; + + vt->die_off =3D dwarf_dieoffset(&type_die); + vt->addr =3D start; + vt->end =3D end; + vt->has_range =3D (end !=3D 0 || start !=3D 0); + vt->reg =3D reg_from_dwarf_op(ops); + vt->offset =3D offset_from_dwarf_op(ops); + vt->next =3D *var_types; + *var_types =3D vt; + } =20 return DIE_FIND_CB_SIBLING; } --=20 2.53.0