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 0E0AF384641C for ; Wed, 8 May 2024 14:55:04 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 0E0AF384641C 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 0E0AF384641C 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=1715180106; cv=none; b=e4OtBWFZfPY5FADkaOb4p20uCcLTqdg08bY740zlx4++LquZPMrUPeSkAKCKWzPaFoOVDmiCRj8jqU7tMglIE+mFf5U5M18/FRe7zglbo7I3sh0Q9GfDUTHXjVwFpb/RpbPHGBNY273DgEENgX1r7JPQ0pRNFs042ypV9HStrrA= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1715180106; c=relaxed/simple; bh=2l+HR6BWyR+x2RSTunVVlABlfxA0j0owKSgfZGmeI08=; h=DKIM-Signature:From:To:Subject:Date:Message-ID:MIME-Version; b=PnCSBbRhnDWSC/wdq2be5fYovuO56Mg2C7+/WVUvl46VWYyJxrluPkh0/X+lY1ngICBXRhru0iutpdyrirtFMuTscH50jYsGDMAhqDu77WTYgHQ0K/BNdnS/0kWJiYfE+Mb7PqKuG40IqESLid+nbRJWT/gFk0/673Z15YZCFTE= ARC-Authentication-Results: i=1; server2.sourceware.org DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1715180104; 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=imgNKl062pUVRR2cNZQqmQZPfxSZ+HgI56R8RqArlmA=; b=EOGbI916K7rKcaaZTYADxlpUeshwFEHMo9bPsXYkwFJqRWv0bWMbvIKqXZqUEk8rgJOBFq opYqxkcH1URlUTeon5/VXOCu3zLNBjUqpMqVMz01leEfp5ZTezOvw9SxcY5NgOhJej4tWO zvjF4lxVLzD25A5ueFAzn/m++rHNp/g= 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-385-IPXpBqvLMCaelYCy7ezfWw-1; Wed, 08 May 2024 10:55:02 -0400 X-MC-Unique: IPXpBqvLMCaelYCy7ezfWw-1 Received: from smtp.corp.redhat.com (int-mx05.intmail.prod.int.rdu2.redhat.com [10.11.54.5]) (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 9ED06801211 for ; Wed, 8 May 2024 14:55:02 +0000 (UTC) Received: from fedora.redhat.com (unknown [10.96.134.52]) by smtp.corp.redhat.com (Postfix) with ESMTPS id C665C28E2; Wed, 8 May 2024 14:55:01 +0000 (UTC) From: Guinevere Larsen To: gdb-patches@sourceware.org Cc: Guinevere Larsen Subject: [PATCH v3 0/5] Modernize frame unwinders and add disable feature Date: Wed, 8 May 2024 11:54:50 -0300 Message-ID: <20240508145455.2550696-1-blarsen@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 3.4.1 on 10.11.54.5 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=-5.7 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. Despite sending it now, I don't think this patch series should be merged before gdb 15 is branched. Changes for v3: * Fixed Linaro CI issue in 32 bit arm * Fixed the few comments from Eli. * Documented addition of unwinder class in the oatch 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 | 26 +- 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 | 58 ++- 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, 1247 insertions(+), 445 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.45.0