From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from smtp-out2.suse.de (smtp-out2.suse.de [195.135.220.29]) by sourceware.org (Postfix) with ESMTPS id 650063839DF6 for ; Mon, 13 Feb 2023 14:23:10 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 650063839DF6 Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=suse.de Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=suse.de Received: from imap2.suse-dmz.suse.de (imap2.suse-dmz.suse.de [192.168.254.74]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (P-521) server-digest SHA512) (No client certificate requested) by smtp-out2.suse.de (Postfix) with ESMTPS id 9887F1F45A; Mon, 13 Feb 2023 14:23:09 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_rsa; t=1676298189; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc: mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=qEViwaooTCO4apycXhLldyEb2jYQaEejAU6TpPXq5EM=; b=eY2u6GD/R+FmiEq0CU8dkmEO1x6Jml8OanAvTL16ya84m5JNbfEIiaucVleUfx52DpYiAC aJVShrKAJ2lP9B9SAuOMKyTWe/uTUhKQTZ2910E4J5Gh06PsDL90zS33n6N18w7o5ZAhoy 3S9mOqyNIZJB9KQzQOl1SOtN665f8ec= DKIM-Signature: v=1; a=ed25519-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_ed25519; t=1676298189; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc: mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=qEViwaooTCO4apycXhLldyEb2jYQaEejAU6TpPXq5EM=; b=t6RtMj4lP8Mg4KdwdkitdTKNJrTcezS0vRJ+XzRnaKYsaGpsdxTU/q20DlCbafeeGAsQ8L 5zsoe8joX6QYD0Ag== Received: from imap2.suse-dmz.suse.de (imap2.suse-dmz.suse.de [192.168.254.74]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (P-521) server-digest SHA512) (No client certificate requested) by imap2.suse-dmz.suse.de (Postfix) with ESMTPS id 822B0138E6; Mon, 13 Feb 2023 14:23:09 +0000 (UTC) Received: from dovecot-director2.suse.de ([192.168.254.65]) by imap2.suse-dmz.suse.de with ESMTPSA id GAmsHs1H6mOwfgAAMHmgww (envelope-from ); Mon, 13 Feb 2023 14:23:09 +0000 From: Tom de Vries To: gdb-patches@sourceware.org Cc: Tom Tromey Subject: [PATCH v2 4/5] [gdb/symtab] Trust epilogue unwind info for unknown producer (-g0 case) Date: Mon, 13 Feb 2023 15:23:08 +0100 Message-Id: <20230213142309.24366-5-tdevries@suse.de> X-Mailer: git-send-email 2.35.3 In-Reply-To: <20230213142309.24366-1-tdevries@suse.de> References: <20230213142309.24366-1-tdevries@suse.de> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Spam-Status: No, score=-12.5 required=5.0 tests=BAYES_00,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,GIT_PATCH_0,KAM_SHORT,SPF_HELO_NONE,SPF_PASS,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: For a -g0 -fasynchronous-unwind-tables exec (without .debug_info but with .eh_frame section), start using the dwarf2 unwinder instead of the "amd64 epilogue override" unwinder, by returning true in compunit_epilogue_unwind_valid for cust == nullptr. This has effect both on the amd64 and i386 targets, but only add amd64 test-case gdb.base/unwind-on-each-insn-amd64-2.exp. --- gdb/symtab.h | 4 +- .../gdb.base/unwind-on-each-insn-amd64-2.exp | 52 ++++++++++++++++++ .../gdb.base/unwind-on-each-insn-amd64-2.s | 54 +++++++++++++++++++ 3 files changed, 108 insertions(+), 2 deletions(-) create mode 100644 gdb/testsuite/gdb.base/unwind-on-each-insn-amd64-2.exp create mode 100644 gdb/testsuite/gdb.base/unwind-on-each-insn-amd64-2.s diff --git a/gdb/symtab.h b/gdb/symtab.h index cd6b5f722fd..17d2746fd48 100644 --- a/gdb/symtab.h +++ b/gdb/symtab.h @@ -1924,9 +1924,9 @@ static inline bool compunit_epilogue_unwind_valid (struct compunit_symtab *cust) { /* In absence of producer information, assume epilogue unwind info is - invalid. */ + valid. */ if (cust == nullptr) - return false; + return true; return cust->epilogue_unwind_valid (); } diff --git a/gdb/testsuite/gdb.base/unwind-on-each-insn-amd64-2.exp b/gdb/testsuite/gdb.base/unwind-on-each-insn-amd64-2.exp new file mode 100644 index 00000000000..c8a94ccef4f --- /dev/null +++ b/gdb/testsuite/gdb.base/unwind-on-each-insn-amd64-2.exp @@ -0,0 +1,52 @@ +# Copyright 2023 Free Software Foundation, Inc. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . */ + +# Check that epilogue unwind info is used, even if no debug info is available. + +require is_x86_64_m64_target + +set srcfile_flags {debug} +set srcfile2_flags {nodebug} + +if [info exists COMPILE] { + # Make sure that we use .eh_frame info, by generating it + # using -fasynchronous-unwind-tables. + if { [gdb_can_simple_compile fasynchronous-unwind-tables \ + { void foo () { } } object -fasynchronous-unwind-tables] } { + lappend srcfile2_flags additional_flags=-fasynchronous-unwind-tables + } else { + unsupported "required: .eh_frame" + return + } + standard_testfile unwind-on-each-insn.c unwind-on-each-insn-foo.c + # When updating the .s file, use these flags to generate the file: + #lappend srcfile2_flags additional_flags=-save-temps + #lappend srcfile2_flags additional_flags=-dA + # and do the following: + # - copy it in place, run the test-case and verify that all tests pass. + # - confuse the amd64 epilogue unwinder by inserting the following + # in foo: + # nop + # + pushq $.L1 + # + ret + # + .L1: + # + nop + # popq %rbp + # - verify that the test-case passes. +} else { + standard_testfile unwind-on-each-insn.c .s +} + +source $srcdir/$subdir/unwind-on-each-insn.exp.tcl diff --git a/gdb/testsuite/gdb.base/unwind-on-each-insn-amd64-2.s b/gdb/testsuite/gdb.base/unwind-on-each-insn-amd64-2.s new file mode 100644 index 00000000000..c141f71817c --- /dev/null +++ b/gdb/testsuite/gdb.base/unwind-on-each-insn-amd64-2.s @@ -0,0 +1,54 @@ + .file "unwind-on-each-insn-foo.c" + .text + .globl foo + .type foo, @function +foo: +.LFB0: + .cfi_startproc +# BLOCK 2 seq:0 +# PRED: ENTRY (FALLTHRU) + pushq %rbp + .cfi_def_cfa_offset 16 + .cfi_offset 6, -16 + movq %rsp, %rbp + .cfi_def_cfa_register 6 + movq %rdi, -8(%rbp) + nop + pushq $.L1 + ret +.L1: + nop + popq %rbp + .cfi_def_cfa 7, 8 +# SUCC: EXIT [100.0%] + ret + .cfi_endproc +.LFE0: + .size foo, .-foo + .globl bar + .type bar, @function +bar: +.LFB1: + .cfi_startproc +# BLOCK 2 seq:0 +# PRED: ENTRY (FALLTHRU) + pushq %rbp + .cfi_def_cfa_offset 16 + .cfi_offset 6, -16 + movq %rsp, %rbp + .cfi_def_cfa_register 6 + subq $8, %rsp + movq %rdi, -8(%rbp) + movq -8(%rbp), %rax + movq %rax, %rdi + call foo + nop + leave + .cfi_def_cfa 7, 8 +# SUCC: EXIT [100.0%] + ret + .cfi_endproc +.LFE1: + .size bar, .-bar + .ident "GCC: (SUSE Linux) 7.5.0" + .section .note.GNU-stack,"",@progbits -- 2.35.3