Use -qualified flag when setting temporary breakpoint in start command
authorSimon Marchi <simon.marchi@efficios.com>
Tue, 9 Apr 2019 16:32:26 +0000 (12:32 -0400)
committerSimon Marchi <simon.marchi@efficios.com>
Tue, 9 Apr 2019 16:32:26 +0000 (12:32 -0400)
commite242fd1249ae85a97f08f95d5c61f4cbe3b906e0
tree79a3a53a561e442ee6dec6277b524292ddbe57bc
parent7e96e219a4fc703282ea5b0cc8845a96c01ca030
Use -qualified flag when setting temporary breakpoint in start command

When using the "start" command, GDB puts a temporary breakpoint on the
"main" symbol (we literally invoke the tbreak command).  However, since
it does wild matching by default, it also puts a breakpoint on any C++
method or "main" function in a namespace.  For example, when debugging
GDB, it creates a total of 24 locations:

  (gdb) start
  Temporary breakpoint 1 at 0x198c1e9: main. (24 locations)

as there are a bunch of methods called main in the selftests, such as

  selftests::string_view::capacity_1::main()

If such method was called in the constructor of a global object, or a
function marked with the attribute "constructor", then we would stop at
the wrong place.  Also, this causes a few extra symtabs (those that
contain the "wrong" mains) to be expanded for nothing.

The dummiest, most straightforward solution is to add -qualified when
invoking tbreak.  With this patch, "start" creates a single-location
breakpoint, as expected.

I copied the start.exp test to start-cpp.exp and made it use a C++ test
file, which contains two main functions.  The new test verifies that the
output of "start" is the output we get when we set a single-location
breakpoint.

gdb/ChangeLog:

* infcmd.c (run_command_1): Pass -qualified to tbreak when usind
the "start" command.

gdb/testsuite/ChangeLog:

* gdb.base/start-cpp.exp: New file.
* gdb.base/start-cpp.cc: New file.
gdb/ChangeLog
gdb/infcmd.c
gdb/testsuite/ChangeLog
gdb/testsuite/gdb.base/start-cpp.cc [new file with mode: 0644]
gdb/testsuite/gdb.base/start-cpp.exp [new file with mode: 0644]