From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.129.124]) by sourceware.org (Postfix) with ESMTPS id 581063858D28 for ; Mon, 8 Apr 2024 20:19:28 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 581063858D28 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 581063858D28 Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=170.10.129.124 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1712607570; cv=none; b=WDvCzbB7406zOaLwXSle7GZHShY6Fao3WmBZaE3Zidu1TrsOC24/QbnfqUtHlCjWl+JBLE8oldnfpRNuxeeB3kKs2h8c706FrZ7FEPfV1gYWaMiU7ymApZFTtc2PnkI0nvoM4x0Zuqgf7cW2Du9OEGcR34CvIShYJsWA8ju9+44= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1712607570; c=relaxed/simple; bh=sGB5VPrYF9fur0YekDfP31L77DcUcifHUBFTxtw4o08=; h=DKIM-Signature:From:To:Subject:Date:Message-ID:MIME-Version; b=VxCT/tayA+Eg64tsGO1y/1ucHogpTt/Gsh0Z3E06UFa5nQ05nHAEnNukxtC7bwMDu88f8hYMlYAtSRS/BoN2fVLDcU7paIsn6yhGPv+qXJbIiVRwKru/V5DyVmkYBJk7ewg/9qM57ldmbD/J+jqwhw7xHdm5Du8iTnuuBKD6ji4= ARC-Authentication-Results: i=1; server2.sourceware.org DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1712607568; 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=mW/D5H/yLXa68XxCm9ONtfUT0tfatvxJl69AMtcvxVE=; b=WIM1JxT0JDBwxKBaisO35dhWVNvdtoNZ+adoDP2Iw79Iz9nVp8T/A1QDysenM2uq+5TUPj ZawV7SmuniZGb0Si3B8fsTDQhSwtUy6JYZIzQtwlt+D7CcTWRX1iUIEWeQ5LXkMrY5kObB d2jTGwSHHmm+QBEWk6FmyCgHcK1w5Hs= Received: from mimecast-mx02.redhat.com (mimecast-mx02.redhat.com [66.187.233.88]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-199-DKJ6okspOLWwIE7CBXANlQ-1; Mon, 08 Apr 2024 16:19:26 -0400 X-MC-Unique: DKJ6okspOLWwIE7CBXANlQ-1 Received: from smtp.corp.redhat.com (int-mx07.intmail.prod.int.rdu2.redhat.com [10.11.54.7]) (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 mimecast-mx02.redhat.com (Postfix) with ESMTPS id 70328802CB3 for ; Mon, 8 Apr 2024 20:19:26 +0000 (UTC) Received: from fedora.redhat.com (unknown [10.96.134.170]) by smtp.corp.redhat.com (Postfix) with ESMTPS id A1CC91C0A922; Mon, 8 Apr 2024 20:19:25 +0000 (UTC) From: Guinevere Larsen To: gdb-patches@sourceware.org Cc: Guinevere Larsen Subject: [PATCH v2 0/5] Modernize frame unwinders and add disable feature Date: Mon, 8 Apr 2024 17:19:10 -0300 Message-ID: <20240408201915.1482831-1-blarsen@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 3.4.1 on 10.11.54.7 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-Spam-Status: No, score=-6.2 required=5.0 tests=BAYES_00,DKIMWL_WL_HIGH,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_NONE,RCVD_IN_MSPIKE_H4,RCVD_IN_MSPIKE_WL,SPF_HELO_NONE,SPF_NONE,TXREP autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org List-Id: 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. As for the unwinder classes, they were chosen somewhat arbitrarily, mostly based on where I found an unwinder and its name. I almost expect some unwinders to be mis-categorized, but that should be easy to fix. The changes up to patch 3 have been tested with a try-branch, no regressions as far as I could see. 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 | 7 + 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 | 24 ++ 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 | 335 ++++++++++++++---- gdb/frame-unwind.h | 178 +++++++++- gdb/frame.c | 28 +- gdb/frv-linux-tdep.c | 6 +- gdb/frv-tdep.c | 5 +- gdb/ft32-tdep.c | 6 +- gdb/gdbarch.c | 3 + gdb/gdbarch.h | 5 + gdb/gdbarch.py | 3 + 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 | 50 ++- 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 | 87 +++++ gdb/testsuite/gdb.base/frame-unwind-disable.c | 21 ++ .../gdb.base/frame-unwind-disable.exp | 114 ++++++ gdb/tic6x-tdep.c | 12 +- gdb/tilegx-tdep.c | 5 +- gdb/tramp-frame.c | 56 ++- 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, 1240 insertions(+), 444 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.44.0