From patchwork Thu Dec 26 21:54:15 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andrew Burgess X-Patchwork-Id: 37093 Received: (qmail 76994 invoked by alias); 26 Dec 2019 21:54:23 -0000 Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Unsubscribe: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org Delivered-To: mailing list gdb-patches@sourceware.org Received: (qmail 76977 invoked by uid 89); 26 Dec 2019 21:54:22 -0000 Authentication-Results: sourceware.org; auth=none X-Spam-SWARE-Status: No, score=-24.1 required=5.0 tests=AWL, BAYES_00, GIT_PATCH_0, GIT_PATCH_1, GIT_PATCH_2, GIT_PATCH_3, KAM_SHORT, RCVD_IN_DNSWL_NONE, SPF_PASS autolearn=ham version=3.3.1 spammy=stackc, H*MI:andrew, H*m:andrew, Break X-HELO: mail-wm1-f48.google.com Received: from mail-wm1-f48.google.com (HELO mail-wm1-f48.google.com) (209.85.128.48) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Thu, 26 Dec 2019 21:54:21 +0000 Received: by mail-wm1-f48.google.com with SMTP id m24so6746624wmc.3 for ; Thu, 26 Dec 2019 13:54:20 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=embecosm.com; s=google; h=from:to:cc:subject:date:message-id; bh=+Zi3dqMnJJ9kV2FQGSvWXck5QjzvBWZZfAQzMmZFWg0=; b=QZffnjJmYziW+AtXiPjtW1BaayLTFjfLBDzxQ6tWUJOaijiX5fN1JrJRdHK8xJ/FQ6 8+ZxaJArG0kPU1yGtQRWsXR8gIWhe08EG8TuieJFj+PtDj7aFKiX+TTjp54tGiUd3Ybi uYC3N97RjluCWpnUNwM2C96jzobOvUQTBgclf+LDQAxOOrPCAgqFVbQEW/UgcuzDdicB okYPF2EF3OMmSs07b+ToZloQcVzc5weKkYqFNuB2fcgCvqKtdje362qWZUPO+r4iXNHX l86KaKVK7+O11crx4rjPwQE1ypDmGqrzlGhFPg2kRr3EC3QzctnkSk8xMWWNmX0XVOS2 feNA== Return-Path: Received: from localhost (host86-186-80-236.range86-186.btcentralplus.com. [86.186.80.236]) by smtp.gmail.com with ESMTPSA id r6sm32383837wrq.92.2019.12.26.13.54.17 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Thu, 26 Dec 2019 13:54:18 -0800 (PST) From: Andrew Burgess To: gdb-patches@sourceware.org Cc: bernd.edlinger@hotmail.de, tambewilliam@gmail.com, Andrew Burgess Subject: [PATCH] gdb: Fix backtrace with disassemble-next-line on Date: Thu, 26 Dec 2019 21:54:15 +0000 Message-Id: <20191226215415.14589-1-andrew.burgess@embecosm.com> X-IsSubscribed: yes I think this should be applied to the v9 branch too. --- In this commit: commit ec8e2b6d3051f0b4b2a8eee9917898e95046c62f Date: Fri Jun 14 23:43:00 2019 +0100 gdb: Don't allow annotations to influence what else GDB prints A change was accidentally made that moved a call to do_gdb_disassembly out of an if block guarded by 'if (source_print && sal.symtab)'. The result was that if a user has 'set disassemble-next-line on' then the backtrace would now include some disassembly of a few instructions in each frame. This change was not intentional, but was not spotted by any tests. This commit restores the old behaviour and adds a test to ensure this doesn't break again in the future. gdb/ChangeLog: * stack.c (print_frame_info): Move disassemble_next_line code inside source_print block. gdb/testsuite/ChangeLog: * gdb.base/backtrace.c: New file. * gdb.base/backtrace.exp: New file. Change-Id: I47c52a202fa74be138382646b695827940178689 --- gdb/ChangeLog | 5 ++++ gdb/stack.c | 10 ++++---- gdb/testsuite/ChangeLog | 5 ++++ gdb/testsuite/gdb.base/backtrace.c | 40 ++++++++++++++++++++++++++++++ gdb/testsuite/gdb.base/backtrace.exp | 48 ++++++++++++++++++++++++++++++++++++ 5 files changed, 103 insertions(+), 5 deletions(-) create mode 100644 gdb/testsuite/gdb.base/backtrace.c create mode 100644 gdb/testsuite/gdb.base/backtrace.exp diff --git a/gdb/stack.c b/gdb/stack.c index 22820524871..fed482486e9 100644 --- a/gdb/stack.c +++ b/gdb/stack.c @@ -1153,12 +1153,12 @@ print_frame_info (const frame_print_options &fp_opts, print_source_lines (sal.symtab, sal.line, sal.line + 1, 0); } - } - /* If disassemble-next-line is set to on and there is line debug - messages, output assembly codes for next line. */ - if (disassemble_next_line == AUTO_BOOLEAN_TRUE) - do_gdb_disassembly (get_frame_arch (frame), -1, sal.pc, sal.end); + /* If disassemble-next-line is set to on and there is line debug + messages, output assembly codes for next line. */ + if (disassemble_next_line == AUTO_BOOLEAN_TRUE) + do_gdb_disassembly (get_frame_arch (frame), -1, sal.pc, sal.end); + } if (set_current_sal) { diff --git a/gdb/testsuite/gdb.base/backtrace.c b/gdb/testsuite/gdb.base/backtrace.c new file mode 100644 index 00000000000..e6262e8d513 --- /dev/null +++ b/gdb/testsuite/gdb.base/backtrace.c @@ -0,0 +1,40 @@ +/* This testcase is part of GDB, the GNU debugger. + + Copyright 2019 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 . */ + +int __attribute__((noinline,noclone)) +baz () +{ + return 0; /* Break here. */ +} + +int __attribute__((noinline,noclone)) +bar () +{ + return baz (); +} + +int __attribute__((noinline,noclone)) +foo () +{ + return bar (); +} + +int +main () +{ + return foo (); +} diff --git a/gdb/testsuite/gdb.base/backtrace.exp b/gdb/testsuite/gdb.base/backtrace.exp new file mode 100644 index 00000000000..05214c2389a --- /dev/null +++ b/gdb/testsuite/gdb.base/backtrace.exp @@ -0,0 +1,48 @@ +# Copyright 2019 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 . + +# A place for miscellaneous tests related to backtrace. + +standard_testfile + +if { [prepare_for_testing "failed to prepare" $testfile $srcfile] } { + return -1 +} + +if ![runto_main] then { + fail "can't run to main" + return 0 +} + +# Run to the breakpoint at return. +gdb_breakpoint [gdb_get_line_number "Break here."] +gdb_continue_to_breakpoint "Break here." + +# Backtrace with the default options. +gdb_test "bt" \ + [multi_line \ + "#0\[ \t\]*baz \\(\\) at \[^\r\n\]+" \ + "#1\[ \t\]*$hex in bar \\(\\) at \[^\r\n\]+" \ + "#2\[ \t\]*$hex in foo \\(\\) at \[^\r\n\]+" \ + "#3\[ \t\]*$hex in main \\(\\) at \[^\r\n\]+" ] + +# Backtrace with 'set disassemble-next-line on'. This shouldn't make +# any difference to the backtrace. +gdb_test "with disassemble-next-line on -- bt" \ + [multi_line \ + "#0\[ \t\]*baz \\(\\) at \[^\r\n\]+" \ + "#1\[ \t\]*$hex in bar \\(\\) at \[^\r\n\]+" \ + "#2\[ \t\]*$hex in foo \\(\\) at \[^\r\n\]+" \ + "#3\[ \t\]*$hex in main \\(\\) at \[^\r\n\]+" ]