From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from simark.ca by simark.ca with LMTP id Tv8hGMFC/GZ24T0AWB0awg (envelope-from ) for ; Tue, 01 Oct 2024 14:43:13 -0400 Authentication-Results: simark.ca; dkim=pass (1024-bit key; unprotected) header.d=redhat.com header.i=@redhat.com header.a=rsa-sha256 header.s=mimecast20190719 header.b=Ui9i+6B3; dkim-atps=neutral Received: by simark.ca (Postfix, from userid 112) id 3584F1E353; Tue, 1 Oct 2024 14:43:13 -0400 (EDT) X-Spam-Checker-Version: SpamAssassin 4.0.0 (2022-12-13) on simark.ca X-Spam-Level: X-Spam-Status: No, score=-7.8 required=5.0 tests=ARC_SIGNED,ARC_VALID,BAYES_00, DKIMWL_WL_HIGH,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,MAILING_LIST_MULTI, RCVD_IN_DNSWL_BLOCKED,RCVD_IN_VALIDITY_CERTIFIED,RCVD_IN_VALIDITY_RPBL, RCVD_IN_VALIDITY_SAFE,URIBL_BLOCKED,URIBL_DBL_BLOCKED_OPENDNS autolearn=ham autolearn_force=no version=4.0.0 Received: from server2.sourceware.org (server2.sourceware.org [8.43.85.97]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (prime256v1) server-digest SHA256) (No client certificate requested) by simark.ca (Postfix) with ESMTPS id 7D5E31E05C for ; Tue, 1 Oct 2024 14:43:09 -0400 (EDT) Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id C97C43861004 for ; Tue, 1 Oct 2024 18:43:08 +0000 (GMT) Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) by sourceware.org (Postfix) with ESMTP id 8C8CC385EC15 for ; Tue, 1 Oct 2024 18:42:45 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 8C8CC385EC15 Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=redhat.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=redhat.com ARC-Filter: OpenARC Filter v1.0.0 sourceware.org 8C8CC385EC15 Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=170.10.133.124 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1727808167; cv=none; b=Ru8t0MwDTDn6fcwm5q3pN0vMtOK4HQ9hgEkebEhZoR4J1S28Rcr8QZGy/wNgJFqQyERsXve+I74CPH+7ALANkYV+fi04s8Czdj7HOJNNkx2F1z2lmQwpAIxCLF7y92XwzZupPcJxu10LbCag8K01Fdi6EXu+0mpiIhTwuu8xhiI= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1727808167; c=relaxed/simple; bh=FZUs8sE78W9sBbPHO7MBhVcuf93FQ0TaExkFj9bYZvQ=; h=DKIM-Signature:From:To:Subject:Date:Message-ID:MIME-Version; b=TOAHOk5Wb4jcspAWqv/O3cIgKxDQwUo5ekTSP0obvnuA0VLD/CGJ9k2OpHd3yBTYALm8uJcJy/xlY10Zu0k0XuFKJ8pN7KHgJU7UGaAA79rLDZ9m8YwXt4+p9D3C/NpNH9hJPpPejJEUHhOnx/xdg85dChLk9S1IIJOKWG//H5Y= ARC-Authentication-Results: i=1; server2.sourceware.org DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1727808165; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=UGXOpKe5Gy7/ZfEueHpCpySZQR/I+RzoNIvVkXDzVFc=; b=Ui9i+6B3Gr5CSqtiZ+4nxHr4q5q6T0+jHM7iqgSEi7ivjJAOdJAhp5PmY37JwbtGD96K0D F93j73afWy/7MpwZ+tGvvnXPE05bgzSvSuaF+BERq3eYLKEl1mploh+KteN3cWm2N1vedI jM9cQsxnp3hGY5xh5gAx21Mi54eSCu8= Received: from mx-prod-mc-02.mail-002.prod.us-west-2.aws.redhat.com (ec2-54-186-198-63.us-west-2.compute.amazonaws.com [54.186.198.63]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-58-NtJvIeGkNqqYGWmhFHbzPQ-1; Tue, 01 Oct 2024 14:42:43 -0400 X-MC-Unique: NtJvIeGkNqqYGWmhFHbzPQ-1 Received: from mx-prod-int-01.mail-002.prod.us-west-2.aws.redhat.com (unknown [10.30.177.4]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by mx-prod-mc-02.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTPS id 1A59C1944D02 for ; Tue, 1 Oct 2024 18:42:42 +0000 (UTC) Received: from fedora.redhat.com (unknown [10.22.8.191]) by mx-prod-int-01.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTPS id AB4023003FD9; Tue, 1 Oct 2024 18:42:40 +0000 (UTC) From: Guinevere Larsen To: gdb-patches@sourceware.org Cc: Guinevere Larsen Subject: [PATCH v5 0/5] Modernize frame unwinders and add disable feature Date: Tue, 1 Oct 2024 15:42:30 -0300 Message-ID: <20241001184235.3710608-1-guinevere@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 3.4.1 on 10.30.177.4 X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Transfer-Encoding: 8bit Content-Type: text/plain; charset="US-ASCII"; x-default=true 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~public-inbox=simark.ca@sourceware.org This patch series started with me trying to make it easier to test GDB's ability to unwind using CFI data, to improve a previous patch I sent to the list. The first patch is just a minor change, storing frame unwinders in a vector instead of through an unwinder table accessible using the registry system. This isn't required (like I originally thought it was), but it does make the whole system more readable in my opinion. Patch 3 has the real meat of the modernization, making GDB use polymorphism to handle frame unwinders. This is slightly slower than using function pointers, but much more readable in my opinion. Also, as noted by Thiago Bauermann, no frame unwinders that use the legacy class ever pass a frame_data pointer, so that field was removed from those unwinders. As for the unwinder classes, they were chosen somewhat arbitrarily, mostly based on where I found an unwinder and its name. Patch 4 also reverts commit 3c3bb0580be0 since that patch pointed out that if a more generic system was implemented it could be reverted. Patch number 2 has already been reviewed by Eli. Patch 4 had been reviewed as well, but the patch reversion introduced significant differences in the documentation, I believe it should be reviewed again. Changes for v5: * Reverted commit 3c3bb0580be0, with patch 4 following the advice on that commit * on patch 3, some of the original functions were converted into the classes' methods instead of just passing the call along. * some methods of frame_unwind_legacy were switched to be purely virtual Changes for v4: * Rebase on current master (No changes needed) * improved documentation of unwinder classes follow Eli feedback * added KFAIL to new test on patch 5 if running on 32 bit arm Changes for v3: * Fixed Linaro CI issue in 32 bit arm * Fixed the few comments from Eli. * Documented addition of unwinder class in the patch that adds it. Changes for v2: * Added back the test that checks if GDB can handle a mix of CUs with and without debuginfo in a single backtrace. * Fixed all the nitpicks for style. * Removed FRAME_UNWIND_ prefix when talking about classes * Thoroughly changed the documentation, to be more readable Guinevere Larsen (5): gdb: make gdbarch store a vector of frame unwinders gdb: add "unwinder class" to frame unwinders gdb: Migrate frame unwinders to use C++ classes gdb: introduce ability to disable frame unwinders gdb/testsuite: Test for a backtrace through object without debuginfo gdb/NEWS | 11 + gdb/aarch64-tdep.c | 12 +- gdb/alpha-mdebug-tdep.c | 6 +- gdb/alpha-tdep.c | 12 +- gdb/amd64-obsd-tdep.c | 6 +- gdb/amd64-tdep.c | 24 +- gdb/amd64-windows-tdep.c | 6 +- gdb/amdgpu-tdep.c | 7 +- gdb/arc-tdep.c | 10 +- gdb/arch-utils.c | 8 + gdb/arm-tdep.c | 29 +- gdb/avr-tdep.c | 5 +- gdb/bfin-tdep.c | 6 +- gdb/bpf-tdep.c | 6 +- gdb/cris-tdep.c | 12 +- gdb/csky-tdep.c | 10 +- gdb/doc/gdb.texinfo | 39 +- gdb/dummy-frame.c | 8 +- gdb/dummy-frame.h | 2 +- gdb/dwarf2/frame-tailcall.c | 6 +- gdb/dwarf2/frame-tailcall.h | 2 +- gdb/dwarf2/frame.c | 16 +- gdb/frame-unwind.c | 345 ++++++++++++++---- gdb/frame-unwind.h | 173 ++++++++- gdb/frame.c | 28 +- gdb/frv-linux-tdep.c | 6 +- gdb/frv-tdep.c | 5 +- gdb/ft32-tdep.c | 6 +- gdb/gdbarch-gen.c | 6 + gdb/gdbarch.h | 5 + gdb/gdbarch.py | 6 + gdb/h8300-tdep.c | 5 +- gdb/hppa-linux-tdep.c | 5 +- gdb/hppa-tdep.c | 17 +- gdb/i386-obsd-tdep.c | 5 +- gdb/i386-tdep.c | 30 +- gdb/ia64-tdep.c | 24 +- gdb/inline-frame.c | 5 +- gdb/inline-frame.h | 2 +- gdb/iq2000-tdep.c | 5 +- gdb/jit.c | 6 +- gdb/lm32-tdep.c | 5 +- gdb/loongarch-tdep.c | 7 +- gdb/m32c-tdep.c | 5 +- gdb/m32r-linux-tdep.c | 5 +- gdb/m32r-tdep.c | 5 +- gdb/m68hc11-tdep.c | 5 +- gdb/m68k-linux-tdep.c | 6 +- gdb/m68k-tdep.c | 6 +- gdb/mep-tdep.c | 5 +- gdb/microblaze-tdep.c | 6 +- gdb/mips-sde-tdep.c | 6 +- gdb/mips-tdep.c | 24 +- gdb/mn10300-tdep.c | 5 +- gdb/moxie-tdep.c | 5 +- gdb/msp430-tdep.c | 5 +- gdb/nds32-tdep.c | 14 +- gdb/nios2-tdep.c | 12 +- gdb/or1k-tdep.c | 7 +- gdb/ppc-fbsd-tdep.c | 5 +- gdb/ppc-obsd-tdep.c | 5 +- gdb/python/py-unwind.c | 62 ++-- gdb/record-btrace.c | 12 +- gdb/record.h | 4 +- gdb/riscv-tdep.c | 8 +- gdb/rl78-tdep.c | 6 +- gdb/rs6000-aix-tdep.c | 5 +- gdb/rs6000-tdep.c | 12 +- gdb/rx-tdep.c | 10 +- gdb/s12z-tdep.c | 7 +- gdb/s390-linux-tdep.c | 5 +- gdb/s390-tdep.c | 10 +- gdb/sentinel-frame.c | 8 +- gdb/sentinel-frame.h | 2 +- gdb/sh-tdep.c | 11 +- gdb/sparc-netbsd-tdep.c | 6 +- gdb/sparc-obsd-tdep.c | 6 +- gdb/sparc-sol2-tdep.c | 6 +- gdb/sparc-tdep.c | 6 +- gdb/sparc64-fbsd-tdep.c | 6 +- gdb/sparc64-netbsd-tdep.c | 6 +- gdb/sparc64-obsd-tdep.c | 12 +- gdb/sparc64-sol2-tdep.c | 6 +- gdb/sparc64-tdep.c | 6 +- .../backtrace-through-cu-nodebug-caller.c | 28 ++ .../backtrace-through-cu-nodebug-main.c | 32 ++ .../gdb.base/backtrace-through-cu-nodebug.exp | 90 +++++ gdb/testsuite/gdb.base/frame-unwind-disable.c | 21 ++ .../gdb.base/frame-unwind-disable.exp | 140 +++++++ gdb/tic6x-tdep.c | 12 +- gdb/tilegx-tdep.c | 5 +- gdb/tramp-frame.c | 75 ++-- gdb/v850-tdep.c | 5 +- gdb/vax-tdep.c | 6 +- gdb/windows-tdep.c | 33 +- gdb/windows-tdep.h | 16 +- gdb/xstormy16-tdep.c | 5 +- gdb/xtensa-tdep.c | 7 +- gdb/z80-tdep.c | 7 +- 99 files changed, 1304 insertions(+), 470 deletions(-) create mode 100644 gdb/testsuite/gdb.base/backtrace-through-cu-nodebug-caller.c create mode 100644 gdb/testsuite/gdb.base/backtrace-through-cu-nodebug-main.c create mode 100644 gdb/testsuite/gdb.base/backtrace-through-cu-nodebug.exp create mode 100644 gdb/testsuite/gdb.base/frame-unwind-disable.c create mode 100644 gdb/testsuite/gdb.base/frame-unwind-disable.exp -- 2.46.2