]> git.ipfire.org Git - thirdparty/binutils-gdb.git/commitdiff
gdb/testsuite: fix default behavior of runto
authorSimon Marchi <simon.marchi@polymtl.ca>
Wed, 8 Dec 2021 02:56:48 +0000 (21:56 -0500)
committerSimon Marchi <simon.marchi@efficios.com>
Thu, 9 Dec 2021 19:03:08 +0000 (14:03 -0500)
The documented behavior of proc runto is to not emit a PASS when
succeeding to to run to the specified location, but emit a FAIL when
failing to do so.  I suppose the intent is that it won't pollute the
results normally passing tests (although I don't see why we would care),
but make visible any problems.

However, it seems like the implementation makes it default to never
print anything.  "no-message" is prependend to "args", so if "message"
is not passed, we will always take the   path that sets print_fail to 0,
which will silence any failure.

This unfortunately means that tests relying on runto_main won't emit a
FAIL if failing to run to main.  And since commit 4dfef5be6812
("gdb/testsuite: make runto_main not pass no-message to runto"), tests
don't emit a FAIL themselves when failing to run to main.  This means
that tests failing to run to main just fail silently, and that's bad.

This can be reproduced by hacking gdb.base/template.exp like so:

    diff --git a/gdb/testsuite/gdb.base/template.c b/gdb/testsuite/gdb.base/template.c
    index bcf39c377d92..052be5b79d73 100644
    --- a/gdb/testsuite/gdb.base/template.c
    +++ b/gdb/testsuite/gdb.base/template.c
    @@ -15,6 +15,14 @@
        You should have received a copy of the GNU General Public License
        along with this program.  If not, see <http://www.gnu.org/licenses/>.  */

    +#include <stdlib.h>
    +
    +__attribute__((constructor))
    +static void c (void)
    +{
    +  exit (1);
    +}
    +
     int
     main (void)
     {

Running the modified gdb.base/template.exp shows that it exits without
printing any result.

Remove the line that prepends no-message to args, that should make
runto's behavior match its documentation.

This patch will appear to add many failures, but in reality they already
existed, they were just silenced.

Change-Id: I2a730d5bc72b6ef0698cd6aad962d9902aa7c3d6

gdb/testsuite/lib/gdb.exp

index 8b7445b758190909805b3b63a342ba29f3b47ba1..95220f6fc8d46ea3235d960fdaf3859edabaa76e 100644 (file)
@@ -616,7 +616,7 @@ proc gdb_breakpoint { function args } {
 #
 # If there are additional arguments, pass them to gdb_breakpoint.
 # We recognize no-message/message ourselves.
-# The default is no-message.
+#
 # no-message is messed up here, like gdb_breakpoint: to preserve
 # historical usage fails are always printed by default.
 # no-message: turns off printing of fails (and passes, but they're already off)
@@ -628,9 +628,6 @@ proc runto { function args } {
 
     delete_breakpoints
 
-    # Default to "no-message".
-    set args "no-message $args"
-
     set print_pass 0
     set print_fail 1
     set no_message_loc [lsearch -exact $args no-message]