mirror of
https://github.com/espressif/binutils-gdb.git
synced 2025-06-25 04:49:54 +08:00
gdb/testsuite: fix default behavior of runto
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
This commit is contained in:

committed by
Simon Marchi

parent
ab7baf103d
commit
3d950cb72d
@ -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]
|
||||
|
Reference in New Issue
Block a user