breakpoints/19546: Fix crash after updating breakpoints
authorKeith Seitz <keiths@redhat.com>
Mon, 8 Feb 2016 20:57:22 +0000 (12:57 -0800)
committerKeith Seitz <keiths@redhat.com>
Wed, 10 Feb 2016 00:04:45 +0000 (16:04 -0800)
commit9ef9e6a6a0dd8f948708cb67c9afcfd0be40cb0a
tree0610f4949490b7376cde799dfc14a9f101c57aee
parent224c1b2068cf901a350961901ed6800b8289b3cd
breakpoints/19546: Fix crash after updating breakpoints

One of the last checks update_breakpoints_after_exec does while looping
over the list of breakpoints is check that the breakpoint has a valid
location spec. It uses event_location_empty_p to check if the location spec
is "empty", and if it is, the breakpoint is deleted.

momentary_breakpoint types rely on setting the breakpoint structure's
location spec to NULL, thereby causing an update to delete the breakpoint.
However, event_location_empty_p assumed that locations were never NULL.
As a result, GDB would crash dereferencing a NULL pointer whenever
update_breakpoints_after_exec would encounter a momentary_breakpoint.

This patch creates a new wrapper/helper function which tests that the given
breakpoint's location spec is non-NULL and if it is not "empty"
or "unspecified."

gdb/ChangeLog

PR breakpoints/19546
* breakpoint.c (breakpoint_event_location_empty_p): New function.
(update_breakpoints_after_exec, bkpt_re_set): Use this new function
instead of event_location_empty_p.

gdb/testsuite/ChangeLog

PR breakpoints/19546
* gdb.base/infcall-exec.c: New file.
* gdb.base/infcall-exec2.c: New file.
* gdb.base/infcall-exec.exp: New file.
gdb/ChangeLog
gdb/breakpoint.c
gdb/testsuite/ChangeLog
gdb/testsuite/gdb.base/infcall-exec.c [new file with mode: 0644]
gdb/testsuite/gdb.base/infcall-exec.exp [new file with mode: 0644]
gdb/testsuite/gdb.base/infcall-exec2.c [new file with mode: 0644]