binutils-gdb/gdb/python
Tankut Baris Aktemur 10a636ccb4 gdb/breakpoint: add a 'force_condition' parameter to 'create_breakpoint'
The 'create_breakpoint' function takes a 'parse_extra' argument that
determines whether the condition, thread, and force-condition
specifiers should be parsed from the extra string or be used from the
function arguments.  However, for the case when 'parse_extra' is
false, there is no way to pass the force-condition specifier.  This
patch adds it as a new argument.

Also, in the case when parse_extra is false, the current behavior is
as if the condition is being forced.  This is a bug.  The default
behavior should reject the breakpoint.  See below for a demo of this
incorrect behavior.  (The MI command '-break-insert' uses the
'create_breakpoint' function with parse_extra=0.)

  $ gdb -q --interpreter=mi3 /tmp/simple
  =thread-group-added,id="i1"
  =cmd-param-changed,param="history save",value="on"
  =cmd-param-changed,param="auto-load safe-path",value="/"
  ~"Reading symbols from /tmp/simple...\n"
  (gdb)
  -break-insert -c junk -f main
  &"warning: failed to validate condition at location 1, disabling:\n  "
  &"No symbol \"junk\" in current context.\n"
  ^done,bkpt={number="1",type="breakpoint",disp="keep",enabled="y",addr="<MULTIPLE>",cond="junk",times="0",original-location="main",locations=[{number="1.1",enabled="N",addr="0x000000000000114e",func="main",file="/tmp/simple.c",fullname="/tmp/simple.c",line="2",thread-groups=["i1"]}]}
  (gdb)
  break main if junk
  &"break main if junk\n"
  &"No symbol \"junk\" in current context.\n"
  ^error,msg="No symbol \"junk\" in current context."
  (gdb)
  break main -force-condition if junk
  &"break main -force-condition if junk\n"
  ~"Note: breakpoint 1 also set at pc 0x114e.\n"
  &"warning: failed to validate condition at location 1, disabling:\n  "
  &"No symbol \"junk\" in current context.\n"
  ~"Breakpoint 2 at 0x114e: file /tmp/simple.c, line 2.\n"
  =breakpoint-created,bkpt={number="2",type="breakpoint",disp="keep",enabled="y",addr="<MULTIPLE>",cond="junk",times="0",original-location="main",locations=[{number="2.1",enabled="N",addr="0x000000000000114e",func="main",file="/tmp/simple.c",fullname="/tmp/simple.c",line="2",thread-groups=["i1"]}]}
  ^done
  (gdb)

After applying this patch, we get the behavior below:

  (gdb)
  -break-insert -c junk -f main
  ^error,msg="No symbol \"junk\" in current context."

This restores the behavior that is present in the existing releases.

gdb/ChangeLog:
2021-04-21  Tankut Baris Aktemur  <tankut.baris.aktemur@intel.com>

	* breakpoint.h (create_breakpoint): Add a new parameter,
	'force_condition'.
	* breakpoint.c (create_breakpoint): Use the 'force_condition'
	argument when 'parse_extra' is false to check if the condition
	is invalid at all of the breakpoint locations.
	Update the users below.
	(break_command_1)
	(dprintf_command)
	(trace_command)
	(ftrace_command)
	(strace_command)
	(create_tracepoint_from_upload): Update.
	* guile/scm-breakpoint.c (gdbscm_register_breakpoint_x): Update.
	* mi/mi-cmd-break.c (mi_cmd_break_insert_1): Update.
	* python/py-breakpoint.c (bppy_init): Update.
	* python/py-finishbreakpoint.c (bpfinishpy_init): Update.

gdb/testsuite/ChangeLog:
2021-04-21  Tankut Baris Aktemur  <tankut.baris.aktemur@intel.com>

	* gdb.mi/mi-break.exp: Extend with checks for invalid breakpoint
	conditions.
