From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from simark.ca by simark.ca with LMTP id EGfzMAwYgGDnNQAAWB0awg (envelope-from ) for ; Wed, 21 Apr 2021 08:18:20 -0400 Received: by simark.ca (Postfix, from userid 112) id BDF8C1F106; Wed, 21 Apr 2021 08:18:20 -0400 (EDT) X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on simark.ca X-Spam-Level: X-Spam-Status: No, score=-0.7 required=5.0 tests=DKIM_SIGNED,DKIM_VALID, DKIM_VALID_AU,MAILING_LIST_MULTI,RDNS_DYNAMIC,URIBL_BLOCKED autolearn=ham autolearn_force=no version=3.4.2 Received: from sourceware.org (ip-8-43-85-97.sourceware.org [8.43.85.97]) (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 simark.ca (Postfix) with ESMTPS id 35A041E813 for ; Wed, 21 Apr 2021 08:18:18 -0400 (EDT) Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id E17CE39B7021; Wed, 21 Apr 2021 12:18:17 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org E17CE39B7021 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sourceware.org; s=default; t=1619007497; bh=y12Xeio+OzgFp1nI+pufSJLPbQuzriP+u2n2aF890mA=; h=To:Subject:Date:In-Reply-To:References:In-Reply-To:References: List-Id:List-Unsubscribe:List-Archive:List-Post:List-Help: List-Subscribe:From:Reply-To:From; b=EFXHXRBF5BimsBMiA2dO3n9Piw8UHGu/8TgEp3Z+KjFW0yDDCLRwnjae4Ja/4bK9g crhK0xkTZBJ2JHd0u0EpmXHqQudkga4nz6ujndfO/1zmWYyttzyox91AbOvhoAKcwD X45pdf4iYu6E6TrXXXVzNp8fogaOuhRdzLemVc4g= Received: from mga17.intel.com (mga17.intel.com [192.55.52.151]) by sourceware.org (Postfix) with ESMTPS id 5AA9E389202B for ; Wed, 21 Apr 2021 12:18:05 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.3.2 sourceware.org 5AA9E389202B IronPort-SDR: CCbuZdNm/Wxc2cIL4/QjfdNOCzcVEJAXHVkUM1xJJZumbwJ3sW4BJYyI6/V/7uRJRvwGfjHrLx GwSi7lq9FXtQ== X-IronPort-AV: E=McAfee;i="6200,9189,9960"; a="175794008" X-IronPort-AV: E=Sophos;i="5.82,238,1613462400"; d="scan'208";a="175794008" Received: from fmsmga008.fm.intel.com ([10.253.24.58]) by fmsmga107.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 21 Apr 2021 05:18:04 -0700 IronPort-SDR: 0QKHoQJts8qr8gbJHlgO37hGWIHg65DdoUIH/wVzKBqJGwxCbSp5ydByqrK8XdNyYD8JTASVgh Acm95rqxwhtQ== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.82,238,1613462400"; d="scan'208";a="420971775" Received: from irvmail001.ir.intel.com ([10.43.11.63]) by fmsmga008.fm.intel.com with ESMTP; 21 Apr 2021 05:18:03 -0700 Received: from ulvlx001.iul.intel.com (ulvlx001.iul.intel.com [172.28.207.17]) by irvmail001.ir.intel.com (8.14.3/8.13.6/MailSET/Hub) with ESMTP id 13LCI2tc031918; Wed, 21 Apr 2021 13:18:02 +0100 Received: from ulvlx001.iul.intel.com (localhost [127.0.0.1]) by ulvlx001.iul.intel.com with ESMTP id 13LCI2a3026467; Wed, 21 Apr 2021 14:18:02 +0200 Received: (from taktemur@localhost) by ulvlx001.iul.intel.com with LOCAL id 13LCI2wU026462; Wed, 21 Apr 2021 14:18:02 +0200 To: gdb-patches@sourceware.org Subject: [PATCH v3 4/4] gdb/mi: add a '--force-condition' flag to the '-break-insert' cmd Date: Wed, 21 Apr 2021 14:17:42 +0200 Message-Id: X-Mailer: git-send-email 1.7.0.7 In-Reply-To: References: In-Reply-To: References: X-BeenThere: gdb-patches@sourceware.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gdb-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , From: Tankut Baris Aktemur via Gdb-patches Reply-To: Tankut Baris Aktemur Errors-To: gdb-patches-bounces@sourceware.org Sender: "Gdb-patches" Add a '--force-condition' flag to the '-break-insert' command to be able to force conditions. Because the '-dprintf-insert' command uses the same mechanism as the '-break-insert' command, it obtains the '--force-condition' flag, too. The '-break-condition' command directly uses the CLI's 'cond' command. Modify the 'condition_command' function to consider both "--force" and "-force" as its argument, because "--" is the conventional delimiter for arguments in MI. gdb/ChangeLog: 2021-04-06 Tankut Baris Aktemur * mi/mi-cmd-break.c (mi_cmd_break_insert_1): Recognize the '--force-condition' flag to force the condition in the '-break-insert' and '-dprintf-insert' commands. * breakpoint.c (condition_command): Consider having "--force" as the argument and normalize to "-force". * NEWS: Mention the change. gdb/testsuite/ChangeLog: 2021-04-06 Tankut Baris Aktemur * gdb.mi/mi-break.exp (test_forced_conditions): New proc that is called by the test. gdb/doc/ChangeLog: 2021-04-06 Tankut Baris Aktemur * gdb.texinfo (GDB/MI Breakpoint Commands): Mention the '--force-condition' flag of the '-break-insert' and '-dprintf-insert' commands, and the '--force' flag of the '-break-condition' command. --- gdb/NEWS | 15 +++++++++++++++ gdb/breakpoint.c | 8 ++++++++ gdb/doc/gdb.texinfo | 16 ++++++++++++---- gdb/mi/mi-cmd-break.c | 8 +++++++- gdb/testsuite/gdb.mi/mi-break.exp | 26 ++++++++++++++++++++++++++ 5 files changed, 68 insertions(+), 5 deletions(-) diff --git a/gdb/NEWS b/gdb/NEWS index 6cf76a14317..a64dcefd167 100644 --- a/gdb/NEWS +++ b/gdb/NEWS @@ -31,6 +31,21 @@ equivalent of the CLI's "break -qualified" and "dprintf -qualified". + ** '-break-insert --force-condition' and '-dprintf-insert --force-condition' + + The MI -break-insert and -dprintf-insert commands now support a + '--force-condition' flag to forcibly define a condition even when + the condition is invalid at all locations of the breakpoint. This + is equivalent to the '-force-condition' flag of the CLI's "break" + command. + + ** '-break-condition --force' + + The MI -break-condition command now supports a '--force' flag to + forcibly define a condition even when the condition is invalid at + all locations of the selected breakpoint. This is equivalent to + the '-force' flag of the CLI's "cond" command. + * GDB now supports core file debugging for x86_64 Cygwin programs. * GDB will now look for the .gdbinit file in a config directory before diff --git a/gdb/breakpoint.c b/gdb/breakpoint.c index c2d0ffba974..f0a6deda511 100644 --- a/gdb/breakpoint.c +++ b/gdb/breakpoint.c @@ -1073,6 +1073,14 @@ condition_command (const char *arg, int from_tty) if (arg == 0) error_no_arg (_("breakpoint number")); + /* The '-break-condition' MI command is delegated to this function. + However, MI has the convention of having "--" delimiter for + flags. Accept both "-force" and "--force". The force flag, if + exists, must be at the beginning of ARG. */ + arg = skip_spaces (arg); + if (startswith (arg, "--force")) + arg++; + p = arg; /* Check if the "-force" flag was passed. */ diff --git a/gdb/doc/gdb.texinfo b/gdb/doc/gdb.texinfo index ec15654ba58..17d1111407e 100644 --- a/gdb/doc/gdb.texinfo +++ b/gdb/doc/gdb.texinfo @@ -30402,13 +30402,15 @@ times="0"@} @subsubheading Synopsis @smallexample - -break-condition @var{number} @var{expr} + -break-condition [ --force ] @var{number} @var{expr} @end smallexample Breakpoint @var{number} will stop the program only if the condition in @var{expr} is true. The condition becomes part of the @samp{-break-list} output (see the description of the @samp{-break-list} -command below). +command below). If the @samp{--force} flag is passed, the condition +is forcibly defined even when it is invalid for all locations of +breakpoint @var{number}. @subsubheading @value{GDBN} Command @@ -30574,7 +30576,7 @@ N.A. @smallexample -break-insert [ -t ] [ -h ] [ -f ] [ -d ] [ -a ] [ --qualified ] - [ -c @var{condition} ] [ -i @var{ignore-count} ] + [ -c @var{condition} ] [ --force-condition ] [ -i @var{ignore-count} ] [ -p @var{thread-id} ] [ @var{location} ] @end smallexample @@ -30630,6 +30632,9 @@ Create a tracepoint. @xref{Tracepoints}. When this parameter is used together with @samp{-h}, a fast tracepoint is created. @item -c @var{condition} Make the breakpoint conditional on @var{condition}. +@item --force-condition +Forcibly define the breakpoint even if the condition is invalid at +all of the breakpoint locations. @item -i @var{ignore-count} Initialize the @var{ignore-count}. @item -p @var{thread-id} @@ -30699,7 +30704,7 @@ times="0"@}]@} @smallexample -dprintf-insert [ -t ] [ -f ] [ -d ] [ --qualified ] - [ -c @var{condition} ] [ -i @var{ignore-count} ] + [ -c @var{condition} ] [--force-condition] [ -i @var{ignore-count} ] [ -p @var{thread-id} ] [ @var{location} ] [ @var{format} ] [ @var{argument} ] @end smallexample @@ -30724,6 +30729,9 @@ cannot be parsed. Create a disabled breakpoint. @item -c @var{condition} Make the breakpoint conditional on @var{condition}. +@item --force-condition +Forcibly define the breakpoint even if the condition is invalid at +all of the breakpoint locations. @item -i @var{ignore-count} Set the ignore count of the breakpoint (@pxref{Conditions, ignore count}) to @var{ignore-count}. diff --git a/gdb/mi/mi-cmd-break.c b/gdb/mi/mi-cmd-break.c index 5a4a62ce8c3..fec75a8da5a 100644 --- a/gdb/mi/mi-cmd-break.c +++ b/gdb/mi/mi-cmd-break.c @@ -183,12 +183,14 @@ mi_cmd_break_insert_1 (int dprintf, const char *command, char **argv, int argc) int is_explicit = 0; struct explicit_location explicit_loc; std::string extra_string; + bool force_condition = false; enum opt { HARDWARE_OPT, TEMP_OPT, CONDITION_OPT, IGNORE_COUNT_OPT, THREAD_OPT, PENDING_OPT, DISABLE_OPT, TRACEPOINT_OPT, + FORCE_CONDITION_OPT, QUALIFIED_OPT, EXPLICIT_SOURCE_OPT, EXPLICIT_FUNC_OPT, EXPLICIT_LABEL_OPT, EXPLICIT_LINE_OPT @@ -203,6 +205,7 @@ mi_cmd_break_insert_1 (int dprintf, const char *command, char **argv, int argc) {"f", PENDING_OPT, 0}, {"d", DISABLE_OPT, 0}, {"a", TRACEPOINT_OPT, 0}, + {"-force-condition", FORCE_CONDITION_OPT, 0}, {"-qualified", QUALIFIED_OPT, 0}, {"-source" , EXPLICIT_SOURCE_OPT, 1}, {"-function", EXPLICIT_FUNC_OPT, 1}, @@ -269,6 +272,9 @@ mi_cmd_break_insert_1 (int dprintf, const char *command, char **argv, int argc) is_explicit = 1; explicit_loc.line_offset = linespec_parse_line_offset (oarg); break; + case FORCE_CONDITION_OPT: + force_condition = true; + break; } } @@ -353,7 +359,7 @@ mi_cmd_break_insert_1 (int dprintf, const char *command, char **argv, int argc) create_breakpoint (get_current_arch (), location.get (), condition, thread, extra_string.c_str (), - false, + force_condition, 0 /* condition and thread are valid. */, temp_p, type_wanted, ignore_count, diff --git a/gdb/testsuite/gdb.mi/mi-break.exp b/gdb/testsuite/gdb.mi/mi-break.exp index e46a6cc0ec6..5f1c6810389 100644 --- a/gdb/testsuite/gdb.mi/mi-break.exp +++ b/gdb/testsuite/gdb.mi/mi-break.exp @@ -408,6 +408,30 @@ proc_with_prefix test_explicit_breakpoints {} { ".*Source filename requires function, label, or line offset.*" } +# Test forcing an invalid condition. + +proc_with_prefix test_forced_conditions {} { + set warning ".*warning: failed to validate condition .* disabling.*" + + # Define a plain breakpoint first, and a condition later. + mi_create_breakpoint "callme" "define a bp" "" + mi_gdb_test "-break-condition --force \$bpnum bad" \ + "${warning}\\^done" \ + "invalid condition is forced" + + set loc [mi_make_breakpoint_loc -enabled "N"] + set args [list -cond "bad" -locations "\\\[$loc\\\]"] + set bp [eval mi_make_breakpoint_multi $args] + + mi_gdb_test "-break-insert -c bad --force-condition callme" \ + "${warning}\\^done,$bp" \ + "breakpoint with forced condition" + + mi_gdb_test "-dprintf-insert -c bad --force-condition callme 123" \ + "${warning}\\^done,$bp" \ + "dprintf with forced condition" +} + proc test_break {mi_mode} { global srcdir subdir binfile @@ -440,6 +464,8 @@ proc test_break {mi_mode} { test_abreak_creation test_explicit_breakpoints + + test_forced_conditions } if [gdb_debug_enabled] { -- 2.17.1