From nobody Sun Jul 21 17:32:29 2024 X-Original-To: dev-commits-src-all@mlmmj.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mlmmj.nyi.freebsd.org (Postfix) with ESMTP id 4WRr8F2YBzz5Rs5G; Sun, 21 Jul 2024 17:32:29 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "R11" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4WRr8F1wJbz4tkt; Sun, 21 Jul 2024 17:32:29 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1721583149; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=AESWM4xSG3NcxHtikS9ua/bI/RXffsN+Zj6pvHLTibM=; b=SKxGU4DsdHONL9FS0UsIUDiNWvqp8MdzSTRmq0zTrsDcGL6mJCJUkQ9aUEgMjDIbk5WVjc TZrNd64Fq5M8xq9fGNtE8HyjbyoGJERUol8KAxA4XTiJLlLfq0Bs39ONcPVkrP+7vQZAXo dJ90tKKrmgTue2VIYVPmj8nSFdN1zuUCPw3lPh5w/dIh5eN/Nkd8gsRx08kOaiIT4KXA/r sl3qWU6PKXCuPZQIJYaQke055wTcivL5/fWvRKxDLO7vr9CO/YzXj0bYHIIVpftCBQJ1rl A95O8NV2Nl1C9107nQdWlQbeT5XdYiROeSAqxWoXkO8FZ8M58zQegYbZvD9CDw== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1721583149; a=rsa-sha256; cv=none; b=qd/cdxL5z+lsTJdRw+Hba0RuAwITCeIjPXSv60a70AygcWUaF7wparDTahPx5Bfiy5Oo2M xGJxGMJLFynDfv+y5xScBoVG7dgR5VnMc2lnKldQlwmx6AaQDy+3vofO6OVpEYiH7vo5nR dlHGI4rf7LVsqBvO7+7V0cKO9ldLLuER899XSZVYhagiBoT45qGyGObm/52vmfA6EVu+Sk IkyJzGoYaC5wa69zMDOLwVQ0X9130oYhmhBc93kf+GlGZJlNynua5c0BvNSAg6X1hYcydd vzPtXxJNxCO+eblxE09dU3lolirOsbes4MboEjk5csBljsdx1faGBBNhyB8eMg== ARC-Authentication-Results: i=1; mx1.freebsd.org; none ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1721583149; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=AESWM4xSG3NcxHtikS9ua/bI/RXffsN+Zj6pvHLTibM=; b=nnC3cq5dW5Hesjawbhk/qGLhk+XigEd26QVde1s64Da9nqacCbBZSnm69aLejNppw9Mt9o ouFcEDaSSvHJuB7NyqcZ3mC5unyZYYIZcdQ+DpdrTagNERldGMllStxo7XwbUyFTtuLAPs 4ecgQvkxCX0AZ8uTTK4TxKcA3UCU9RMQ6rteU7Ho7k3tD5J5gjB2LEtVRpAZMFNVaeWxx7 v4swTd5Y2OpLojEWZ872jMne/HCq4NyogHM5sUT7OZpNNfIBOmLwLivkurO7qpbuRgsTwa ZqjuWFZXXui0F3cIywhQUT2pP2R9SV9UzeHkWkSn2hS7Z9Q6QCT8L0q9I/NI+g== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 4WRr8F1Fvrz184Z; Sun, 21 Jul 2024 17:32:29 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from gitrepo.freebsd.org ([127.0.1.44]) by gitrepo.freebsd.org (8.18.1/8.18.1) with ESMTP id 46LHWTI8062813; Sun, 21 Jul 2024 17:32:29 GMT (envelope-from git@gitrepo.freebsd.org) Received: (from git@localhost) by gitrepo.freebsd.org (8.18.1/8.18.1/Submit) id 46LHWTZ0062810; Sun, 21 Jul 2024 17:32:29 GMT (envelope-from git) Date: Sun, 21 Jul 2024 17:32:29 GMT Message-Id: <202407211732.46LHWTZ0062810@gitrepo.freebsd.org> To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Bojan =?utf-8?Q?Novkovi=C4=87?= Subject: git: 1cbd613f3343 - main - db_pprint: Properly handle complex pointer types List-Id: Commit messages for all branches of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-all List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-all@freebsd.org Sender: owner-dev-commits-src-all@FreeBSD.org MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: bnovkov X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: 1cbd613f3343c873ace8a56df2e515626a18ef22 Auto-Submitted: auto-generated The branch main has been updated by bnovkov: URL: https://cgit.FreeBSD.org/src/commit/?id=1cbd613f3343c873ace8a56df2e515626a18ef22 commit 1cbd613f3343c873ace8a56df2e515626a18ef22 Author: Bojan Novković AuthorDate: 2024-07-21 16:51:22 +0000 Commit: Bojan Novković CommitDate: 2024-07-21 17:31:59 +0000 db_pprint: Properly handle complex pointer types The existing pretty-printing code fails to properly print complex pointer types. This commit fixes this behaviour by traversing the chain of CTF types until a base type is encountered. Approved by: markj (mentor) Fixes: c21bc6f3c242 --- sys/ddb/db_pprint.c | 38 ++++++++++++++++++++++++++++++-------- 1 file changed, 30 insertions(+), 8 deletions(-) diff --git a/sys/ddb/db_pprint.c b/sys/ddb/db_pprint.c index 2925caedd49d..0ca2b0bb952c 100644 --- a/sys/ddb/db_pprint.c +++ b/sys/ddb/db_pprint.c @@ -45,6 +45,7 @@ static void db_pprint_type(db_addr_t addr, struct ctf_type_v3 *type, static u_int max_depth = DB_PPRINT_DEFAULT_DEPTH; static struct db_ctf_sym_data sym_data; +static const char *asteriskstr = "*****"; /* * Pretty-prints a CTF_INT type. @@ -248,9 +249,14 @@ db_pprint_ptr(db_addr_t addr, struct ctf_type_v3 *type, u_int depth) const char *qual = ""; const char *name; db_addr_t val; + uint32_t tid; u_int kind; + int ptrcnt; - ref_type = db_ctf_typeid_to_type(&sym_data, type->ctt_type); + ptrcnt = 1; + tid = type->ctt_type; +again: + ref_type = db_ctf_typeid_to_type(&sym_data, tid); kind = CTF_V3_INFO_KIND(ref_type->ctt_info); switch (kind) { case CTF_K_STRUCT: @@ -258,25 +264,41 @@ db_pprint_ptr(db_addr_t addr, struct ctf_type_v3 *type, u_int depth) break; case CTF_K_VOLATILE: qual = "volatile "; - break; + tid = ref_type->ctt_type; + goto again; case CTF_K_CONST: qual = "const "; - break; + tid = ref_type->ctt_type; + goto again; + case CTF_K_RESTRICT: + qual = "restrict "; + tid = ref_type->ctt_type; + goto again; + case CTF_K_POINTER: + ptrcnt++; + tid = ref_type->ctt_type; + goto again; + case CTF_K_TYPEDEF: + tid = ref_type->ctt_type; + goto again; default: break; } - val = db_get_value(addr, sizeof(db_addr_t), false); - if (depth < max_depth) { + ptrcnt = min(ptrcnt, strlen(asteriskstr)); + val = (addr != 0) ? db_get_value(addr, sizeof(db_addr_t), false) : 0; + if (depth < max_depth && (val != 0)) { /* Print contents of memory pointed to by this pointer. */ - db_pprint_type(addr, ref_type, depth + 1); + db_pprint_type(val, ref_type, depth + 1); } else { name = db_ctf_stroff_to_str(&sym_data, ref_type->ctt_name); db_indent = depth; if (name != NULL) - db_printf("(%s%s *) 0x%lx", qual, name, (long)val); + db_printf("(%s%s %.*s) 0x%lx", qual, name, ptrcnt, + asteriskstr, (long)val); else - db_printf("(%s *) 0x%lx", qual, (long)val); + db_printf("(%s %.*s) 0x%lx", qual, ptrcnt, asteriskstr, + (long)val); } }