2021-04-21 16:47:17 +02:00
..
lib/gdb Use importlib instead of imp module on python 3.4+ 2021-04-01 12:26:52 -06:00
py-all-events.def Update copyright year range in all GDB files 2021-01-01 12:12:21 +04:00
py-arch.c Update copyright year range in all GDB files 2021-01-01 12:12:21 +04:00
py-auto-load.c gdb: bool-ify ext_lang_auto_load_enabled and friends 2021-01-13 11:57:24 -05:00
py-block.c Update copyright year range in all GDB files 2021-01-01 12:12:21 +04:00
py-bpevent.c Update copyright year range in all GDB files 2021-01-01 12:12:21 +04:00
py-breakpoint.c gdb/breakpoint: add a 'force_condition' parameter to 'create_breakpoint' 2021-04-21 16:47:17 +02:00
py-cmd.c Update copyright year range in all GDB files 2021-01-01 12:12:21 +04:00
py-continueevent.c Update copyright year range in all GDB files 2021-01-01 12:12:21 +04:00
py-event-types.def Update copyright year range in all GDB files 2021-01-01 12:12:21 +04:00
py-event.c Update copyright year range in all GDB files 2021-01-01 12:12:21 +04:00
py-event.h Update copyright year range in all GDB files 2021-01-01 12:12:21 +04:00
py-events.h Update copyright year range in all GDB files 2021-01-01 12:12:21 +04:00
py-evtregistry.c Update copyright year range in all GDB files 2021-01-01 12:12:21 +04:00
py-evts.c Update copyright year range in all GDB files 2021-01-01 12:12:21 +04:00
py-exitedevent.c Update copyright year range in all GDB files 2021-01-01 12:12:21 +04:00
py-finishbreakpoint.c gdb/breakpoint: add a 'force_condition' parameter to 'create_breakpoint' 2021-04-21 16:47:17 +02:00
py-frame.c Also compare frame_id_is_next in frapy_richcompare 2021-02-07 19:08:23 +01:00
py-framefilter.c gdb/python: fix FrameDecorator regression on Python 2 2021-03-16 09:31:56 +00:00
py-function.c Update copyright year range in all GDB files 2021-01-01 12:12:21 +04:00
py-gdb-readline.c Update copyright year range in all GDB files 2021-01-01 12:12:21 +04:00
py-inferior.c Update copyright year range in all GDB files 2021-01-01 12:12:21 +04:00
py-infevents.c Update copyright year range in all GDB files 2021-01-01 12:12:21 +04:00
py-infthread.c Update copyright year range in all GDB files 2021-01-01 12:12:21 +04:00
py-instruction.c Update copyright year range in all GDB files 2021-01-01 12:12:21 +04:00
py-instruction.h Update copyright year range in all GDB files 2021-01-01 12:12:21 +04:00
py-lazy-string.c Update copyright year range in all GDB files 2021-01-01 12:12:21 +04:00
py-linetable.c Update copyright year range in all GDB files 2021-01-01 12:12:21 +04:00
py-newobjfileevent.c Update copyright year range in all GDB files 2021-01-01 12:12:21 +04:00
py-objfile.c Update copyright year range in all GDB files 2021-01-01 12:12:21 +04:00
py-param.c gdb/doc: fix the example for get_set_string in Python API docs 2021-03-18 16:55:37 +00:00
py-prettyprint.c gdb: rename get_type_arch to type::arch 2021-01-28 10:12:10 -05:00
py-progspace.c Update copyright year range in all GDB files 2021-01-01 12:12:21 +04:00
py-record-btrace.c gdb: make some variables static 2021-01-20 20:55:05 -05:00
py-record-btrace.h Update copyright year range in all GDB files 2021-01-01 12:12:21 +04:00
py-record-full.c Update copyright year range in all GDB files 2021-01-01 12:12:21 +04:00
py-record-full.h Update copyright year range in all GDB files 2021-01-01 12:12:21 +04:00
py-record.c gdb: make some variables static 2021-01-20 20:55:05 -05:00
py-record.h Update copyright year range in all GDB files 2021-01-01 12:12:21 +04:00
py-ref.h Update copyright year range in all GDB files 2021-01-01 12:12:21 +04:00
py-registers.c Update copyright year range in all GDB files 2021-01-01 12:12:21 +04:00
py-signalevent.c Update copyright year range in all GDB files 2021-01-01 12:12:21 +04:00
py-stopevent.c Update copyright year range in all GDB files 2021-01-01 12:12:21 +04:00
py-stopevent.h Update copyright year range in all GDB files 2021-01-01 12:12:21 +04:00
py-symbol.c Add search_flags to expand_symtabs_matching 2021-04-17 09:35:05 -06:00
py-symtab.c Update copyright year range in all GDB files 2021-01-01 12:12:21 +04:00
py-threadevent.c Update copyright year range in all GDB files 2021-01-01 12:12:21 +04:00
py-tui.c gdb: return true in TuiWindow.is_valid only if TUI is enabled 2021-02-08 11:56:16 +00:00
py-type.c gdb: rename type::{arch,objfile} -> type::{arch_owner,objfile_owner} 2021-01-28 10:09:02 -05:00
py-unwind.c Update copyright year range in all GDB files 2021-01-01 12:12:21 +04:00
py-utils.c Update copyright year range in all GDB files 2021-01-01 12:12:21 +04:00
py-value.c Update copyright year range in all GDB files 2021-01-01 12:12:21 +04:00
py-varobj.c Update copyright year range in all GDB files 2021-01-01 12:12:21 +04:00
py-xmethods.c Update copyright year range in all GDB files 2021-01-01 12:12:21 +04:00
python-config.py
python-internal.h gdb: bool-ify ext_lang_auto_load_enabled and friends 2021-01-13 11:57:24 -05:00
python.c gdb: use make_scoped_restore to restore gdbpy_current_objfile 2021-03-15 09:21:37 +00:00
python.h Update copyright year range in all GDB files 2021-01-01 12:12:21 +04:00