From nobody Mon Feb 9 01:06:57 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 D85A42BDC02 for ; Tue, 27 Jan 2026 02:06:35 +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=1769479597; cv=none; b=e7oiVirlQuN0+BbNok4zSMrguYPHSnVLWc5tFjqoNo992NwqTI0qw4QpI2aEYSVzat/r0UIeRWSIfXP02hVOxO7t7NQRpKkn2gNbj6UbN1+0Hc5K8ZAXZu3jBGh35BKA5OpvMI/D1Mk1sKaoXXX9Uo/T9Z8262tITkmFfs8sv2I= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769479597; c=relaxed/simple; bh=wNN3N/NzCz3P3ZWWF+PAB9YUE3liWJE6VpsO9my8gCw=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=i+bo+0jOYreV5cuKajW/R6jb0YkX8tqXy9X+ZY7uRnttpAiSyMdGuKXvVCspWmQLEXiQEma3UGZ5BZHeEmkSv+uj75kT2UP7KZ2wtq6tv8FImmjmeUbQWptzS0gRyvUqmyTTSjwcdhV60rsWLiysmpcfAULbWqpwzqlw+p78nbk= 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=EzI45eaO; 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="EzI45eaO" Received: by mail-yx1-f47.google.com with SMTP id 956f58d0204a3-6496804204cso2250134d50.3 for ; Mon, 26 Jan 2026 18:06:35 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ncsu.edu; s=google; t=1769479595; x=1770084395; 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=FY3qFNg3bogjE9vzWIEBFHpGKQmyoJ2iv+HZhNJmLDM=; b=EzI45eaOMqfR1K5sebAa/hLwgG74eegui+6cYb503nE0x7ixLeBN5+ee4wn5aOXgNe Nc7BIdgABKpiqdkpPSlw9cH+FpFK5gV85iW2nLq8LprDh50r3DY+AVLnRjeHkkCWy/Ua 2RGi8Z5WNsQsLwVe59dmNS2UxfCHBgaBRBNKbc2/TfvaOWkHRgB/vXoTc8V5b3lkJlt+ 9wxRseIHiStr6zPgzpklug5oF+k7ThWswd/wJ24vhqZQvcD1MMM/HwNUuFQ3jOARPIvZ VGZCtRe0Q0/1wBCRyb+m0N+MVdeIqKVkYQpC/1bQ1KujsHCqZvrY0M99jlmUZXSzYLsp OnIQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1769479595; x=1770084395; 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=FY3qFNg3bogjE9vzWIEBFHpGKQmyoJ2iv+HZhNJmLDM=; b=T12d9bVrhe/iypYuU3Yevf2w5EMvQHjGJPWUsdBv8z3V8ethmBHhTtKQTR1t9G//IM FDNcVzd/02Gjr0GV6cNdH/Yp/iLOekn18UgTJicUhH3LLZjpr1Ou7jFWcQVK0all2vXD 0+Uo4l7YAgJc9KqEpR4NfTPcQOHxvy8azt3rY4SQsA2iJLofPwZ/U+X1tMw2jfr5cAog 8SHK1KpRSCaWqpYgb2Zt1aJuKSl/KngQ9GLFQKj5TddzyUlZDj6PcmZrf9lwcczyQYYX peNz3Cf0g9SGQEgVYWOKj1V/BQe+pYyLn98E8nyXsNEZHGa0VOtJmfl127m0zhNGRdzo fZvA== X-Forwarded-Encrypted: i=1; AJvYcCX3vBnsqHPfbadoqToSVUUnMqLhMlRo6Cq31ALvLRLi8BWKnMuPBglFhPNHWcWsqWZFZMM82bqgB74wAbw=@vger.kernel.org X-Gm-Message-State: AOJu0YxzzI+FnQ0BqkGCor8+/X+T1s/xMKwytyfARWzLcjh5Ph2yfQhq 57Mv65cRUGwdOwrB5J5LyDN4lAM9ST+WhJcloQcvKc+xs2CarcDGyraI7S4k7WQ8Dg== X-Gm-Gg: AZuq6aJppTayg93KPiIwan93EdmDIuOteTwhhGpuehxBh9OJqmIxZ9qSVkSc6BWvF3z 8kO7tPGVCxkdbwWxHMuUl5je4OTN7oa7/SPgO2Vtl2K8d+N4N15phdZl7MFNaev3PHepd4FbEFc hJHEz3VaWlIYiKqEc1TIUrTg1AFVptYpUhc8oF9FPDdckkDd9It0wF6F6xBHvIwDBRR0amSlkAd YotLI3WVQmUSEiZGPPzMgBb2nWDu/J7TBl+m64uUj1KfZ1Us33VULiZptrD7droLivV242TBin9 BUZluttl8CT5kgRqE1TAE/yBSXkLn9yDM6eezveRI6Jdc/rZsDBI7snZjxANONndlU1yjGLDJhm QFmew+pUGPpISR9gzn9pa+AQyWy5W49HsZE6WqxgzYFGJ/2pzklTYQn+nyNs/MDZNDrjWFo0/P9 lLYqh86zp2lA== X-Received: by 2002:a53:8613:0:b0:644:60d9:7510 with SMTP id 956f58d0204a3-64970d8386emr3518532d50.96.1769479594770; Mon, 26 Jan 2026 18:06:34 -0800 (PST) Received: from um773-cachyos ([2600:1700:cc0:94af:eca6:9ff9:6f3c:5de9]) by smtp.gmail.com with ESMTPSA id 956f58d0204a3-6496855d65esm4217415d50.12.2026.01.26.18.06.33 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 26 Jan 2026 18:06:34 -0800 (PST) From: Zecheng Li To: Peter Zijlstra , Ingo Molnar , Arnaldo Carvalho de Melo , Namhyung Kim Cc: Mark Rutland , Alexander Shishkin , Jiri Olsa , Ian Rogers , Adrian Hunter , James Clark , Zecheng Li , xliuprof@google.com, linux-perf-users@vger.kernel.org, linux-kernel@vger.kernel.org, Zecheng Li Subject: [PATCH v1 01/11] perf dwarf-aux: Skip check_variable for die_find_variable_by_reg Date: Mon, 26 Jan 2026 21:04:54 -0500 Message-ID: <20260127020617.2804780-2-zli94@ncsu.edu> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260127020617.2804780-1-zli94@ncsu.edu> References: <20260127020617.2804780-1-zli94@ncsu.edu> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Zecheng Li In die_find_variable_by_reg, match_var_offset 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 type from die_find_variable_by_reg via a new `type` field in find_var_data. Signed-off-by: Zecheng Li Signed-off-by: Zecheng Li --- tools/perf/util/annotate-data.c | 8 +++++--- tools/perf/util/dwarf-aux.c | 18 +++++++++++------- tools/perf/util/dwarf-aux.h | 2 +- 3 files changed, 17 insertions(+), 11 deletions(-) diff --git a/tools/perf/util/annotate-data.c b/tools/perf/util/annotate-dat= a.c index 07cf9c334be0..99ffc6d70565 100644 --- a/tools/perf/util/annotate-data.c +++ b/tools/perf/util/annotate-data.c @@ -1603,19 +1603,21 @@ static int find_data_type_die(struct data_loc_info = *dloc, Dwarf_Die *type_die) if (!die_find_variable_by_addr(&scopes[i], dloc->var_addr, &var_die, &type_offset)) continue; + /* Found a variable, see if it's correct */ + result =3D check_variable(dloc, &var_die, &mem_die, reg, + type_offset, is_fbreg); } 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; + result =3D PERF_TMR_OK; } =20 pr_debug_dtp("found \"%s\" (die: %#lx) in scope=3D%d/%d (die: %#lx) ", 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", diff --git a/tools/perf/util/dwarf-aux.c b/tools/perf/util/dwarf-aux.c index 9267af204c7d..b57cdc8860f0 100644 --- a/tools/perf/util/dwarf-aux.c +++ b/tools/perf/util/dwarf-aux.c @@ -1378,6 +1378,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 */ @@ -1390,7 +1392,6 @@ 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; s64 offset =3D addr_offset - addr_type; =20 @@ -1403,16 +1404,16 @@ static bool match_var_offset(Dwarf_Die *die_mem, st= ruct find_var_data *data, 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) { + if (is_pointer && dwarf_tag(&data->type) =3D=3D DW_TAG_pointer_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(&data->type, &data->type) =3D=3D NULL) return false; } =20 - if (dwarf_aggregate_size(&type_die, &size) < 0) + if (dwarf_aggregate_size(&data->type, &size) < 0) return false; =20 if ((u64)offset >=3D size) @@ -1529,7 +1530,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 { @@ -1541,8 +1542,11 @@ 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 diff --git a/tools/perf/util/dwarf-aux.h b/tools/perf/util/dwarf-aux.h index cd481ec9c5a1..b3ee5df0b6be 100644 --- a/tools/perf/util/dwarf-aux.h +++ b/tools/perf/util/dwarf-aux.h @@ -163,7 +163,7 @@ int die_get_var_range(Dwarf_Die *sp_die, Dwarf_Die *vr_= 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' */ --=20 2.52.0 From nobody Mon Feb 9 01:06:57 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 3676F2C3242 for ; Tue, 27 Jan 2026 02:06:37 +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=1769479599; cv=none; b=XFIYbsws4OhwROEND/HNYKzmy9sxMup1lpXw3DIDqB3zvz6K+Zlr1Tig4SR0RFq2EtUUkTXvxn0cHemSgQUf55/8Kl+p28c/ahYkTLP6gnMCPFvBsJNwcpQl9x+WDnnM3u/7iGXOlEHYTeGs56lXdgDygxHYmSZVoymO3i2M95A= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769479599; c=relaxed/simple; bh=hTTFx/rRjNVyMVuqEiUDG7gMwiCxWrQQwtW4VOPytac=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=aw/MetW+dqs3OHbS9VA2Tnn3NW7Z1pWagWo3+D7Dbvwb9YW1XO+9xsDaAhlnYiKt+JCT0+cscFnhsNSMwHPwn3anJWrdwF7qtDMucDYtnpK9IMmVFgtODs91ASF+kMWwX6sKM3cBY+W1DxQBgrw05rvspumBDQxm5WK6UE0tTPU= 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=Y2EQ2nda; 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="Y2EQ2nda" Received: by mail-yx1-f43.google.com with SMTP id 956f58d0204a3-6446c1a7a1cso4158020d50.3 for ; Mon, 26 Jan 2026 18:06:36 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ncsu.edu; s=google; t=1769479596; x=1770084396; 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=pwwPqivI3qVoDOEZBqAjVAkFtZNukybQuCk65HTVtrU=; b=Y2EQ2nda6Wfqv34SMAEGxFa3cRYQM2i+LvTcD4G9mf0sbb1VmUDaXMWoKhHLvpf/1K DbVuig0HEiA/v0JuvBjNchQn0KtPSUrSaiQ124428MKs+fzoQGNCRL7JYQyZogrpbFCd z14M/JALqx5An+m++quF7va4lZzAdJv7fbEH2mtMCyHSyUSCBv1VTO1ZalhpU+AGQ1SR qDrvwSyWn0gzdfGSgbS5qhgPrxx6rbqSLhVmJeHbxKev8R/Dzjlznb3js2ur2d4Px5Ay zwQJihoDu8LTgzaWbCt69yQL5x9Cthv57aCg5UIIfedQPyHPrJxE0TbIgyuF4xS7gs85 WeAA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1769479596; x=1770084396; 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=pwwPqivI3qVoDOEZBqAjVAkFtZNukybQuCk65HTVtrU=; b=i05JpO6qpm0nu4Dx9ykQuldKmeKaA1xytj5a3MPfb1m9b9+In+CanRzoXBRwUnCIPk qBrByE5pKTb3lm/+d7wDuLHbL7naRnZe/z5NYqaBO67ASL9cW9ylnERCOVzZR9sMnd7o ySur+SEktzk/uftzILpYrEFTT8rHohjbvwxKuKtMNmtQ2+Z1/Up1eNJ8mniNQzh9Zmz0 UaJE/MuoYicDS9jnoZgvrfBs00kBSLGX+R1HzfRWI3paQZ7zzZ/P6i9Y7sIAKcc4l1Ei jVJiTHkpars4N1m50OcPx/E5HQJ5FrY5VJfXvE8L8BYBKhI37uI9CrtsEBGKjTn0xDpH sGEw== X-Forwarded-Encrypted: i=1; AJvYcCUouRLsOQGEJ5r05RcDwdsS7xLty3nc0y8lG26PhbcMV+4GWYywihjibPrZlDavz2X9HfWyaENZlliQW9A=@vger.kernel.org X-Gm-Message-State: AOJu0YyJJParalmQSORKoSrNjzc8HAYf2ifBKhNdxsETfJDgjryIDSeD dKQJqXTc2wzH1bTwYdOat8jFjRxNReMCCtWHR/Lmkj0rrQFXjtrzcUj++i0TSLshGA== X-Gm-Gg: AZuq6aL8sJGlCyhk2i4EbTnllW3t62r50LFgMbUhGkj5EbVi8Gu6CcR++KkO/nVI18h vZD246WyBRuQBVxGG12CMzbuN/gbe089onpXF9ueHvOfZCXgIK5umGen3oXsFyRjNgbmgRMpWMp Nb6E+JJpDEc/bbwiXqS1VcjjbUOTO5avKgePvkDhoEDpWHvNT++ZKPRezuLpat99rWQloaFxiPx lHb95BVnZNTDRl1fhuaT7lJMylzDHtaqFcKlswdvMK6I5Ah05y8TU565Ir/aCD3HKZutfCRvWFx 5X1R0XwRuG7tvtwYXiqLo/VrufuxrCAKhjnLpc/1HFKKdZQbBqYID7peoALSgzA2trZmOWFwWjw tDioYPC4StLgpikQd8YBzXbQvGY2j8p42QCdbub+d+AYrfx1FeucocnkEH0/3gkMGR/8m7bOM3M ibXaWaU/LjsQ== X-Received: by 2002:a05:690e:169e:b0:642:84a:7ba4 with SMTP id 956f58d0204a3-64970d1e483mr4137331d50.85.1769479595915; Mon, 26 Jan 2026 18:06:35 -0800 (PST) Received: from um773-cachyos ([2600:1700:cc0:94af:eca6:9ff9:6f3c:5de9]) by smtp.gmail.com with ESMTPSA id 956f58d0204a3-6496855d65esm4217415d50.12.2026.01.26.18.06.34 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 26 Jan 2026 18:06:35 -0800 (PST) From: Zecheng Li To: Peter Zijlstra , Ingo Molnar , Arnaldo Carvalho de Melo , Namhyung Kim Cc: Mark Rutland , Alexander Shishkin , Jiri Olsa , Ian Rogers , Adrian Hunter , James Clark , Zecheng Li , xliuprof@google.com, linux-perf-users@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v1 02/11] perf dwarf-aux: Add die_get_pointer_type to get pointer types Date: Mon, 26 Jan 2026 21:04:55 -0500 Message-ID: <20260127020617.2804780-3-zli94@ncsu.edu> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260127020617.2804780-1-zli94@ncsu.edu> References: <20260127020617.2804780-1-zli94@ncsu.edu> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" 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 99ffc6d70565..8ff1972981b7 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 b57cdc8860f0..96cfcbd40c45 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 b3ee5df0b6be..8045281f219c 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.52.0 From nobody Mon Feb 9 01:06:57 2026 Received: from mail-yx1-f44.google.com (mail-yx1-f44.google.com [74.125.224.44]) (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 6252D2BE647 for ; Tue, 27 Jan 2026 02:06:38 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=74.125.224.44 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769479601; cv=none; b=KnjuFUBZjaSxujWuum9uPkFa0g62RqIn93Hl7yDAc9oXXQ11l5jNNxJNN3j0NqLX8QJJTuZuPY205WZK6Bc8vdAwX15Nw/fLlhAy4r+g56PDCjNsm1BqVJdtQnuRyPExioToCqeIkj7okez91IkAdUlksbxV1RSSY44571BRZus= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769479601; c=relaxed/simple; bh=IJ67sduqkigfvVKbopudRKuQkhcam3spI5srTIcgYL8=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=MhV9X05GIoGdTKemI1I4QLsPh3DFZXO5QGVsXD15IZ23sgchykxAXuJx12+KGTxSVHg2Orw++JkF+UPK0tKIEjUDK3XTDsMFyEsn3S+vZS90ZD7UNBzXkUadU7EIHrzEqhHcY0HTelKgZqac4JWiQVtKFu5Yk0iHnQxX7jg3nnQ= 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=cx5IWI0j; arc=none smtp.client-ip=74.125.224.44 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="cx5IWI0j" Received: by mail-yx1-f44.google.com with SMTP id 956f58d0204a3-64969550a1aso2331231d50.1 for ; Mon, 26 Jan 2026 18:06:37 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ncsu.edu; s=google; t=1769479597; x=1770084397; 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=E3SRFGPlfEBWXSd9iSIDRLjkWhD7NI153ihmh0SWrFA=; b=cx5IWI0jltVk9zZNdqMFt5ckDqFrClhKBu3CpWKVrjSP8jUlFLKJOlv6tJFD3nFdwX 4M5x2vt0WSIbMRKVZJZvaVen8I/R9S4HOjiEqZHFH7q2lTBvqt8lCzpEnRpR9nFrLNEM GCMfRBTs9DTtlpVXDJmVnQymZlyI67nCFaVFHdQWUi5N6gzFJ0M8o6QtYWr8UgJat8Og zkMwrUxmF4zAzeMXSm1/hNRfDLw3YZnRKU43kMsBeK1hqzeWc3Ib9cHK/8fLs812CyiW HPFHhzhmvzpOJdjcKMpzv+LDoPGN3zM8NQTi2W19Tw2Es7i54YVLDPtUC4rg0mf1n/ZP u8+w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1769479597; x=1770084397; 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=E3SRFGPlfEBWXSd9iSIDRLjkWhD7NI153ihmh0SWrFA=; b=Fi+0FtNIhPCoIvu6yXoiyYLhEvuy32xyTT5OFNyfsMpa80h2xHBnKLtKdLDjNQuZ3+ eG/gc9tDKANxZ/LxQoYrjil1xIu4mnEWFi5AT+Y4xZ9/8iUIUbQr9t6y2EiPixWeoQHy sWrhKa/spT9q0xJGJvHJN9NvZsbgBeGVI1KIjDvqbC83QLqX0zey8lNGPHxlJI/oTgEa cbzMSXsiyBoS8kvzCzQIG8BcYoGn1p6hfp1QW71KbvHcbrmDTdMrz3JuaW0+T7kSHNvS cAf6zGd/uYO5sxoKpSkwRbN603siXhraSQKxBUySKKqESho050tD+TUufX0/m6sbRd7K v7Bw== X-Forwarded-Encrypted: i=1; AJvYcCVMv9UJ+RjVbndWgTRz68V5v13PrboiDMcLRi9HgvKgvsIxEaTBGR+GY6ivbC8WSxIx0hZ/e8RaWeM3Oyo=@vger.kernel.org X-Gm-Message-State: AOJu0YxMcyBU1OV3n4dKBf1CCnn2soAVBuG38ug4koi4yvON81tS2SkS MxUKJAIhxKpHyRw1Vm6HQKj52VnrhQ7QtQVtsGARKzmLxHKKE0diM8A7IK15GNjy1w== X-Gm-Gg: AZuq6aLQWn8O6YtGHFFecp3243qJWWydZeXuUljR/XpUITNmsN9GQ6BLcdB3wYJJdC2 zJ9WZhoV0KktVbtCxGk0xKn3dJbOQaIa2X9avxQm94vNbBC3e1ZkwaVUK+f0LZQpaLbvezHRIyv kXsDXqtdkF2oZEYa7v4keK3aOSvnpXMJ1lDLmrzFlOuM5vV9J0jbpXNLeTitR6HFqaNv8IXRmll UaFr8r++5y6JY67gD7FGamA0GlHAPuOfxPwwsgFpOL8oTBo6gDutvmZ0qQcKQcsFvbMSuUQEiqg +VI+TZ2kntYpNO2vNzIU4T3W6ygJMpN80qwwkCsV3Py7TsU6OfuttFJErdcgzmVMdIMhiYtQ0/X GQImq8W1GR5KP1YERpC5qay/mR2BUdhYG3juqas0xaXJ9Wj2e4SY+uwsHN3YzCdSGRYlErguTph 2dTh4vOarq5A== X-Received: by 2002:a05:690e:d08:b0:649:64d4:8127 with SMTP id 956f58d0204a3-6498fbed0e7mr15330d50.4.1769479597010; Mon, 26 Jan 2026 18:06:37 -0800 (PST) Received: from um773-cachyos ([2600:1700:cc0:94af:eca6:9ff9:6f3c:5de9]) by smtp.gmail.com with ESMTPSA id 956f58d0204a3-6496855d65esm4217415d50.12.2026.01.26.18.06.36 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 26 Jan 2026 18:06:36 -0800 (PST) From: Zecheng Li To: Peter Zijlstra , Ingo Molnar , Arnaldo Carvalho de Melo , Namhyung Kim Cc: Mark Rutland , Alexander Shishkin , Jiri Olsa , Ian Rogers , Adrian Hunter , James Clark , Zecheng Li , xliuprof@google.com, linux-perf-users@vger.kernel.org, linux-kernel@vger.kernel.org, Zecheng Li Subject: [PATCH v1 03/11] perf dwarf-aux: Preserve typedefs in match_var_offset Date: Mon, 26 Jan 2026 21:04:56 -0500 Message-ID: <20260127020617.2804780-4-zli94@ncsu.edu> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260127020617.2804780-1-zli94@ncsu.edu> References: <20260127020617.2804780-1-zli94@ncsu.edu> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Zecheng Li Since we are skipping the check_variable, we need to 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 | 21 ++++++++++++--------- 1 file changed, 12 insertions(+), 9 deletions(-) diff --git a/tools/perf/util/dwarf-aux.c b/tools/perf/util/dwarf-aux.c index 96cfcbd40c45..ce816aefa95b 100644 --- a/tools/perf/util/dwarf-aux.c +++ b/tools/perf/util/dwarf-aux.c @@ -1420,26 +1420,29 @@ static bool match_var_offset(Dwarf_Die *die_mem, st= ruct find_var_data *data, s64 addr_offset, s64 addr_type, bool is_pointer) { 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, &data->type) =3D=3D NULL) + if (__die_get_real_type(die_mem, &data->type) =3D=3D NULL) return false; =20 - if (is_pointer && dwarf_tag(&data->type) =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(&data->type, &data->type) =3D=3D NULL) + if (__die_get_real_type(ptr_type, &data->type) =3D=3D NULL) return false; } =20 + 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 --=20 2.52.0 From nobody Mon Feb 9 01:06:57 2026 Received: from mail-yx1-f44.google.com (mail-yx1-f44.google.com [74.125.224.44]) (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 93ADA2BE62E for ; Tue, 27 Jan 2026 02:06:39 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=74.125.224.44 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769479602; cv=none; b=Zk2jXGmFXuS8MQbIL+D5biJ9E9c4ckdq4K6EowxymtwkBMoGHehOFgytmPDmA0OE8fr57QR8FPpraRjxHh66z2PGiOaOp6b2XqamAexriau5eghEqkA3q6+bkFLmKU8P8Zf+UBoSE10NjwM/L06d3Im8XFZ/fUZyNx8PDPhog7U= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769479602; c=relaxed/simple; bh=qhOxCaKgcUM5iY1rf7o/kU9mLoxJMGT3w3Oo56OLRqI=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=eep5Us9+C7zCUvP/itJ5L1OsYkT/sBl23XfjrDERV+E5wIU2GU8vOGtuHqBUQwG6Rwh1EZGq+depc75+ZvQFeJJU4PsNas02MjAAmbgJlzYRLuLSXCDhzhvkUX/LiLoinIwhijLvQxPjK2IoSyx+fHjn3/pkgHF28pFj0u/6OAI= 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=C+MyFG3N; arc=none smtp.client-ip=74.125.224.44 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="C+MyFG3N" Received: by mail-yx1-f44.google.com with SMTP id 956f58d0204a3-649605d3664so3513552d50.3 for ; Mon, 26 Jan 2026 18:06:39 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ncsu.edu; s=google; t=1769479598; x=1770084398; 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=GS6cufmSv5Bys/J7tQyqhkjwp+KCu1swmTcv6haTRuI=; b=C+MyFG3NQJaNmzUHOxSPDDyPk6zF7KaRJtVGiB6b5dzi8SCbA5iwQ++fVy/9/p8LBD 2HFyESRfFi/gv+s3yTqxHverncDqbkVbmz+NXhybkKnAFPwoEFRSdbIO+CqGaP8O+u2Y lihBi30TRADe1+7C3+Odn/5G/59sqsru2Iq4cWZ9CYQieTMntNYrnMdQFVpH2Ru4ADq6 5gekU7LCVdi/foUhZY75hv0r+QWPCgSYjg/CjdgvrcOb3xWHZnrcv6rl34IS6kqyXk+p KnPMuGHlpHusyFZa4/rMjRJJEap4hg3uA21o8EjJAKGoKorDr2KXwsdu7BxUMLmgvw4R QwYg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1769479598; x=1770084398; 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=GS6cufmSv5Bys/J7tQyqhkjwp+KCu1swmTcv6haTRuI=; b=nAcbFZAvhMN9XTTjsBNm99gB9YNa7tOPvK8JREH7CrpZTQfubljj8tm7NUfAACo7Q7 f7UtDdBMV/46dbePksCtI25pPCxh/ZqYeX4qFWoa6QtlAlpBuN7NWFiKrad7uwf7xYOw pl61jF2+R4BP85x6ksIl9Rp663jOCNreNPYwCOkG+5ftQbM1xVbJRJSKFLWrxnbKEgIC nJSkz/LOM3AB3ElgjNjY9GO3GRU6VtwOqRml1F/QBDcjEpgnNVsFCBM7SgUpt4RcIZkW cNOetqEmEvOpPBzqPn5DSmW0rbUZZhd6msTOVkKeR7lj89lMh25zHLgEbuGy4rOlcNcd 8wMg== X-Forwarded-Encrypted: i=1; AJvYcCXImyV/SrhnOXD1vUPUVv78dhDWPlCgbkfc0j5wfSzidZW9MiPw6D+ySRA+pJx/efHNoMAmkKapNeV+q+8=@vger.kernel.org X-Gm-Message-State: AOJu0Yx/ldxGAW0EssiwcgH2Nt5Pkrd0kiuDrfSD0uvv3rOVcIUu6AjK lMpcdvnnHY+mgh6M8x32hhAVuEK5oIyzaaO94jY5b/Moom2R/QFfwMLTClsAVTcy0A== X-Gm-Gg: AZuq6aK9ipMh1MqsOtChxjTB1Fsjs1gYD+0ucTruWisTAojGKM/6NSecm0r5JY+Mzug 8x6LJyzlJNpxZapnb0OK+vDKAKxXmlX9STxoA3uZpK7OaRnHpzZqqiFn1CNKqZESLCK/PXYO4Ua MLtElEYAFEf5q0TVK9vHpXB7rOExLTnNdV/V6TAKAEmNPXIZ2vaXsZojqIVy+P5odqd7oGCzhb8 aEioIJXbnn6bGqi/gKSh2z8FmBekz1e30KR9zniaVcoZT+KfjguRuY+x7E75iDsgLMrj00UPJJ3 t9T95+xfjXFK35u2ILRN6JbBeUMTZoAD9SNxj9gSEW4lkF5LuXURuIHGKUK4pmEW7p7cr+4JC+6 NkbnT7smUBk1xQIuE6TUYKJFBH9yiepkusF8U/T5+/4haBW+xxZjqq7pKMveaMjfqI9XQ4NIkl6 twLV4Cb/rBqQ== X-Received: by 2002:a05:690e:d88:b0:649:34da:fbc0 with SMTP id 956f58d0204a3-6498fbed29amr16218d50.7.1769479598080; Mon, 26 Jan 2026 18:06:38 -0800 (PST) Received: from um773-cachyos ([2600:1700:cc0:94af:eca6:9ff9:6f3c:5de9]) by smtp.gmail.com with ESMTPSA id 956f58d0204a3-6496855d65esm4217415d50.12.2026.01.26.18.06.37 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 26 Jan 2026 18:06:37 -0800 (PST) From: Zecheng Li To: Peter Zijlstra , Ingo Molnar , Arnaldo Carvalho de Melo , Namhyung Kim Cc: Mark Rutland , Alexander Shishkin , Jiri Olsa , Ian Rogers , Adrian Hunter , James Clark , Zecheng Li , xliuprof@google.com, linux-perf-users@vger.kernel.org, linux-kernel@vger.kernel.org, Zecheng Li Subject: [PATCH v1 04/11] perf annotate-data: Improve type comparison from different scopes Date: Mon, 26 Jan 2026 21:04:57 -0500 Message-ID: <20260127020617.2804780-5-zli94@ncsu.edu> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260127020617.2804780-1-zli94@ncsu.edu> References: <20260127020617.2804780-1-zli94@ncsu.edu> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" 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 8ff1972981b7..8ea3e8b024e8 100644 --- a/tools/perf/util/annotate-data.c +++ b/tools/perf/util/annotate-data.c @@ -1634,7 +1634,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.52.0 From nobody Mon Feb 9 01:06:57 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 494A52D593C for ; Tue, 27 Jan 2026 02:06:40 +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=1769479602; cv=none; b=Vw/DwODwGXhobQW1ScbBT6OIN9ipL10iVqT9ncUyQ0cq1hmWYlNuN4YlZcxtGE4mpVPLdIiDRUDWBcIK0GfenBndSbJU8Lkzpuq/Q89ZjIcQB+NzWkQrRsBn0Cz/yr5vsgIyq2Hedhy1MMtErs/h2PvarYfZvKPy7KBSitQ3IvA= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769479602; c=relaxed/simple; bh=SoMJumxPd4W2dw4TJ+tdyjRZta389m1tZHjTj6591bo=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=VBGL9l/75Qz5RHATJAHvs497jqCRwjMNAPXTKHDw1UQC2kEm39At3BjrKXi+byLqJm6D0usVY0pFrrpEcgJsVqVjn51m6tlQ+D/lOeVk8c3PS8irQvfCrBiCMkg8WblzoNjTqYqcVmgyzxtleDJlUclQ2WDDVIzv/QCS2pTvFXk= 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=fMk6hrak; 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="fMk6hrak" Received: by mail-yx1-f43.google.com with SMTP id 956f58d0204a3-644715aad1aso5925591d50.0 for ; Mon, 26 Jan 2026 18:06:39 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ncsu.edu; s=google; t=1769479599; x=1770084399; 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=jEdogTaDxzCQioYG14x9ed5a66Fqemos79HWYjw4Gx4=; b=fMk6hrakbIcwGZiZY5V0M2CHU3dYcC5DHHrYURBVxSGVxSh89KRf+6ABCNEPnde13K GdOkd4/o3jMbx56Tx1lmexWtuRU90RNFs/wMro5cATpzrJJOWLkGU4zGEWpNtbY2jeFj 7APjH+KLA1GR7VEwzPw6JE5FOTzJhfhjbfKzYCRbH97FCzq6WZ+Yc9J+svgY647PgXPv IPtI+lvocB5jJcHTXmHnRWigffcE+8qKK5S4TP4hwVcLjaLo04Ox62YIFN2CG8R5AGZF yibJvX6a9nUccFLm3QsR+IEPGQZ9lK9GPqpU/GdfkRyv0ptxWu7Hp0IfUmjAYFla6Do9 LgOQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1769479599; x=1770084399; 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=jEdogTaDxzCQioYG14x9ed5a66Fqemos79HWYjw4Gx4=; b=GGHOCEfj4dooQThBjcQiD0t7AlaHi+9nVPNCMrRJPDpkA4cJ3yY/0AhBY9R1Xdy2IC ojpMZstqKkQotRHCC6yPfKhKKP4RMFInF+6a6yO6kV4/nsoMhXwbJtl6YQ4JvHiwTkvj aKWdLPO5CgJ7/TgwDJOLlprYiL8tIFflEE1zeKlHUMSIgYkSgnkzSkl4bQ1Jm47z0fBv Z3n7ar7bckokXwv657vXMwpuIVl3+mroYbRDrbE0IsAAszWg2Qo0IqT22OwbmlHanSbH GQbRYjqaOztamOLPgOdZPmfjIWQYR9EipOnhLFwgbOFz8obhX+tE0TbTQbAIep2cK39q NDqQ== X-Forwarded-Encrypted: i=1; AJvYcCWSotSe0hXlV2jF+u3KAoNjHBRI/gkkLE+rDg6WD77Jd3htNRZ2S7x42zF9qh+3N42BF1Pug3noUw+FUE0=@vger.kernel.org X-Gm-Message-State: AOJu0YxtzqIcBX14Z7+xiCEaEULAovJuFEodSA/p1iAHsCG7qfmTApkv 48YCT4bTKIT244Q61b31qn7mZ6vydXSRmWkW0AEQJQDMVAGP+hH4kDz6tEVkSrWJmQ== X-Gm-Gg: AZuq6aIJZv7r3VGzyfBOz7dUaBkovtMNZwFKECEJ2ADmySbdH9s2zjxPzoJy7KL2dcz hNl8lRAP7YWAU/IVV5TUlMueQ+oXXeYuyNn+SQAHyZ8hx1XwJbRtvpXms009v6FZMZ3bib2hgQB +OzgRBCiNNMp9FokcTfkgaGWNgbIkEh4MTsmcLFmLjkcSyIwt/THrD7Ki1W9CfszJhyPVS6CHoM bwWcb1R2JCZut3Ny2OGpjsmRg8/QCkXEmsUckEJY/DrcMN1Z0rL86l03oC0O2exzNKdu9tYDer2 DPzlpJtQdxBHL4BLwPyjhXobk5f1mYkPwMndOIJAp7Fvxfw/bOPtHAPKIhqYK+BPne6thiKLjS7 N4CYwFx2iRqugYepkRbXWvwdvLhwau49SkuMQwoOOfv62iSV0E/M2y0OPyeFXUAnqgIuxsPuI1p kWkkgbGsstWg== X-Received: by 2002:a05:690e:c4a:b0:63f:b2b3:8c2d with SMTP id 956f58d0204a3-6498faa7712mr48308d50.17.1769479599102; Mon, 26 Jan 2026 18:06:39 -0800 (PST) Received: from um773-cachyos ([2600:1700:cc0:94af:eca6:9ff9:6f3c:5de9]) by smtp.gmail.com with ESMTPSA id 956f58d0204a3-6496855d65esm4217415d50.12.2026.01.26.18.06.38 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 26 Jan 2026 18:06:38 -0800 (PST) From: Zecheng Li To: Peter Zijlstra , Ingo Molnar , Arnaldo Carvalho de Melo , Namhyung Kim Cc: Mark Rutland , Alexander Shishkin , Jiri Olsa , Ian Rogers , Adrian Hunter , James Clark , Zecheng Li , xliuprof@google.com, linux-perf-users@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v1 05/11] perf dwarf-aux: Handle array types in die_get_member_type Date: Mon, 26 Jan 2026 21:04:58 -0500 Message-ID: <20260127020617.2804780-6-zli94@ncsu.edu> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260127020617.2804780-1-zli94@ncsu.edu> References: <20260127020617.2804780-1-zli94@ncsu.edu> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" 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 ce816aefa95b..ee72b7a4a65d 100644 --- a/tools/perf/util/dwarf-aux.c +++ b/tools/perf/util/dwarf-aux.c @@ -2125,13 +2125,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.52.0 From nobody Mon Feb 9 01:06:57 2026 Received: from mail-yx1-f54.google.com (mail-yx1-f54.google.com [74.125.224.54]) (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 013EA2D97A4 for ; Tue, 27 Jan 2026 02:06:41 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=74.125.224.54 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769479604; cv=none; b=YAMJU2OvLq62wgizGHsPhex/4Y2jAtQ6xE6t5VGOgwUQMr+LXbhOuzTgKiz1N636oikDOYRqyiFJVGewiFceKfA8m/9E1xWyn0DFpmGUpjSqqjiMgzHv/ITSiXISgWCeh5LD68+s4C0ipgUUw3k0S8GTHRWuRgT7bAkBRFhowew= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769479604; c=relaxed/simple; bh=mYBobRXu3FK4wXmLvDov/G1ul6SSw5NijXnRXbItZpk=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=CNh9ronCGm7FxLu4Bg2hJiz3GrsNe9FGnaBV8TbTCWY9wLXe3pNHIBG0FkwYhnApfOl0ljfn1j95CrsQIIEIXoNLTImraWDLPwRjbK3ju3OtWByuqfNvUdFCxLGm0krBK+z6XjW13FLphioF8By1Ou1t46mKXIm+rTKpylORLGQ= 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=An2dUA4x; arc=none smtp.client-ip=74.125.224.54 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="An2dUA4x" Received: by mail-yx1-f54.google.com with SMTP id 956f58d0204a3-64965ee303dso2632614d50.0 for ; Mon, 26 Jan 2026 18:06:41 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ncsu.edu; s=google; t=1769479600; x=1770084400; 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=iNHFu4kzRwC9eEJaKe6PAV5wflRvk28X4nOD9s6tJhI=; b=An2dUA4xcnbtdFDvXT66q7tFj9s8SiMmb28O2pxbxh1BDRRpx6nSlF0QFRLCwbwZTE amLJd0I7te/OfOFsCiqq8P4U2x0/2DKKQZfFN9MaSPFD1m0lVC6Glg0v1QEmjNwPuQOg 2mxtbPHTrpamoFjhB+Bpy9TUSPJVRG73xApzijknou1x80KkSjQmUy+tY1DljAP9LlUQ IFfsCN4aEl90ldfypI7rwi3u1LvIIamjIozsLDPuWLvW31cwkDoOHqFWRzRpGSeKRlWB xgkBklDxE0xFDOdLFqzFr6bH3hClyVKnic6dWfkPFTaoEtvi9Z9FPQfS09PL3+VaCYKR 0ooQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1769479600; x=1770084400; 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=iNHFu4kzRwC9eEJaKe6PAV5wflRvk28X4nOD9s6tJhI=; b=CXFjXYpi4QKeuqXaoWEdO1m3IGPfTGQDONjduxaiEPcC8snTJ2cqme2cNetXSllo5q 3oB+WffvTS6/sXNyY5I9IZkJJXUXkMMmxK9JFAZn2vP5ulGVAylBDGDA795KNYkMVVtF xz3G6fnfGWEn6FtWGBFvXj+p2/0uP1buySdKqFkJXij54cEvmAEqRc80fuzQEn1xL+z7 EdHFVKMVW/kz2pOIr1ubee97dp0Pi5OhJ/ldBC0nbCFKtdZ5IbL1LcoXwaLmsUIXGxAv A2nqKPLkSB0K6d/DKz2FYoVxRfSPvPDbm7PR+A1h6IRyNZudl81sFUVPId5vLPlveVeC dOlw== X-Forwarded-Encrypted: i=1; AJvYcCXSaugKIM8+5pMDkw0gi6mxUIqAB00DTaw2TBZ2xTD2J/+lngFw2sbmc9hE81D6Lwe086LLcGovEzoIAEg=@vger.kernel.org X-Gm-Message-State: AOJu0YzzFD3tibHQTqWAjRIsIGr0DAu573rvewLTh7v2OHH54PstTQKL 2J8bTm4ZDdbYZKd6PLPc2b373lyLu26qb1Y8bbTpJ/8wB8WttucdY65nQ3i3ARlObw== X-Gm-Gg: AZuq6aIOohl9kvS7rKK3KMU+WevRJQLYOx6pAPPruqoEkPp8m5m5hUFHT/ly4GDySbR ffARRGdQDzbGhvMdEkk6tQE9r9uDBF3wHdgHN+R+jHNlcSFF564mpXh6a9wXAQYc6BeBN1tNWC/ B2IOqPC8qzvxyqlavOmyrVyECZbaPsQ6HXvFJ7l9AfkRYZt4bEfM+7D0f00S38j4U0kCNL9517k XxhEyxf504BwyBljUe/IIyJoygvr4H79m/Gu5+pnAsQJmDS7Y8zejwB47D1R78mBIwXuzTBOM0v wHK5cnzuJAWY2M7xqBq6ukE7VnCfXTukPlL8uvieWw3BrAEHV3BVJUcJM7oSzRW0erXltL2+ZwB AS24dDXOCYefX/mXOyvmzFdsgJo29njk4iv6Z1BDRmfMHs+Fc24ETZKI11vg4EAE336mgJ8zm8A EOJNWMq4ck1g== X-Received: by 2002:a05:690e:1698:b0:649:447b:5857 with SMTP id 956f58d0204a3-6498fbf6fecmr11847d50.40.1769479600319; Mon, 26 Jan 2026 18:06:40 -0800 (PST) Received: from um773-cachyos ([2600:1700:cc0:94af:eca6:9ff9:6f3c:5de9]) by smtp.gmail.com with ESMTPSA id 956f58d0204a3-6496855d65esm4217415d50.12.2026.01.26.18.06.39 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 26 Jan 2026 18:06:39 -0800 (PST) From: Zecheng Li To: Peter Zijlstra , Ingo Molnar , Arnaldo Carvalho de Melo , Namhyung Kim Cc: Mark Rutland , Alexander Shishkin , Jiri Olsa , Ian Rogers , Adrian Hunter , James Clark , Zecheng Li , xliuprof@google.com, linux-perf-users@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v1 06/11] perf annotate-data: Collect global variables without name Date: Mon, 26 Jan 2026 21:04:59 -0500 Message-ID: <20260127020617.2804780-7-zli94@ncsu.edu> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260127020617.2804780-1-zli94@ncsu.edu> References: <20260127020617.2804780-1-zli94@ncsu.edu> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" 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 8ea3e8b024e8..970238bc81b7 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.52.0 From nobody Mon Feb 9 01:06:57 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 AFF972D46BD for ; Tue, 27 Jan 2026 02:06:42 +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=1769479604; cv=none; b=Xo6BLNzl+cyPsfiU7NGj7a+M2/EVdG7snO8HXvB0d5410zdnHkbo4/uxwETmvtwKN+5HIpA4MSkgeEuQuIC21FD4eqyQSpFBe2MewpQyfBQXB5Wokh79IJcnj2I+mhaOH1pv4tv3MVslOcR6VYpw94BGnl8ijTdDl27bnJKlQ/8= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769479604; c=relaxed/simple; bh=/ewm3WATBiT0DnxOwn8y9wg14IR21nssXLkB3T2qWfM=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=uGUzm3Uk6FY13O40T1DWiJwIdoKa8aScklAJoclZ+rgVo1L6Pt4lVuoGUBJDlqixm1FPw5g/MfFqgIK0yPWp35MWMvrcsGNvLLtwJF0QYdtYN6J+lTt/VelvkxFzWYAPPwLEVoyK1s1G6TDVPireRfBRIhF/Ywiwsw4C/UiTNPc= 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=Co/0hxmy; 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="Co/0hxmy" Received: by mail-yx1-f52.google.com with SMTP id 956f58d0204a3-6494a3d92f5so5511333d50.2 for ; Mon, 26 Jan 2026 18:06:42 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ncsu.edu; s=google; t=1769479601; x=1770084401; 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=RUTDEas+pFI9zxM7B/p19P+ipqufAuvebaix0EtFBQY=; b=Co/0hxmyI3nuwg11HZBvmBXiAVQYX35HSgWpBEIcPcmWFd8ljQ6ylnQY0Mx4DzxOeI DV0T53ZinfTM2FUnJs6l5FJl9SR1ASzrqmIi1WwNOo5YDqvBkqMhL3K3pbmyOogP2ETn 1Sx895o693ic1fyUV7X9L8xTqGxxCqicGtoTlVsp7mlcFg5aCR+STHNtf/3vfulozxw9 neiL2mPjMoS9QoXihdKSHUGBlBm7RGhKX/6jdmbKJf8IHvaqHL5JKtocTNNX94d9gNmr g/tl8Evyr0ingYEifNZU894ex6ZIeqa5IeoLKx3DrGKSSAtuBQwgWvFSFkucJDP6pSkQ v99Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1769479601; x=1770084401; 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=RUTDEas+pFI9zxM7B/p19P+ipqufAuvebaix0EtFBQY=; b=N0Q2Zve5pacuJSJgPG31bQP5MWc7MebkrBwY3CzaLHJPSgYL6WTS6iq67bPFUzartG mv+4QZZzKdNKQnqkQrjaUmXvEmTm1+h4Xa/Foht3rZXuMzwkCPK6zhn3fwoHLk7LJl2m MbvdrIj6Oc7T06qQOJi8HkALT7N0E0h3cDyQ2f/higD65qOszRHND9UT0zIDn2Z4SMuU wnb7VFSwAhw0RiiFYVus9re3AxFcH6gnYePmhJQCrLJpy26EVbOVZqo49zwr2x1uKJ2J k5ctVLiyHDkKcOODovYu3r6GtM/+ULHYI9ZaMrFG4hP7UA06q5KNZ3YijyN+X+MXMSDh rCcA== X-Forwarded-Encrypted: i=1; AJvYcCUYO+5s3v5tFhYI2EZgo1020li1Ft1aWOvol5HiDOd/zrxNPaRHpEjrXZfzfhn48yATM+3a+gPFrAyLa3E=@vger.kernel.org X-Gm-Message-State: AOJu0Yz2KQQPB7bFuhMk0+sa2bS1n36mqZUvvaSbQADhg6kgtlpBsThb bG4ZeLFxoXg6WfVms07E31KUOVy6Ja4mSzb3rQU4t9NiQJpGkatjBHd/O6UHbJGf6A== X-Gm-Gg: AZuq6aLFlFkP9KZWb2v2elm+OC/qwZELfLeMHv6B1S3nrFjvsTf59+sREVy1NMEzqJ/ q+9yeZGDkGVjjlnGYdjSph9EtQT07cBN46HRufIOhhCoxQvuiIAbcbTj/tjTWkyeCPC7nYOJys/ XPXr8h9nDTkzHXx5WXgzo/YTAu7ndCqzqdiQ1TA/pHblwqxcabQ3sjW4G+sr2/zK1ge4CS2+uW5 5+AYe2xlNv0TXXAbETS+wFO1TXydhS3dAlFprd1Ki4nwfiJCJtFQzicXGMnsF7IydEKC6/jUuoW VhRGsceB+eu5Piyx02egMffDQzqWqX/6ToWPKTAo/noLFAEuD6ajOADdMO/j3DAGWWDgwx9qs4i e325QToLV1d1BgIUIkSTSuGeA16QFScHZOOr7w5MQ1WeI6Wnmi1YKbkidccdYkbVRx0FZ1nxqgh MOejpU0Bgrxg== X-Received: by 2002:a05:690e:4088:b0:63f:9c70:84ed with SMTP id 956f58d0204a3-6498fc46089mr694d50.58.1769479601298; Mon, 26 Jan 2026 18:06:41 -0800 (PST) Received: from um773-cachyos ([2600:1700:cc0:94af:eca6:9ff9:6f3c:5de9]) by smtp.gmail.com with ESMTPSA id 956f58d0204a3-6496855d65esm4217415d50.12.2026.01.26.18.06.40 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 26 Jan 2026 18:06:40 -0800 (PST) From: Zecheng Li To: Peter Zijlstra , Ingo Molnar , Arnaldo Carvalho de Melo , Namhyung Kim Cc: Mark Rutland , Alexander Shishkin , Jiri Olsa , Ian Rogers , Adrian Hunter , James Clark , Zecheng Li , xliuprof@google.com, linux-perf-users@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v1 07/11] perf annotate-data: Handle global variable access with const register Date: Mon, 26 Jan 2026 21:05:00 -0500 Message-ID: <20260127020617.2804780-8-zli94@ncsu.edu> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260127020617.2804780-1-zli94@ncsu.edu> References: <20260127020617.2804780-1-zli94@ncsu.edu> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" 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. 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 | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/tools/perf/util/annotate-data.c b/tools/perf/util/annotate-dat= a.c index 970238bc81b7..177aa6634504 100644 --- a/tools/perf/util/annotate-data.c +++ b/tools/perf/util/annotate-data.c @@ -1230,6 +1230,10 @@ 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) { + 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.52.0 From nobody Mon Feb 9 01:06:57 2026 Received: from mail-yx1-f52.google.com (mail-yx1-f52.google.com [74.125.224.52]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id C5EDA2DE6F8 for ; Tue, 27 Jan 2026 02:06:43 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=74.125.224.52 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769479606; cv=none; b=S0TIBZwaG9olx4tvXow1z+VPxNJV0oduuf2OwlJTC8qtiWduUJafaoOXzdQPK+Vk8PNHxg/+mHz3Opu1uqR1j396GvTjzZqOTbJxIXOADXOFjem1VXZd4J+EFBVA3AfgkFuj/BOsXMG3hXNpw3gKllHunwEaRu3dHnb8rLpScf0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769479606; c=relaxed/simple; bh=2GxPZYiJF6xLsgvMaP8XuY6n8Hllxdzw/fL0QUM7ek8=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=rcAR5Q4J/7+/yTuoQ4OZQrqdUeZJB6IneUrN9UBSPHjkkTAdHg183fw5vmp7qtYxk6hSh2S+i9mhKeXigYsO80/p2wfl77gUXNzMs3EcUOeBHOId5pU9SuQor/eUaX3rou/xb8a88WZ1lMXD3Oa5EYyG+Z1wTLsZXJN3KysEbWY= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=ncsu.edu; spf=pass smtp.mailfrom=ncsu.edu; dkim=pass (2048-bit key) header.d=ncsu.edu header.i=@ncsu.edu header.b=U8Ymw189; arc=none smtp.client-ip=74.125.224.52 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=ncsu.edu Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=ncsu.edu Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=ncsu.edu header.i=@ncsu.edu header.b="U8Ymw189" Received: by mail-yx1-f52.google.com with SMTP id 956f58d0204a3-649523df010so4618056d50.0 for ; Mon, 26 Jan 2026 18:06:43 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ncsu.edu; s=google; t=1769479602; x=1770084402; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=0f1gY9r/WleTG9LFphI7gM4RwbmM6PYZcL6EvuwpZSY=; b=U8Ymw189dnZSLuThnvPPhA4l0sfY9TlhX/ICd1AdOzAgGm+iMrSQ7IhK4HFd99Vxek V4g0Q8Uy+2maZAUDGUtscvROOMUNzCpgvpPfhd01jRdqjZ/4hqE6P05Dvdo1G0I5ZkB2 8/V729NVo579w5r0Qr8XzWEaBZsBm1VJZ7bDuspc3I52sJC0R0olr7AthFGcVejXP41E Ijj62aV1+Z5AyBVu0AXpIFBn06bVORges8yAB8njHccocs0p3/5eTA829mrBG4hqxhfe VBX1xDnZzoh/V+cs1tNWeARbf5kNXDBItH5LSYMJpfYA84sBP/cUjO9wZOuTAemFtDrP Mv2w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1769479602; x=1770084402; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=0f1gY9r/WleTG9LFphI7gM4RwbmM6PYZcL6EvuwpZSY=; b=ShFv2WINJa08R/6CfGMPNZ1sOb9RFvz2KpzMfViDsy03A5YwyXN4YtDVPMwrvHUPUa yktZJKu0EiRSWRrDSkq+JidqEe3dQiTrpWmQ+kQzwbR4YEpz+jsGJDs2k3VN/bPJ5yWT xgRCN8kGTIdMYHzxygtpVkgx2N4xUZQqtA3Q3tmxjiQ09WhKJBYcAY3xhIUznHogSecO vdYN4qPsKMxsbzGeo626KIWGD31xDDeFXuq8LBxRCjurz80PNaLme/O4m86RqCy2Snk2 uFmbFiQG/iPgUvNymAuhqevNY/Nrw3zU8Hn/rRpoHnzwouwvZTI4X3m1/rVIkl/VJ3eA NMZg== X-Forwarded-Encrypted: i=1; AJvYcCUoQj+9In+/+EsSfvADG7Da13i6dhZ7YflC0QLeqGvSdkfwoQIevpGeSDmf5oscUyNLEOP91eWkBpwcd6U=@vger.kernel.org X-Gm-Message-State: AOJu0YzrKmQAZmosulUedFasdUu7bzVXu/RtkHpzJYS95FOcooQHt9zV YdGY3KKxM57TXZLgCodapkP0EppZiSlyHbQzo+JNMERX1Jsv64RiuP3qC/Ht7qvHiQ== X-Gm-Gg: AZuq6aLLsEqB+9Xzk1EmYBmTRVHsEy1Q6BzDqYi2UVB+/4EqkWsHm88jcIQCTnQNP8X 9jU1Ze4644tMTMn84D0AC5wQFlD8lxpOdTSfNFsEUc6xE9ENMPFL9lSfx27s+aYv/sj1jLHv61h 8gqMkyO+ZciQ359WERryEX7U7/HAnWWBMqJ3LQb2qDBBZLNo7x9Z4rWlY+Al6EpWc++0ePDH8h3 iqCV/rGXOGhe7Ct9dF/Pq1CPHHBFCD4usUG9km6pSBrnqSi4N43y0Wy00gAUAUazqDJbYcyJ6xm pBAloc2o3NVj8H1lrmVpGTlADUsFis0t1u9RlDrQNR7R+Haj3nKw+7DaLernZh2ERqMDRXY8uoG IsiQbWVTN0PdVROcbVgOge0MOMuQ3orHOFsFilRwZpi7uCqQgvK0mIVouyzdDD1G9z/YWOrXVYj 32WJxcBXJWQw== X-Received: by 2002:a05:690e:1486:b0:644:7398:6682 with SMTP id 956f58d0204a3-6498fbf8fecmr9024d50.30.1769479602346; Mon, 26 Jan 2026 18:06:42 -0800 (PST) Received: from um773-cachyos ([2600:1700:cc0:94af:eca6:9ff9:6f3c:5de9]) by smtp.gmail.com with ESMTPSA id 956f58d0204a3-6496855d65esm4217415d50.12.2026.01.26.18.06.41 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 26 Jan 2026 18:06:41 -0800 (PST) From: Zecheng Li To: Peter Zijlstra , Ingo Molnar , Arnaldo Carvalho de Melo , Namhyung Kim Cc: Mark Rutland , Alexander Shishkin , Jiri Olsa , Ian Rogers , Adrian Hunter , James Clark , Zecheng Li , xliuprof@google.com, linux-perf-users@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v1 08/11] perf annotate-data: Add invalidate_reg_state() helper for x86 Date: Mon, 26 Jan 2026 21:05:01 -0500 Message-ID: <20260127020617.2804780-9-zli94@ncsu.edu> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260127020617.2804780-1-zli94@ncsu.edu> References: <20260127020617.2804780-1-zli94@ncsu.edu> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Add a helper function to consistently invalidate register state instead of field assignments. This ensures kind, ok, and copied_from are all properly cleared when a register becomes invalid. The helper sets: - kind =3D TSR_KIND_INVALID - ok =3D false - copied_from =3D -1 Replace all invalidation patterns with calls to this helper. No functional change and this removes some incorrect annotations that were caused by incomplete invalidation (e.g. a obsolete copied_from from an invalidated register). Signed-off-by: Zecheng Li --- tools/perf/arch/x86/annotate/instructions.c | 29 ++++++++++++--------- 1 file changed, 17 insertions(+), 12 deletions(-) diff --git a/tools/perf/arch/x86/annotate/instructions.c b/tools/perf/arch/= x86/annotate/instructions.c index 803f9351a3fb..e033abb0667b 100644 --- a/tools/perf/arch/x86/annotate/instructions.c +++ b/tools/perf/arch/x86/annotate/instructions.c @@ -209,6 +209,13 @@ static int x86__annotate_init(struct arch *arch, char = *cpuid) } =20 #ifdef HAVE_LIBDW_SUPPORT +static void invalidate_reg_state(struct type_state_reg *reg) +{ + reg->kind =3D TSR_KIND_INVALID; + reg->ok =3D false; + reg->copied_from =3D -1; +} + static void update_insn_state_x86(struct type_state *state, struct data_loc_info *dloc, Dwarf_Die *cu_die, struct disasm_line *dl) @@ -240,7 +247,7 @@ static void update_insn_state_x86(struct type_state *st= ate, /* Otherwise invalidate caller-saved registers after call */ for (unsigned i =3D 0; i < ARRAY_SIZE(state->regs); i++) { if (state->regs[i].caller_saved) - state->regs[i].ok =3D false; + invalidate_reg_state(&state->regs[i]); } =20 /* Update register with the return type (if any) */ @@ -369,8 +376,7 @@ static void update_insn_state_x86(struct type_state *st= ate, src_tsr =3D state->regs[sreg]; tsr =3D &state->regs[dst->reg1]; =20 - tsr->copied_from =3D -1; - tsr->ok =3D false; + invalidate_reg_state(tsr); =20 /* Case 1: Based on stack pointer or frame pointer */ if (sreg =3D=3D fbreg || sreg =3D=3D state->stack_reg) { @@ -438,8 +444,7 @@ static void update_insn_state_x86(struct type_state *st= ate, !strncmp(dl->ins.name, "inc", 3) || !strncmp(dl->ins.name, "dec", 3= )) { pr_debug_dtp("%s [%x] invalidate reg%d\n", dl->ins.name, insn_offset, dst->reg1); - state->regs[dst->reg1].ok =3D false; - state->regs[dst->reg1].copied_from =3D -1; + invalidate_reg_state(&state->regs[dst->reg1]); return; } =20 @@ -501,7 +506,7 @@ static void update_insn_state_x86(struct type_state *st= ate, if (!get_global_var_type(cu_die, dloc, ip, var_addr, &offset, &type_die) || !die_get_member_type(&type_die, offset, &type_die)) { - tsr->ok =3D false; + invalidate_reg_state(tsr); return; } =20 @@ -529,7 +534,7 @@ static void update_insn_state_x86(struct type_state *st= ate, =20 if (!has_reg_type(state, src->reg1) || !state->regs[src->reg1].ok) { - tsr->ok =3D false; + invalidate_reg_state(tsr); return; } =20 @@ -565,7 +570,7 @@ static void update_insn_state_x86(struct type_state *st= ate, =20 stack =3D find_stack_state(state, offset); if (stack =3D=3D NULL) { - tsr->ok =3D false; + invalidate_reg_state(tsr); return; } else if (!stack->compound) { tsr->type =3D stack->type; @@ -580,7 +585,7 @@ static void update_insn_state_x86(struct type_state *st= ate, tsr->offset =3D 0; tsr->ok =3D true; } else { - tsr->ok =3D false; + invalidate_reg_state(tsr); return; } =20 @@ -633,7 +638,7 @@ static void update_insn_state_x86(struct type_state *st= ate, if (!get_global_var_type(cu_die, dloc, ip, addr, &offset, &type_die) || !die_get_member_type(&type_die, offset, &type_die)) { - tsr->ok =3D false; + invalidate_reg_state(tsr); return; } =20 @@ -684,7 +689,7 @@ static void update_insn_state_x86(struct type_state *st= ate, } pr_debug_type_name(&tsr->type, tsr->kind); } else { - tsr->ok =3D false; + invalidate_reg_state(tsr); } } /* And then dereference the calculated pointer if it has one */ @@ -726,7 +731,7 @@ static void update_insn_state_x86(struct type_state *st= ate, } } =20 - tsr->ok =3D false; + invalidate_reg_state(tsr); } } /* Case 3. register to memory transfers */ --=20 2.52.0 From nobody Mon Feb 9 01:06:57 2026 Received: from mail-yx1-f41.google.com (mail-yx1-f41.google.com [74.125.224.41]) (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 CE4B82E5B21 for ; Tue, 27 Jan 2026 02:06:44 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=74.125.224.41 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769479608; cv=none; b=CSWKCgTI/a6pdkAxPofpqXzltijF1lnvmT8YYZJZBGwClhBTD6q9zivuwpdvkAxhORO6AOq2CyC+zXIJttsvu0zeFRwkhm8YV1JGUdA8F1OHKDIW9R8SFWQFwHGxJO/XKCr8U8UyTuK2DtDMoXAO5qIk5YSjlw8QmQdGv+SmssQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769479608; c=relaxed/simple; bh=PnnUEuJx0jKjss4uifyewYuOFaIBO3eFZ1T/znL/tqQ=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=RY0XvicsNFDuJ+rgWoJwLt7LG4qlOqGpAs0FfH3+s3AR97uxZQ4g4aB14AXPDzbEV8W+XLHFj3g5lxIgOc/kdW7H4I9FROFYGhPZUwziha/3K2+i5vUH7zWbqvo3kLKjLx4DLpDkKjbXm9xmMPsWpt85E6FtFalWRoRNgkgho70= 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=a22DqhM9; arc=none smtp.client-ip=74.125.224.41 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="a22DqhM9" Received: by mail-yx1-f41.google.com with SMTP id 956f58d0204a3-649523de91fso4297559d50.2 for ; Mon, 26 Jan 2026 18:06:44 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ncsu.edu; s=google; t=1769479603; x=1770084403; 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=PTl5wb1AK8XRUZSHdnvm2HlirW53IlfuLRyM8cfrp3Y=; b=a22DqhM9vO/+zdewxZybNCmz2O+epHaw+4wNq8rlqPsijREp9zehd2QY1D4p3oml63 xrKHZxeTx/DyQ9vZhzfnfHKQuAjPRZ2GUcWndL6P6CVaRNkcpmhS4SYkrqaWm53Z+epG Fn1G5t+aw7vmhxuWgCeIaEOcI/TT0Zp1OUtnEUc4oUh3oc5a4sWuwWdC03PN8wHFhM8m HcZXx0WTIK3IpQbCx9vIt/67Rd6VviKFjdX76A6RrTt8aocVeKW5CUqQs+3YI6GRGM++ jtVer4nNEoB5DmN0PGoXRHdLChvfOjzsaC5aB2uYK2yuzVL9UYEPJ75DpAS+Mp03GuNv As8Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1769479603; x=1770084403; 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=PTl5wb1AK8XRUZSHdnvm2HlirW53IlfuLRyM8cfrp3Y=; b=ponJMVOTTTqC+TYWG21z1vopedyJbsZJUxREuns3JhsXAwdP87HkNUmKSiYf17xTmS l+bGf1+C0vJnZMliFqUvLgBQXZIhi4gKVhjbydzgECgm9pqWLQCbYWX+0cpNLe+i3FHK FYFYwVzlLkGi4FOEHeKd0pc6qSCB+9WAmFskPY2wCUbe6tWMJILAPJ7xq7i/IZJK6DUl B3V7NGFpOE9cLrFYRL/2R1aja4hDOmdAEPfwiHw0H+BGRPu4lf2nV5tnU3fERSIHHSU3 /Wo9+RXQ4iBipXRRWnzS6ztvatXweo01wo0TwpDjEeCDkg0UeNr0Hj9BXbELQsNkArUi F9dw== X-Forwarded-Encrypted: i=1; AJvYcCWrw84CwFB1fx7aZi22TF5vrB1nsKFG4ntyPwC7FHyC+dQwdPe9tMS9PVn3OI/CgQDGZf6QCqNE54urCQo=@vger.kernel.org X-Gm-Message-State: AOJu0YzTnujJ9hWzWYX00s21E7cfSVRMl8x5kNmXhxcQwTXWRIVztfvT MogkmvM61va/YGZjRzHbpfSeQozDtyLuxgZoNaUtw0byYZtqcRAToc+/56f/qx85lw== X-Gm-Gg: AZuq6aJwS07Cla7/SvK5JcdmyFO2nAs5B3HMfOvQh2yj16WX162w4aTzulXL7f/zl0i DTcpMvoiDc287VYy4yNEPCoPoKsdYA6NkrrzHhFFKtmz2MXaqvJrQYNXL4Y8wly4skvjwRFdyGZ W9RIq+ZML5bGVo5v37zi27mSSynsRCIAvBlHvGL3w9O5SM3YEFgPCUHu4lvwpfZUELcgtd9Cwbq QOIh2ITUIoEJ+yiU29NT+E4skJ675TEHlgqAFpcbOHr7sp6weQSmdH6s90IEo1a48VU33Z6nZM7 In9GhqWO0YcvD/YTjB405/O7Ww95ayhxfYmjq0KuIQ56dfVzp6/fP0yUtsAto8onvugYgaPJshg qZJcw1D9gvVR6Dy0f7s7g+Cj8yAVt1omv7y0meH0eKeu0G+xLOJ74k+Gqo/pUWGiJJH9w2gIEPH xsUp7kDNDQWA== X-Received: by 2002:a05:690e:e8a:b0:644:4eec:222 with SMTP id 956f58d0204a3-64970d92aedmr4446515d50.85.1769479603442; Mon, 26 Jan 2026 18:06:43 -0800 (PST) Received: from um773-cachyos ([2600:1700:cc0:94af:eca6:9ff9:6f3c:5de9]) by smtp.gmail.com with ESMTPSA id 956f58d0204a3-6496855d65esm4217415d50.12.2026.01.26.18.06.42 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 26 Jan 2026 18:06:42 -0800 (PST) From: Zecheng Li To: Peter Zijlstra , Ingo Molnar , Arnaldo Carvalho de Melo , Namhyung Kim Cc: Mark Rutland , Alexander Shishkin , Jiri Olsa , Ian Rogers , Adrian Hunter , James Clark , Zecheng Li , xliuprof@google.com, linux-perf-users@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v1 09/11] perf annotate-data: Invalidate caller-saved regs for all calls Date: Mon, 26 Jan 2026 21:05:02 -0500 Message-ID: <20260127020617.2804780-10-zli94@ncsu.edu> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260127020617.2804780-1-zli94@ncsu.edu> References: <20260127020617.2804780-1-zli94@ncsu.edu> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" 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/arch/x86/annotate/instructions.c | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/tools/perf/arch/x86/annotate/instructions.c b/tools/perf/arch/= x86/annotate/instructions.c index e033abb0667b..aba356754520 100644 --- a/tools/perf/arch/x86/annotate/instructions.c +++ b/tools/perf/arch/x86/annotate/instructions.c @@ -234,24 +234,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.52.0 From nobody Mon Feb 9 01:06:57 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 D1A3C284669 for ; Tue, 27 Jan 2026 02:06:45 +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=1769479608; cv=none; b=m6fPECunz9y9yIzd5p/1HLMPW8k1/Kdc5SHZ8aR7SeojKZwYCUsSDqAgtrDfHs6gcvnseDYHoZyBSOlaS81vpE9fFp8z+pNjMjhCEutKgSyw9hPEgbuns5mhhoa7ZuB5l9h4QpzKcbh1380bUxVps62+mDGKiRGGTfHbUWBXy1A= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769479608; c=relaxed/simple; bh=Z0zNtvAEypLxwpX5+4CHJT8c6wRy00jo1ldE57np0Ak=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=tOKSTZ0N0c7QpsTnEjP132fGNGLbesRtCN+YCgWBZeAS/EVmwGEiB51m13hWer8et8W25I9qti1oBwfJq7jSoiXe4rh8fCcS9blAC8nhzWj58Dua6Nl5h6wLmUtQW3Aj23W/zabJlKjo5/ZRk5egDSv8vnULT6tvG0xPfz9mU24= 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=KN/JHe2a; 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="KN/JHe2a" Received: by mail-yx1-f49.google.com with SMTP id 956f58d0204a3-6496a048323so2214686d50.3 for ; Mon, 26 Jan 2026 18:06:45 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ncsu.edu; s=google; t=1769479604; x=1770084404; 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=dq6WdE0WbGucsm8HDxS+kNLEuZlM6IbJ6kGho6LsktQ=; b=KN/JHe2aJKBXSK9V/bx2MwIH5RrCU0wONdKzkCRxgbA6PjwbE1u+Vr2+wIpridr45H YTvid7zOWqmzzU8PwU/L+YQUsdGjhTFI1CZsmipFbOglucOp9iXt/ygR//u0QlP/wbRy BIFElF03bR3iLpmMm0xGuoeB/LaSg18pdr6H/+3Carm0f57vIBP77CRZszFFQ0khJuWK onZrsWaC6omnOjqYsxFWizhpGpU0gK58nQ4PatLUOFW7JLtEZycw5oRis/2FL36rJHrV ZUnB1yL8ddnIbEJYLf1BFOgQjwTAc2DUZxkKrIjcZflaMbJA1QHNe3RKL/M9BIZEEgHv Hu1Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1769479604; x=1770084404; 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=dq6WdE0WbGucsm8HDxS+kNLEuZlM6IbJ6kGho6LsktQ=; b=Ynr7PHIaLIGz8ExmTdkhpEyBeTrDElwfIwOLozAmNPSHyBxQkiLU9iqb4qzXwUIS8r /KgiRGWBBN5x4zOzP2MBqQ7UfaNXWmOTr0wvhKpjVn1tJe3UEzyKm6ufOz1iAPpMThaS PRktxG7879VcOBENtRrzNgsfVeVMcyiZY1S9VOBhgURMqScIAbePiWsm7jSdiZSpnHoD ZY8ZcIZKyK6Zaog/vZ+PbvmdfGRGzIR6E0Qh1yUbTAMLYbnY9hpJ37iHr60Jpq0QchFR 7R+fUDUtwJrdSyRuTPh4LDl5iMZ7YZpgm3AvUiqnYxXktK4wk6d2fjisLDP0OaOouiPQ 1RGA== X-Forwarded-Encrypted: i=1; AJvYcCUUzG05Ro6D7/6oQrPSYkGPRy80dE7sgYYiBxHiHn7v7O8ln2a6g1oQdl8wOsR55G3VfewzN8KZrDl3nkM=@vger.kernel.org X-Gm-Message-State: AOJu0YxOI0+/uurjmz81dwBtJVihTDnX7DOlDUzGE0/+xC8Uvl1YQGMX hSRiGA0/uVQmU1BthS42A6VB1a4ABP8bI+eNwZNRubwMSjiWSYFAhV/WouxumHsFfg== X-Gm-Gg: AZuq6aKara3+sSK/EydDSn8AVg9L7m5cX0uGd2KsGqSrCIeGUJj+f1Z4aZGiZ8TPyIW nHSXwftWT/SW79BT8wUQRdGu3v2flcenGqmGGl8Wp5jOFLpGxDlgyJiLp5JGOwsuxzmg6vzwvkS LodorE4bUoQftsHlYCVybusvaXqjwn27IY2jrTYPnux61kJB9AZETFPgLruXPp0gm0PRdPLHS+z 0SDhONvHNd9HH85CWe1mPY4ErX/wvk0TIhKpXvJ3jCqeR0t6D2Bcv498HWrCfuzpjOe+34sL4yy r7bJZ1AfIwE9vCDTeh7VF4SM3BAWNWVFK80Tg/azFhpZZtVigWO7WP3E9aj4eVyejXGp+UBCdt+ ToEKha2S/KLNlbeJVt3qUxSH7SspsjeZU5GD4U1FCTcApv9ki0hMVbUh9twQXo4eCxfjWjdjBPz /iAIBiDgd7qw== X-Received: by 2002:a05:690e:12ce:b0:649:393c:86cc with SMTP id 956f58d0204a3-6498fbd5cd6mr16816d50.4.1769479604511; Mon, 26 Jan 2026 18:06:44 -0800 (PST) Received: from um773-cachyos ([2600:1700:cc0:94af:eca6:9ff9:6f3c:5de9]) by smtp.gmail.com with ESMTPSA id 956f58d0204a3-6496855d65esm4217415d50.12.2026.01.26.18.06.43 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 26 Jan 2026 18:06:43 -0800 (PST) From: Zecheng Li To: Peter Zijlstra , Ingo Molnar , Arnaldo Carvalho de Melo , Namhyung Kim Cc: Mark Rutland , Alexander Shishkin , Jiri Olsa , Ian Rogers , Adrian Hunter , James Clark , Zecheng Li , xliuprof@google.com, linux-perf-users@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v1 10/11] perf annotate-data: Use DWARF location ranges to preserve reg state Date: Mon, 26 Jan 2026 21:05:03 -0500 Message-ID: <20260127020617.2804780-11-zli94@ncsu.edu> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260127020617.2804780-1-zli94@ncsu.edu> References: <20260127020617.2804780-1-zli94@ncsu.edu> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" 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/arch/x86/annotate/instructions.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/arch/x86/annotate/instructions.c b/tools/perf/arch/= x86/annotate/instructions.c index aba356754520..e45041855e17 100644 --- a/tools/perf/arch/x86/annotate/instructions.c +++ b/tools/perf/arch/x86/annotate/instructions.c @@ -213,6 +213,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 @@ -235,6 +237,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) @@ -251,10 +254,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) */ @@ -284,6 +295,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; @@ -349,6 +362,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; @@ -463,6 +478,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; } @@ -549,6 +566,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 177aa6634504..b42b17ba0d10 100644 --- a/tools/perf/util/annotate-data.c +++ b/tools/perf/util/annotate-data.c @@ -841,6 +841,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 @@ -866,8 +878,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; @@ -924,6 +942,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); @@ -940,6 +959,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 869307c7f130..46bc770e150e 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 ee72b7a4a65d..a05d73d6e9e7 100644 --- a/tools/perf/util/dwarf-aux.c +++ b/tools/perf/util/dwarf-aux.c @@ -1639,7 +1639,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; @@ -1679,6 +1679,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; @@ -1741,6 +1743,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 8045281f219c..6d418acfff14 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.52.0 From nobody Mon Feb 9 01:06:57 2026 Received: from mail-yx1-f46.google.com (mail-yx1-f46.google.com [74.125.224.46]) (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 BBE782F83B7 for ; Tue, 27 Jan 2026 02:06:46 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=74.125.224.46 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769479608; cv=none; b=sj332LOT4kxSuyB5bx1AxZH9cqqf/npbqWNZLgK1W56PjfFcLuzjVX7jTsAKaYReHBsw+lLoQQbc+FKRPuTzX2+OUfgRHrN2j3GwJOXH5Emqn+ihfE8lpipeSDiYiX9vBehX0H3SOdAQXaIkmswqaxLDZYg5GY28rl0EfwgQeqc= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769479608; c=relaxed/simple; bh=b57Ock6we7x/mhDuBxpj3syCmE1BZKO8JFrTsuTWzrY=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=NFBjmksc2/v1XLYerne4sBUrQ3Tg/S2R1LZm6ZVwE6LnbTFtZ2wqUPDScYfMVN0YIHomaygA4Q/nEkfSpsRm/FD7dTqdsFXsaI0+XMoCQenqe8yLwrLT9CKKDAk4oZvO/2N/6g+u5fhVIObgM4A8gFDJXNYczzHseC942dj3XEY= 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=QdUEy+51; arc=none smtp.client-ip=74.125.224.46 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="QdUEy+51" Received: by mail-yx1-f46.google.com with SMTP id 956f58d0204a3-6481bd173c0so4377793d50.2 for ; Mon, 26 Jan 2026 18:06:46 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ncsu.edu; s=google; t=1769479606; x=1770084406; 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=TZ3wA5lS89Oy1XytQhdRYz1uEnxzfP2eJ7+UqS1aa2s=; b=QdUEy+51XjwAAw8kPv+ySk3/HVuTMqkTc7YE6oKek/EI4wD1yKmNv403Xq8RBvRTv2 besMs1PL3sCJW/LzfRy+yWj4cYLJFYhjW0c/Di82hYRazUOID3PqRofwu3Niga9OxRlq TJq0ohw/8+EELNww+c1rGgIeNF0/h3s++1BJWieyRq/Wn1hwoyX3ZGTywTNWBDMM6NF7 H1ygXrfcMbSMTJ6XQbMegICw9CJo7rqLiViKSYTwfQxGBLPzaTZaASAr8KSMeSPuxsyW SVbMPwcDPK5KGRAwcLhfEwcxrXPgMd8xiHoeNJZJSSEu1BLwhqfuBfYiEz1qWP+uRU3C LwUg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1769479606; x=1770084406; 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=TZ3wA5lS89Oy1XytQhdRYz1uEnxzfP2eJ7+UqS1aa2s=; b=gnSIxg2zCYIpAb5qa86vBK22AqQL72As+kR6vMddwfxZt+A63reZPAOXbRSn4FXHDl c9m2xGyoY+n69HzvQZri6x7o9xAW/xOm7+ZePRI29Y9+8v71J8q6AKd7MssjYqT7DGVL qvliPFobr2pzoZG76DNI/QZ8cjMRIMpnnUKLHBv/fCTW1yr1C/ukLRKwAahg916+fQvc phX6Pn0e4JNCb18SPXlXBCQ2MwVQA+DNleu4jK7MA0X1b6fRiwDcletwIordDJow745W eHFLDRCxBBzU2eAKSMI2N7CQ425yuIt0dFJkii88Uy1JCrcxn6ai0NN04coL9N9qCSCY h4fQ== X-Forwarded-Encrypted: i=1; AJvYcCUFHU5Ksp9jR4NnvOD4QFYcpfqhzfgPvS9gUGncrgSWzWKb4sBIg7mtO4YW6t1+PgP/YcurQXJUw7z0ST4=@vger.kernel.org X-Gm-Message-State: AOJu0YwY3sAPH3CNGcLDnWsa5q1+z3bReD80Wct67JCJt6JDQDcl4ND3 WPjc0mQSubDVy64y5ZxnHvsjTyKZTL40BDwwzc+N3sGv5PAWTvi7OQkA8hhO39cxmw== X-Gm-Gg: AZuq6aKq7L2XUqMnHNvd9w2HHm/xS5wT7eKKVi0KSwhzSJEfmy1SklzuQHXeD93P5nr kYyAy6bl/Cq4+L4Ai4Y5A+WbJsruBU4uQtFFpK4lptzg/ATOFm6OzUOIkngDn8c1F43orKw9iHk CWatHK3QRztCusagj63h4oqTzjORHrT0jf1lkfpOu5Bfo9bGb8fIQPhSpdO+A8YqXntQ83efNBR 8myFmYLVqNwOPeF9svl7HrkG3nSTPKPurhIsM45odiCUGVCfrjfAgeNV53PWTEg/JaZ3nC/OQ2n VOB+CGUpbbv2GIB1kuYv4w0pQ1iJYb6Z5NnRQXg7+7LH+pOWT8Sl3zecbW3nk2vPKIAWm3/c8Xw cPjefo28hdTLzdd49Yzw0EId6/joJYRcy2BpOo0ZVCUb3XY3URnF//1bbbrRn9jDeqlU1mtpssF sTCrgQn7UHdQ== X-Received: by 2002:a05:690e:13c2:b0:649:3bd8:22b0 with SMTP id 956f58d0204a3-64970d3ee4cmr5023325d50.83.1769479605648; Mon, 26 Jan 2026 18:06:45 -0800 (PST) Received: from um773-cachyos ([2600:1700:cc0:94af:eca6:9ff9:6f3c:5de9]) by smtp.gmail.com with ESMTPSA id 956f58d0204a3-6496855d65esm4217415d50.12.2026.01.26.18.06.44 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 26 Jan 2026 18:06:45 -0800 (PST) From: Zecheng Li To: Peter Zijlstra , Ingo Molnar , Arnaldo Carvalho de Melo , Namhyung Kim Cc: Mark Rutland , Alexander Shishkin , Jiri Olsa , Ian Rogers , Adrian Hunter , James Clark , Zecheng Li , xliuprof@google.com, linux-perf-users@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v1 11/11] perf dwarf-aux: Collect all variable locations for insn tracking Date: Mon, 26 Jan 2026 21:05:04 -0500 Message-ID: <20260127020617.2804780-12-zli94@ncsu.edu> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260127020617.2804780-1-zli94@ncsu.edu> References: <20260127020617.2804780-1-zli94@ncsu.edu> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" 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 a05d73d6e9e7..3a028d4acb78 100644 --- a/tools/perf/util/dwarf-aux.c +++ b/tools/perf/util/dwarf-aux.c @@ -1643,6 +1643,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; @@ -1650,41 +1651,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.52.0