From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from simark.ca by simark.ca with LMTP id AHhcF80Rb2AbEgAAWB0awg (envelope-from ) for ; Thu, 08 Apr 2021 10:23:09 -0400 Received: by simark.ca (Postfix, from userid 112) id 53F1B1EE0E; Thu, 8 Apr 2021 10:23:09 -0400 (EDT) X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on simark.ca X-Spam-Level: X-Spam-Status: No, score=-1.1 required=5.0 tests=DKIM_SIGNED,DKIM_VALID, DKIM_VALID_AU,MAILING_LIST_MULTI,RCVD_IN_MSPIKE_H2,URIBL_BLOCKED autolearn=ham autolearn_force=no version=3.4.2 Received: from 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 RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by simark.ca (Postfix) with ESMTPS id 696881E54D for ; Thu, 8 Apr 2021 10:23:04 -0400 (EDT) Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id D3B5F3951C51; Thu, 8 Apr 2021 14:23:03 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org D3B5F3951C51 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sourceware.org; s=default; t=1617891783; bh=K1s9Ut7UNuxKX42XK2fA05jH3binN+640V70g4/ANd4=; 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=EzcGYxiime0ts7cZZwdEfm8JkJVXTa4B94OXRhiyiEE0hIax8LwjgAeJaFy816DVj TAcqhDf8+mpBRCu8dRWfOcy3fb3YZispsLMZ9vav/O0pxoWWoEAou2YoUvvyGd3YHU 9oYsl/nUg4aP0MNtB6wyhDLIxcGCUyWYzuptaHzs= Received: from mga17.intel.com (mga17.intel.com [192.55.52.151]) by sourceware.org (Postfix) with ESMTPS id DE93D3951863 for ; Thu, 8 Apr 2021 14:22:59 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.3.2 sourceware.org DE93D3951863 IronPort-SDR: XgThaPd4kvBBJHvYRsD/5vRmQy2uedykTNBhJwXUfjwv2/zrud8bJnXziHPoBDboqpjvfsD+6u bcas0Pf8IOeg== X-IronPort-AV: E=McAfee;i="6000,8403,9948"; a="173633065" X-IronPort-AV: E=Sophos;i="5.82,206,1613462400"; d="scan'208";a="173633065" Received: from orsmga002.jf.intel.com ([10.7.209.21]) by fmsmga107.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 08 Apr 2021 07:22:56 -0700 IronPort-SDR: xJGpJvCmMCs0QyZ5xGNYw7nLfZfMUJnA79bEKa7U8VbeMTrDShR4twY0il4YJUUpZSP6X0M6ON PiSPu86hk9rg== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.82,206,1613462400"; d="scan'208";a="397103885" Received: from irvmail001.ir.intel.com ([10.43.11.63]) by orsmga002.jf.intel.com with ESMTP; 08 Apr 2021 07:22:54 -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 138EMrk1008539; Thu, 8 Apr 2021 15:22:53 +0100 Received: from ulvlx001.iul.intel.com (localhost [127.0.0.1]) by ulvlx001.iul.intel.com with ESMTP id 138EMrLQ021501; Thu, 8 Apr 2021 16:22:53 +0200 Received: (from taktemur@localhost) by ulvlx001.iul.intel.com with LOCAL id 138EMrHk021497; Thu, 8 Apr 2021 16:22:53 +0200 To: gdb-patches@sourceware.org Subject: [PATCH v2 4/4] gdb/mi: add a '--force-condition' flag to the '-break-insert' cmd Date: Thu, 8 Apr 2021 16:22:39 +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. The '-break-condition' command directly uses the CLI's 'cond' command; hence, it already recognizes the '-force' flag. Because the '-dprintf-insert' command uses the same mechanism as the '-break-insert' command, it obtains the '--force-condition' flag, too. 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. * 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 | 8 ++++++++ gdb/doc/gdb.texinfo | 16 ++++++++++++---- gdb/mi/mi-cmd-break.c | 8 +++++++- gdb/testsuite/gdb.mi/mi-break.exp | 26 ++++++++++++++++++++++++++ 4 files changed, 53 insertions(+), 5 deletions(-) diff --git a/gdb/NEWS b/gdb/NEWS index 6cf76a14317..66f9d756fc4 100644 --- a/gdb/NEWS +++ b/gdb/NEWS @@ -31,6 +31,14 @@ 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. + * 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/doc/gdb.texinfo b/gdb/doc/gdb.texinfo index 438dcca5039..ab0e4b2d7a8 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..e84577f8628 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