From patchwork Sun Dec 15 11:25:32 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Bernd Edlinger X-Patchwork-Id: 36885 Received: (qmail 89291 invoked by alias); 15 Dec 2019 11:25:39 -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 89282 invoked by uid 89); 15 Dec 2019 11:25:39 -0000 Authentication-Results: sourceware.org; auth=none X-Spam-SWARE-Status: No, score=-17.0 required=5.0 tests=AWL, BAYES_00, FREEMAIL_FROM, GIT_PATCH_0, GIT_PATCH_1, GIT_PATCH_2, GIT_PATCH_3, KAM_SHORT, KAM_STOCKGEN, RCVD_IN_DNSWL_NONE, SPF_HELO_PASS, SPF_PASS autolearn=ham version=3.3.1 spammy=played, stood, Step, sentence X-HELO: EUR01-HE1-obe.outbound.protection.outlook.com Received: from mail-oln040092065047.outbound.protection.outlook.com (HELO EUR01-HE1-obe.outbound.protection.outlook.com) (40.92.65.47) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Sun, 15 Dec 2019 11:25:35 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=U/BdHuDvjn82SBn4dsfRBiVVbD1KRqqzkw34e37QSaxGB9T+yP8Dk3BohKigko1m00xfrEPU7kc2Y9Jag+K8ep+uAD6iWDBErxnD1Tq3LLHqE0tKg7gqJZw5BWdcvRlgXhgUgPZpsvH7MuDiWp9CZcECpGRSSHkOAqbcRgbAchcnUEN73mpxjfg+IzbbHUOopm5pcltFUuLBPEHnykAOLA+WjvWjAteD476oYu9hEIBBhCtm/47wG2+UuYIyJ+cPES/diO1Pva1P5jJtbxEH1U5+pfU7eLScPyGoyWtGe9QurUJuZ295Ux4Aq3gyvEWCOZxt+cBV7YRTkHFoLsHLxw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=Q63Fx4AJ0UFWeOI2n2kHeZYG77CBZXrEp+nFcjcciJc=; b=ltClulR+lidhQ9zqf7P2MCYXjG7JtNyA1z0P0V+lV23Rw8l25MAYMlqnHoOWmZK/yyfx0TFraKptNNqw/gaT80ydLkaLiCG78V85Y88HB6C/GEQcw5FLp8hqovp04Mbe8QRTfz6d0GFjPYckLezRdpJfzBMUc5dIdxoivouwEn8zzAWV6c0DyvAE9cy0d57mS8BAenHaBCjrHVwLXRdBYMBbh54SA830tvP6A3BR/U1PvCl301u2CdWqbOXqnvqn+AYstbnzDZ6DgBzO3Wp32J0KICAkNDqy3yWxX9LCAe/0gkDlTABBUtriNNyVxwjCA5HzMXikNU+Hcbl605d7oA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=none; dmarc=none; dkim=none; arc=none Received: from DB5EUR01FT063.eop-EUR01.prod.protection.outlook.com (10.152.4.60) by DB5EUR01HT157.eop-EUR01.prod.protection.outlook.com (10.152.4.179) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2538.14; Sun, 15 Dec 2019 11:25:32 +0000 Received: from AM0PR08MB3714.eurprd08.prod.outlook.com (10.152.4.53) by DB5EUR01FT063.mail.protection.outlook.com (10.152.5.139) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2538.14 via Frontend Transport; Sun, 15 Dec 2019 11:25:32 +0000 Received: from AM0PR08MB3714.eurprd08.prod.outlook.com ([fe80::8dd1:fb18:6271:f769]) by AM0PR08MB3714.eurprd08.prod.outlook.com ([fe80::8dd1:fb18:6271:f769%7]) with mapi id 15.20.2538.019; Sun, 15 Dec 2019 11:25:32 +0000 From: Bernd Edlinger To: Simon Marchi , Pedro Alves , "gdb-patches@sourceware.org" Subject: [PATCHv6] Make "skip" work on inline frames Date: Sun, 15 Dec 2019 11:25:32 +0000 Message-ID: References: <8fc93db4-8906-4f4e-53f4-225ebfa0115d@simark.ca> <215bbf9c-4c3c-5cd2-c657-51aa7262f234@simark.ca> <8d5b880e-12f2-11ac-1bfe-82941f64369b@simark.ca> <7cc09703-1d47-2598-05f1-57199289d31a@simark.ca> In-Reply-To: <7cc09703-1d47-2598-05f1-57199289d31a@simark.ca> x-microsoft-original-message-id: <997df39b-7e19-1b96-f677-d08763815586@hotmail.de> x-ms-exchange-transport-forked: True MIME-Version: 1.0 On 12/15/19 1:46 AM, Simon Marchi wrote: > On 2019-12-02 11:47 a.m., Bernd Edlinger wrote: >> On 12/2/19 3:34 AM, Simon Marchi wrote: >>> On 2019-11-24 6:22 a.m., Bernd Edlinger wrote: >>>> This is just a minor update on the patch >>>> since the function SYMBOL_PRINT_NAME was removed with >>>> commit 987012b89bce7f6385ed88585547f852a8005a3f >>>> I replaced it with sym->print_name (), otherwise the >>>> patch is unchanged. >>> >>> Hi Bernd, >>> >>> Sorry, I had lost this in the mailing list noise. >>> >>> I played a bit with the patch and different cases of figure. I am not able to understand >>> the purpose of each of your changes (due to the complexity of that particular code), but >>> I didn't find anything that stood out as wrong to me. Pedro might be able to do a more >>> in-depth review of the event handling code. >>> >>> If the test tests specifically skipping of inline functions, I'd name it something more >>> descriptive than "skip2.exp", maybe "skip-inline.exp"? >>> >>> Unfortunately, your test doesn't pass on my computer (gcc 9.2.0), but neither does the >>> gdb.base/skip.exp. I am attaching the gdb.log when running your test, if it can help. >>> >>> Simon >>> >> >> Hi Simon, >> >> I only tested that with gcc-4.8, and both test cases worked with that gcc version. >> >> I tried now with gcc-trunk version from a few days ago, and I think I see >> what you mean. >> >> skip2.c (now skip-inline.c) can be fixed by removing the assignment >> to x in the first line, which is superfluous (and copied from skip.c). >> But skip.c cannot be fixed this way. I only see a chance to allow >> the stepping back to main and then to foo happen. >> >> Does this modified test case work for you? >> >> >> >> Thanks >> Bernd. >> > > Hi Bernd, > > Thanks for fixing the skip.exp test at the same time. I'd prefer if this was done as a > separate patch though, since it's an issue separate from the inline stepping issue you > were originally tackling. Okay, I split that out as a separate patch now. > > So the patch looks good to me if you remove those bits, and fix the following nits: > > - Remove "load_lib completion-support.exp" from the test. > - The indentation in the .exp should use tabs for multiple of 8 columns, instead of just spaces (like you did in the .c). > Done. Also added changelog text, which I forgot previously. > A comment I would have on the bits in skip.exp: > > # with recent gcc we jump once back to main before entering foo here > # if that happens try to step a second time > gdb_test "step" "foo \\(\\) at.*" "step 3" "main \\(\\) at .*" "step" > > It's usually not helpful to say "with recent gcc", since it doesn't mean much, especially > when reading this 10 years from now. Instead, mention the specific gcc version this was > observed with. Also, begin the sentence with a capital letter and finish with a period. > Done. Is it OK for trunk? Thanks Bernd. gdb: 2019-12-15 Bernd Edlinger * infcmd.c (prepare_one_step): Step over skipped inline functions. * infrun.c (inline_frame_is_marked_for_skip): New helper function. (process_event_stop_test): Keep stepping over skipped inline functions. gdb/testsuite: 2019-12-15 Bernd Edlinger * gdb.base/skip-inline.c: New file. * gdb.base/skip-inline.exp: New file. From 7bee2af24e4f21ae449f604ac549492d5fcab1a4 Mon Sep 17 00:00:00 2001 From: Bernd Edlinger Date: Wed, 30 Oct 2019 21:35:22 +0100 Subject: [PATCH 2/2] Add a test case for skip with inlined functions --- gdb/testsuite/gdb.base/skip-inline.c | 64 ++++++++++++++++++++++++++++ gdb/testsuite/gdb.base/skip-inline.exp | 78 ++++++++++++++++++++++++++++++++++ 2 files changed, 142 insertions(+) create mode 100644 gdb/testsuite/gdb.base/skip-inline.c create mode 100644 gdb/testsuite/gdb.base/skip-inline.exp diff --git a/gdb/testsuite/gdb.base/skip-inline.c b/gdb/testsuite/gdb.base/skip-inline.c new file mode 100644 index 0000000..e562149 --- /dev/null +++ b/gdb/testsuite/gdb.base/skip-inline.c @@ -0,0 +1,64 @@ +/* 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 . */ + +#include + +int bar (void); +int baz (int); +void skip1_test_skip_file_and_function (void); +void test_skip_file_and_function (void); + +__attribute__((__always_inline__)) static inline int +foo (void) +{ + return bar (); +} + +int +main () +{ + volatile int x; + + /* step immediately into the inlined code */ + baz (foo ()); + + /* step first over non-inline code, this involves a different code path */ + x = 0; x = baz (foo ()); + + test_skip_file_and_function (); + + return 0; +} + +static void +test_skip (void) +{ +} + +static void +end_test_skip_file_and_function (void) +{ + abort (); +} + +void +test_skip_file_and_function (void) +{ + test_skip (); + skip1_test_skip_file_and_function (); + end_test_skip_file_and_function (); +} diff --git a/gdb/testsuite/gdb.base/skip-inline.exp b/gdb/testsuite/gdb.base/skip-inline.exp new file mode 100644 index 0000000..4ab9ecf --- /dev/null +++ b/gdb/testsuite/gdb.base/skip-inline.exp @@ -0,0 +1,78 @@ +# 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 . + +standard_testfile + +if { [prepare_for_testing "failed to prepare" "skip-inline" \ + {skip-inline.c skip1.c } \ + {debug nowarnings}] } { + return -1 +} + +set srcfile skip-inline.c +set srcfile1 skip1.c + +if ![runto_main] { + fail "can't run to main" + return +} + +# Create a skiplist entry for a specified file and function. + +gdb_test "skip function foo" "Function foo will be skipped when stepping\." + +gdb_test "bt" "\\s*\\#0\\s+main.*" "in the main" +gdb_test "step" ".*" "step into baz, since foo will be skipped" +gdb_test "bt" "\\s*\\#0\\s+baz.*" "in the baz, since foo was skipped" +gdb_test "step" ".*" "step in the baz" +gdb_test "bt" "\\s*\\#0\\s+baz.*" "still in the baz" +gdb_test "step" ".*" "step back to main" +gdb_test "bt" "\\s*\\#0\\s+main.*" "again in the main" +gdb_test "step" ".*" "step again into baz, since foo will be skipped" +gdb_test "bt" "\\s*\\#0\\s+baz.*" "again in the baz" +gdb_test "step" ".*" "step in the baz, again" +gdb_test "bt" "\\s*\\#0\\s+baz.*" "still in the baz, again" +gdb_test "step" ".*" "step back to main, again" +gdb_test "bt" "\\s*\\#0\\s+main.*" "again back to main" + +if ![runto_main] { + fail "can't run to main" + return +} + +with_test_prefix "double step" { + gdb_test "bt" "\\s*\\#0\\s+main.*" "in the main" + gdb_test "step 2" ".*" "step into baz, since foo will be skipped" + gdb_test "bt" "\\s*\\#0\\s+baz.*" "still in the baz" + gdb_test "step" ".*" "step back to main" + gdb_test "bt" "\\s*\\#0\\s+main.*" "again in the main" + gdb_test "step 2" ".*" "step again into baz, since foo will be skipped" + gdb_test "bt" "\\s*\\#0\\s+baz.*" "again in the baz" + gdb_test "step" ".*" "step back to main, again" + gdb_test "bt" "\\s*\\#0\\s+main.*" "again back to main" +} + +if ![runto_main] { + fail "can't run to main" + return +} + +with_test_prefix "triple step" { + gdb_test "bt" "\\s*\\#0\\s+main.*" "in the main" + gdb_test "step 3" ".*" "step over baz" + gdb_test "bt" "\\s*\\#0\\s+main.*" "again in the main" + gdb_test "step 3" ".*" "step over baz, again" + gdb_test "bt" "\\s*\\#0\\s+main.*" "again back to main" +} -- 1.9.1