From patchwork Tue Feb 27 21:48:51 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Thiago Jung Bauermann X-Patchwork-Id: 86486 Return-Path: X-Original-To: patchwork@sourceware.org Delivered-To: patchwork@sourceware.org Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id C2D313858403 for ; Tue, 27 Feb 2024 21:49:33 +0000 (GMT) X-Original-To: gdb-patches@sourceware.org Delivered-To: gdb-patches@sourceware.org Received: from mail-pg1-x52f.google.com (mail-pg1-x52f.google.com [IPv6:2607:f8b0:4864:20::52f]) by sourceware.org (Postfix) with ESMTPS id 56FEA3858D33 for ; Tue, 27 Feb 2024 21:48:56 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 56FEA3858D33 Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=linaro.org Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=linaro.org ARC-Filter: OpenARC Filter v1.0.0 sourceware.org 56FEA3858D33 Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=2607:f8b0:4864:20::52f ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1709070540; cv=none; b=xbI6+axM9LWB8K8zwQm40yr6cWV/3EwCuALszzd2SklGWlkNA5IaRsvfg5JgOkO7Q5m9WSNDKuos+UDiRvQd+k77rmDp4eJr6fy+oSBcWrSPRmIXhb/Qavr28RasJRUaYqQvhiYTSX9GNss3o2pBXx1PGOdpmL5SKGu1FJoNffo= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1709070540; c=relaxed/simple; bh=fFumXut7/8CWjavGl6mYtKgMnt3pREYqN9H/X5b5/SM=; h=DKIM-Signature:From:To:Subject:Date:Message-ID:MIME-Version; b=GT0ZUigrgvTTYBJB4lCdPY65Eb0hKzutGwYq0JQqB4OYCRcrqsvw8BGgS2Zp4HeX+Ee9F2O2l0WfZgAHMAlbOrm8SVnd44bFLcjAxBA96Ib2O/qkyKSoGD27La0U8JtaxntjVzGWsaOm+LD+B0HpIWLK8CDXt6S5mkmgJyTRauw= ARC-Authentication-Results: i=1; server2.sourceware.org Received: by mail-pg1-x52f.google.com with SMTP id 41be03b00d2f7-5ce942efda5so3816721a12.2 for ; Tue, 27 Feb 2024 13:48:56 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1709070535; x=1709675335; darn=sourceware.org; h=content-transfer-encoding:mime-version:message-id:date:subject:to :from:from:to:cc:subject:date:message-id:reply-to; bh=wuo7zik+pbwIGU/4obo/MyxhgLTDqfJ3UsC5gmxrhrw=; b=NtZW4AyuPuxQQGIt5l23b2c8RbmyUGRAsGuzsBAqBW82Fpkeo6ISojFsiq1uSzuKsN jNNesg09XxwEY24D4iA9EGucEpX1I2dlvGjdYag4GuKUJk4nr+fsZ9hp1LC4RKZAs/Jz INOzy0vgqs9ikuxL5Kj8Tdpe1Yfx532iQafL41U9SYuRRvQaS/i5HS72eFONwA29YpjE mvKwl4qJIsSpL97clNZZpEpSpFtMwfga4+9LF+PdsosJlo+A6vxqQzsVOAF643yI+Iuf rii1zzm8gC40acrS0JSjgH8KIguCY5o59QTgyRSP8c1xFwU5TgFBXCFO7nP9HPl1ePnL Sfog== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1709070535; x=1709675335; h=content-transfer-encoding:mime-version:message-id:date:subject:to :from:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=wuo7zik+pbwIGU/4obo/MyxhgLTDqfJ3UsC5gmxrhrw=; b=TDPHxgup90QUl9/ABr1qapfs1kq/9TupsuThuKyY9b+tRgpDeOo8wOmjXOSqeE2lPW 8t/Wej64Ri/6uvVxf54oGITLVqHLbwZFPc0jdkEU88oEQTGuNStTLbKJ8rhDzTQkqGtb b6MMxZUFGvIoehv8Tr/7YU6gKuAVbKP0OhBMUB9p25DbhgzgYA/8S8h7hYJug3EKUkJ+ tVis4YbKkv9EnFtbGoAvGSTYbK6kesfQJuMSlegFX2hyd+uznvI3TBUn0k1vAyQsVDQi gGh/VUwa7Jl+GxbBJnoYSUTQKRH/9PTlHuD7CBX7KPW1hgqOeOv24OZ7ac75Acgb3cus 7Uyw== X-Gm-Message-State: AOJu0Yx36IsZmIy3SMewtVnIdbrIMOhEVEE1Ha1WUIatyDZVtduYQaQo HDMnFAlR4YvmpTP3PlckCA2WOs0fWQppujFS6046G2lv8pYSCWT0iKJ7OQrN4obBItHIWKjyfRD hYQ8= X-Google-Smtp-Source: AGHT+IHcIEn7tVb1CaArv2c/GeHj4rzNr09mIESZdycK3tJr28GvKgBcTjYNw/TAv5mPFbaj8CWjAA== X-Received: by 2002:a17:90a:4897:b0:299:4fa7:71a7 with SMTP id b23-20020a17090a489700b002994fa771a7mr8900956pjh.24.1709070534543; Tue, 27 Feb 2024 13:48:54 -0800 (PST) Received: from localhost ([2804:14d:7e39:8470:d617:f08f:e330:49c1]) by smtp.gmail.com with ESMTPSA id m14-20020a17090ade0e00b0029a4efc0231sm12316pjv.56.2024.02.27.13.48.53 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 27 Feb 2024 13:48:54 -0800 (PST) From: Thiago Jung Bauermann To: gdb-patches@sourceware.org Subject: [PATCH] gdb/arm: Remove tpidruro register from non-FreeBSD target descriptions Date: Tue, 27 Feb 2024 18:48:51 -0300 Message-ID: <20240227214851.350579-1-thiago.bauermann@linaro.org> X-Mailer: git-send-email 2.41.0 MIME-Version: 1.0 X-Spam-Status: No, score=-11.7 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, GIT_PATCH_0, RCVD_IN_DNSWL_NONE, SPF_HELO_NONE, SPF_PASS, TXREP, T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org X-BeenThere: gdb-patches@sourceware.org X-Mailman-Version: 2.1.30 Precedence: list List-Id: Gdb-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: gdb-patches-bounces+patchwork=sourceware.org@sourceware.org Commit 92d48a1e4eac ("Add an arm-tls feature which includes the tpidruro register from CP15.") introduced the org.gnu.gdb.arm.tls feature, which adds the tpidruro register, and unconditionally enabled it in aarch32_create_target_description. In Linux, the tpidruro register isn't available via ptrace in the 32-bit kernel but it is available for an aarch32 program running under an arm64 kernel via the ptrace compat interface. This isn't currently implemented however, which causes GDB on arm-linux with 64-bit kernel to list the register but show it as unavailable, as reported by Tom de Vries: $ gdb -q -batch a.out -ex start -ex 'p $tpidruro' Temporary breakpoint 1 at 0x512 Temporary breakpoint 1, 0xaaaaa512 in main () $1 = Simon Marchi then clarified: > The only time we should be seeing some "unavailable" registers or memory > is in the context of tracepoints, for things that are not collected. > Seeing an unavailable register here is a sign that something is not > right. Therefore, disable the TLS feature in aarch32 target descriptions for Linux and NetBSD targets (the latter also doesn't seem to support accessing tpidruro either, based on a quick look at arm-netbsd-nat.c). This patch fixes the following tests: Running gdb.base/inline-frame-cycle-unwind.exp ... FAIL: gdb.base/inline-frame-cycle-unwind.exp: cycle at level 3: backtrace when the unwind is broken at frame 3 FAIL: gdb.base/inline-frame-cycle-unwind.exp: cycle at level 5: backtrace when the unwind is broken at frame 5 FAIL: gdb.base/inline-frame-cycle-unwind.exp: cycle at level 1: backtrace when the unwind is broken at frame 1 Tested with Ubuntu 22.04.3 on armv8l-linux-gnueabihf in native, native-gdbserver and native-extended-gdbserver targets with no regressions. PR tdep/31418 Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=31418 --- gdb/aarch32-tdep.c | 4 ++-- gdb/aarch32-tdep.h | 2 +- gdb/aarch64-linux-nat.c | 2 +- gdb/arch/aarch32.c | 5 +++-- gdb/arch/aarch32.h | 2 +- gdb/arm-fbsd-tdep.c | 2 +- gdb/arm-linux-nat.c | 2 +- gdb/arm-linux-tdep.c | 2 +- gdb/arm-netbsd-nat.c | 2 +- gdbserver/linux-aarch32-tdesc.cc | 2 +- 10 files changed, 13 insertions(+), 12 deletions(-) diff --git a/gdb/aarch32-tdep.c b/gdb/aarch32-tdep.c index 9177b47d1481..f3ff3570c748 100644 --- a/gdb/aarch32-tdep.c +++ b/gdb/aarch32-tdep.c @@ -27,10 +27,10 @@ static struct target_desc *tdesc_aarch32; /* See aarch32-tdep.h. */ const target_desc * -aarch32_read_description () +aarch32_read_description (bool tls) { if (tdesc_aarch32 == nullptr) - tdesc_aarch32 = aarch32_create_target_description (); + tdesc_aarch32 = aarch32_create_target_description (tls); return tdesc_aarch32; } diff --git a/gdb/aarch32-tdep.h b/gdb/aarch32-tdep.h index 654483438485..009ee61890e2 100644 --- a/gdb/aarch32-tdep.h +++ b/gdb/aarch32-tdep.h @@ -22,6 +22,6 @@ struct target_desc; /* Get the AArch32 target description. */ -const target_desc *aarch32_read_description (); +const target_desc *aarch32_read_description (bool tls); #endif /* aarch32-tdep.h. */ diff --git a/gdb/aarch64-linux-nat.c b/gdb/aarch64-linux-nat.c index 11a41e1afae0..9dc45e1c1d96 100644 --- a/gdb/aarch64-linux-nat.c +++ b/gdb/aarch64-linux-nat.c @@ -887,7 +887,7 @@ aarch64_linux_nat_target::read_description () ret = ptrace (PTRACE_GETREGSET, tid, NT_ARM_VFP, &iovec); if (ret == 0) - return aarch32_read_description (); + return aarch32_read_description (false); CORE_ADDR hwcap = linux_get_hwcap (); CORE_ADDR hwcap2 = linux_get_hwcap2 (); diff --git a/gdb/arch/aarch32.c b/gdb/arch/aarch32.c index c910e3b5a388..9f3e25088f41 100644 --- a/gdb/arch/aarch32.c +++ b/gdb/arch/aarch32.c @@ -25,7 +25,7 @@ /* See aarch32.h. */ target_desc * -aarch32_create_target_description () +aarch32_create_target_description (bool tls) { target_desc_up tdesc = allocate_target_description (); @@ -39,7 +39,8 @@ aarch32_create_target_description () /* Create a vfpv3 feature, then a blank NEON feature. */ regnum = create_feature_arm_arm_vfpv3 (tdesc.get (), regnum); tdesc_create_feature (tdesc.get (), "org.gnu.gdb.arm.neon"); - regnum = create_feature_arm_arm_tls (tdesc.get (), regnum); + if (tls) + regnum = create_feature_arm_arm_tls (tdesc.get (), regnum); return tdesc.release (); } diff --git a/gdb/arch/aarch32.h b/gdb/arch/aarch32.h index f7ee6faeea3c..1811b8a7a925 100644 --- a/gdb/arch/aarch32.h +++ b/gdb/arch/aarch32.h @@ -22,6 +22,6 @@ /* Create the AArch32 target description. */ -target_desc *aarch32_create_target_description (); +target_desc *aarch32_create_target_description (bool tls); #endif /* aarch32.h. */ diff --git a/gdb/arm-fbsd-tdep.c b/gdb/arm-fbsd-tdep.c index b485951c3764..7b82de2166b5 100644 --- a/gdb/arm-fbsd-tdep.c +++ b/gdb/arm-fbsd-tdep.c @@ -228,7 +228,7 @@ arm_fbsd_read_description_auxv (const std::optional &auxv, if (arm_hwcap & HWCAP_VFP) { if (arm_hwcap & HWCAP_NEON) - return aarch32_read_description (); + return aarch32_read_description (tls); else if ((arm_hwcap & (HWCAP_VFPv3 | HWCAP_VFPD32)) == (HWCAP_VFPv3 | HWCAP_VFPD32)) return arm_read_description (ARM_FP_TYPE_VFPV3, tls); diff --git a/gdb/arm-linux-nat.c b/gdb/arm-linux-nat.c index 02994732563a..75f498cd5b3f 100644 --- a/gdb/arm-linux-nat.c +++ b/gdb/arm-linux-nat.c @@ -568,7 +568,7 @@ arm_linux_nat_target::read_description () /* NEON implies VFPv3-D32 or no-VFP unit. Say that we only support Neon with VFPv3-D32. */ if (arm_hwcap & HWCAP_NEON) - return aarch32_read_description (); + return aarch32_read_description (false); else if ((arm_hwcap & (HWCAP_VFPv3 | HWCAP_VFPv3D16)) == HWCAP_VFPv3) return arm_read_description (ARM_FP_TYPE_VFPV3, false); diff --git a/gdb/arm-linux-tdep.c b/gdb/arm-linux-tdep.c index cc79247aaf12..a8b27a7463a6 100644 --- a/gdb/arm-linux-tdep.c +++ b/gdb/arm-linux-tdep.c @@ -740,7 +740,7 @@ arm_linux_core_read_description (struct gdbarch *gdbarch, /* NEON implies VFPv3-D32 or no-VFP unit. Say that we only support Neon with VFPv3-D32. */ if (arm_hwcap & HWCAP_NEON) - return aarch32_read_description (); + return aarch32_read_description (false); else if ((arm_hwcap & (HWCAP_VFPv3 | HWCAP_VFPv3D16)) == HWCAP_VFPv3) return arm_read_description (ARM_FP_TYPE_VFPV3, false); diff --git a/gdb/arm-netbsd-nat.c b/gdb/arm-netbsd-nat.c index df8b5ec7b03c..4b9f92946412 100644 --- a/gdb/arm-netbsd-nat.c +++ b/gdb/arm-netbsd-nat.c @@ -350,7 +350,7 @@ arm_netbsd_nat_target::read_description () len = sizeof(flag); if (sysctlbyname("machdep.neon_present", &flag, &len, NULL, 0) == 0 && flag) - return aarch32_read_description (); + return aarch32_read_description (false); return arm_read_description (ARM_FP_TYPE_VFPV3, false); } diff --git a/gdbserver/linux-aarch32-tdesc.cc b/gdbserver/linux-aarch32-tdesc.cc index a696d8946e29..54c6f62e9965 100644 --- a/gdbserver/linux-aarch32-tdesc.cc +++ b/gdbserver/linux-aarch32-tdesc.cc @@ -32,7 +32,7 @@ aarch32_linux_read_description () { if (tdesc_aarch32 == nullptr) { - tdesc_aarch32 = aarch32_create_target_description (); + tdesc_aarch32 = aarch32_create_target_description (false); static const char *expedite_regs[] = { "r11", "sp", "pc", 0 }; init_target_desc (tdesc_aarch32, expedite_regs);