From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from simark.ca by simark.ca with LMTP id CA4VL3YafWeeDwYAWB0awg (envelope-from ) for ; Tue, 07 Jan 2025 07:13:42 -0500 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=NGm/jdMs; dkim-atps=neutral Received: by simark.ca (Postfix, from userid 112) id BD7F21E0C0; Tue, 7 Jan 2025 07:13:42 -0500 (EST) X-Spam-Checker-Version: SpamAssassin 4.0.0 (2022-12-13) on simark.ca X-Spam-Level: X-Spam-Status: No, score=-6.4 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_MED 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 05F431E05C for ; Tue, 7 Jan 2025 07:13:42 -0500 (EST) Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id A89D33858280 for ; Tue, 7 Jan 2025 12:13:41 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org A89D33858280 Authentication-Results: sourceware.org; dkim=pass (1024-bit key, unprotected) header.d=redhat.com header.i=@redhat.com header.a=rsa-sha256 header.s=mimecast20190719 header.b=NGm/jdMs 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 AD2DF3858D21 for ; Tue, 7 Jan 2025 12:11:17 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org AD2DF3858D21 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 AD2DF3858D21 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=1736251877; cv=none; b=Ff74d3uRxWugjaqXZO4r0JuvtY8QFd16g+c5qTXnsoQmtRC7iw2trU6WWfN5SfrkSfCJd+BMLC0u0/NCX5/Hi97/LT+VjG/WWizf2fuyVybJ//8O5kgTVIPV1draa/Z+7Oh1jqQKNy/OrAtG5a5AGoPG9XF+FNEIqs+Kwk4RL8k= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1736251877; c=relaxed/simple; bh=7cw7iLjqFu/hr6mJCr/9Ug56D1NzG4Kn3t/SlCu0rWQ=; h=DKIM-Signature:Message-ID:Date:MIME-Version:Subject:To:From; b=fFxy0ImrrsUXeEFO9ks0M/oXag4KKQBTJA9G1vzB8EClUMHSNFbYBIYbvfypvSyZGf4AaN/SzNzESNeTDD6UufZOJpJUGDZGOcgfJffDhXMC5dbg4YddbFzc30XSsT/gQ1vWVXOB/7QGsheB0GOTaGyo91lSFTxnMTckkh3wYbE= ARC-Authentication-Results: i=1; server2.sourceware.org DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org AD2DF3858D21 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1736251877; 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: in-reply-to:in-reply-to:references:references; bh=Nv/1Ubb+24gOG9cOa8psjXhRselZ28aKGlIf5iH5kE8=; b=NGm/jdMsWudPebH2ZuArcuxpcEAE6qbrQTnGmOuQF/ztBVDWc+RY8Ate5skC/ryDKsAObO zWyDH5LoVJsAP1tII4wHoFs/oQQFb6P/yzixzX0BjT0Jp6SBDrXgHZynNSBt2koV8Sd2ra xCw6MOr3KIBpguzEezYowefyssBn3tk= Received: from mail-pl1-f200.google.com (mail-pl1-f200.google.com [209.85.214.200]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-80-P0sRabSNOISVEHpQ-FNmaw-1; Tue, 07 Jan 2025 07:11:16 -0500 X-MC-Unique: P0sRabSNOISVEHpQ-FNmaw-1 X-Mimecast-MFC-AGG-ID: P0sRabSNOISVEHpQ-FNmaw Received: by mail-pl1-f200.google.com with SMTP id d9443c01a7336-21648c8601cso188030485ad.2 for ; Tue, 07 Jan 2025 04:11:16 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1736251875; x=1736856675; h=content-transfer-encoding:in-reply-to:from:content-language :references:to:subject:user-agent:mime-version:date:message-id :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=Nv/1Ubb+24gOG9cOa8psjXhRselZ28aKGlIf5iH5kE8=; b=U6932lmr6u9BZrED0WDtvdrutC3VcLx48YPXPhHDjgWTGbh0kII4jXPsAEXStxw30E tOCx+xXHhKUvVBpFpGJYTnILT9gh+zHwi/qxjF0/Apic+a1Sd7Q67mMtxvzFEXYbl+rR 7gN5ZRjOPxX724rwcqmtMFUIhqcwmJhUJR8ekW2TYbKtdr4YczkaQOHljNXja8dEwmuB 3iV2EPjN1sU4o8MSHD/BFl8vm4o57Yg0GUDOUjK+k3kLZc/mAbIqJtyXy2bMUX0GuFCk vnpqraV3Vfb476GhFvAa5mSyjnu2ShM8qZwq0OtE4xQWP2KvVHxEWSt7TC4Bv+qKHV3+ /0nQ== X-Gm-Message-State: AOJu0YxkOyUOEEouyey82VGgvD5K7ZhforNplaGBpZUKIfwAoUDG8Ev7 I+gEQwlvS0ax5k/KUNn+NkR6MMwI59exCuJ+hnkoAjBwPpg2BGqlof4DAOBU0+aUwyanyxkdIzD i2cH+uG88b0orI+Uj+m59fjN4Nht34Fe4+aDyoWYOxfCgkwbxG8R7rT/7y/Z2lCFPZDhXvO9uPs GKUNIjbf4czVisqanGkjE0ybjjI2Ozi0FGEymM1iDoSXz0 X-Gm-Gg: ASbGncvhSYAgdodHUavqF3o31ETxE60TZyDu93Oc4amMnv/st06nUvalTKJWX/ZxEbG tvXnkLyjtIpAFLXUSGL7i7bzp+ze+UYxEPIX65dBNJfs2spG6b7o11m8Vrl7YGr7JtotXruXbW1 nP7k88olMcHl0OsBLp6WJ/2A96/p2sZI6F+A0jfuCecM2X3ZKNh1iAmcuYsQp0D3L9uGlfk4udS ZBvZltxzuialxUOM6n73uHEYy8w32anJpY02IbCbL+8+IqsABkiMLxuXEVT X-Received: by 2002:a17:903:11c5:b0:216:30f9:93d4 with SMTP id d9443c01a7336-219e6e894demr859458925ad.8.1736251874754; Tue, 07 Jan 2025 04:11:14 -0800 (PST) X-Google-Smtp-Source: AGHT+IH6Iw5T+koroal/yPLE21Y4CS1doGQ2+NGvpE00NMmMzClkNGAZo946JrL5F3m3/6nQVISPEg== X-Received: by 2002:a17:903:11c5:b0:216:30f9:93d4 with SMTP id d9443c01a7336-219e6e894demr859458605ad.8.1736251874240; Tue, 07 Jan 2025 04:11:14 -0800 (PST) Received: from [192.168.0.130] ([189.7.87.216]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-219dc9d4464sm309723675ad.159.2025.01.07.04.11.12 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Tue, 07 Jan 2025 04:11:13 -0800 (PST) Message-ID: <6ea4c43e-7c26-4d4d-ab96-bf47c326ee55@redhat.com> Date: Tue, 7 Jan 2025 09:11:05 -0300 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: [PING][PATCH v8 0/5] Modernize frame unwinders and add disable feature To: gdb-patches@sourceware.org, guinevere@redhat.com References: <20241210195115.3046370-1-guinevere@redhat.com> From: Guinevere Larsen In-Reply-To: <20241210195115.3046370-1-guinevere@redhat.com> X-Mimecast-Spam-Score: 0 X-Mimecast-MFC-PROC-ID: cupLVni9SC5QmxQ6UmoZkbdRYqL4WAsiVNkqoF8ErtM_1736251875 X-Mimecast-Originator: redhat.com Content-Language: en-US Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit 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 Ping :) All of the documentation, and patches 2 and 3, have already been approved. On 12/10/24 4:51 PM, Guinevere Larsen wrote: > 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, still accessed > throught the registry subsystem. This isn't required (like I originally > thought it was), but it does make the whole system more readable in my > opinion. > > Patch 2 adds a new field for frame unwinders, their "class", which > roughly correlates to which area of GDB adds that unwinder. They were > chosen rather arbitrarily based on my understanding, where the unwinder > is added and its name. This class will be used to simplify bulk > disabling of unwinders introduced by patch 4. > > 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. > > Patch 4 adds the possibility to disable unwinders based on their name or > class, and disable all unwinders at once if desired. It also reverts > commit 3c3bb0580be0 since that patch pointed out that if a more generic > system was implemented it could be reverted. > > Patch 5 adds the test I was trying to upstream all along. > > All the documentation has been approved by Eli already. Patches 2 and 3 > were already approved by Simon. > > Changes for v8: > * Simplified the loop printing the table for "maint info > frame-unwinders". > * Used gdb::option to parse the options for "maint frame-unwinder > disable" > * Changed error message when no unwinder is found but some unwinders > were disabled > * Cosmetic fixes. > > Changes for v7: > * Moved the std::vector back to being accessed through the registry system > Removed the approvals from patch 1 because I think this change is > reasonably big, and needs another review. > * Several cosmetic changes to the code, following feedback from Simon > and Thiago. > * Fixed the test from patch 4, following Thiago's suggestion > * Users can no longer specify the unwinder class with the > FRAME_UNWINDER_ prefix > > Changes for v6: > * Patches 1 and 2 were approved by Simon > * Several cosmetic changes to patch 3 and 4 > * New dealloc_cache default implementation (noop), and frame_unwind_legacy > defaults to it if no function pointer is given. > * New prev_arch default implementation (getting the current arch), and > frame_unwind_legacy defaults to it if no pointer is given > * Renamed "sniffer" to "sniff", to make it more clear what the method > does > * Fixed some problems with the testcase. > > 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 | 21 + > 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/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 | 64 +-- > gdb/dummy-frame.c | 8 +- > gdb/dummy-frame.h | 2 +- > gdb/dwarf2/frame-tailcall.c | 9 +- > gdb/dwarf2/frame-tailcall.h | 2 +- > gdb/dwarf2/frame.c | 46 +- > gdb/dwarf2/frame.h | 6 - > gdb/frame-unwind.c | 420 ++++++++++++++---- > gdb/frame-unwind.h | 173 +++++++- > gdb/frame.c | 21 +- > gdb/frv-linux-tdep.c | 6 +- > gdb/frv-tdep.c | 5 +- > gdb/ft32-tdep.c | 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/or1k-tdep.c | 7 +- > gdb/ppc-fbsd-tdep.c | 5 +- > gdb/ppc-obsd-tdep.c | 5 +- > gdb/python/py-unwind.c | 61 ++- > 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 | 95 ++++ > .../gdb.base/frame-info-consistent.exp | 8 +- > gdb/testsuite/gdb.base/frame-unwind-disable.c | 22 + > .../gdb.base/frame-unwind-disable.exp | 137 ++++++ > gdb/testsuite/gdb.base/maint.exp | 4 - > gdb/tic6x-tdep.c | 12 +- > gdb/tilegx-tdep.c | 5 +- > gdb/tramp-frame.c | 70 ++- > gdb/v850-tdep.c | 5 +- > gdb/vax-tdep.c | 6 +- > gdb/windows-tdep.c | 35 +- > gdb/windows-tdep.h | 16 +- > gdb/xstormy16-tdep.c | 5 +- > gdb/xtensa-tdep.c | 7 +- > gdb/z80-tdep.c | 7 +- > 97 files changed, 1339 insertions(+), 551 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 > -- Cheers, Guinevere Larsen She/Her/Hers