* lib/gdb.exp (gdb_breakpoint): Fix varargs scan.
Recognize "message" -> print pass and fail. Add eof case. (runto): Recognize message, no-message. Print pass/fail if requested, with same treatment as gdb_breakpoint. (runto_main): Pass no-message to runto. (gdb_internal_error_resync): Add log message. (gdb_file_cmd): Tweak internal error fail text for consistency.
This commit is contained in:
parent
f8ece37fb1
commit
5b7d00507b
|
@ -1,3 +1,13 @@
|
|||
2012-10-11 Doug Evans <dje@google.com>
|
||||
|
||||
* lib/gdb.exp (gdb_breakpoint): Fix varargs scan.
|
||||
Recognize "message" -> print pass and fail. Add eof case.
|
||||
(runto): Recognize message, no-message. Print pass/fail if requested,
|
||||
with same treatment as gdb_breakpoint.
|
||||
(runto_main): Pass no-message to runto.
|
||||
(gdb_internal_error_resync): Add log message.
|
||||
(gdb_file_cmd): Tweak internal error fail text for consistency.
|
||||
|
||||
2012-10-06 Jan Kratochvil <jan.kratochvil@redhat.com>
|
||||
|
||||
Fix crash during stepping on ppc32.
|
||||
|
|
|
@ -334,29 +334,44 @@ proc gdb_start_cmd {args} {
|
|||
|
||||
# Set a breakpoint at FUNCTION. If there is an additional argument it is
|
||||
# a list of options; the supported options are allow-pending, temporary,
|
||||
# and no-message.
|
||||
# message, no-message, and passfail.
|
||||
# The result is 1 for success, 0 for failure.
|
||||
#
|
||||
# Note: The handling of message vs no-message is messed up, but it's based
|
||||
# on historical usage. By default this function does not print passes,
|
||||
# only fails.
|
||||
# no-message: turns off printing of fails (and passes, but they're already off)
|
||||
# message: turns on printing of passes (and fails, but they're already on)
|
||||
|
||||
proc gdb_breakpoint { function args } {
|
||||
global gdb_prompt
|
||||
global decimal
|
||||
|
||||
set pending_response n
|
||||
if {[lsearch -exact [lindex $args 0] allow-pending] != -1} {
|
||||
if {[lsearch -exact $args allow-pending] != -1} {
|
||||
set pending_response y
|
||||
}
|
||||
|
||||
set break_command "break"
|
||||
set break_message "Breakpoint"
|
||||
if {[lsearch -exact [lindex $args 0] temporary] != -1} {
|
||||
if {[lsearch -exact $args temporary] != -1} {
|
||||
set break_command "tbreak"
|
||||
set break_message "Temporary breakpoint"
|
||||
}
|
||||
|
||||
set no_message 0
|
||||
if {[lsearch -exact [lindex $args 0] no-message] != -1} {
|
||||
set no_message 1
|
||||
set print_pass 0
|
||||
set print_fail 1
|
||||
set no_message_loc [lsearch -exact $args no-message]
|
||||
set message_loc [lsearch -exact $args message]
|
||||
# The last one to appear in args wins.
|
||||
if { $no_message_loc > $message_loc } {
|
||||
set print_fail 0
|
||||
} elseif { $message_loc > $no_message_loc } {
|
||||
set print_pass 1
|
||||
}
|
||||
|
||||
set test_name "setting breakpoint at $function"
|
||||
|
||||
send_gdb "$break_command $function\n"
|
||||
# The first two regexps are what we get with -g, the third is without -g.
|
||||
gdb_expect 30 {
|
||||
|
@ -365,8 +380,8 @@ proc gdb_breakpoint { function args } {
|
|||
-re "$break_message \[0-9\]* at .*$gdb_prompt $" {}
|
||||
-re "$break_message \[0-9\]* \\(.*\\) pending.*$gdb_prompt $" {
|
||||
if {$pending_response == "n"} {
|
||||
if { $no_message == 0 } {
|
||||
fail "setting breakpoint at $function"
|
||||
if { $print_fail } {
|
||||
fail $test_name
|
||||
}
|
||||
return 0
|
||||
}
|
||||
|
@ -376,23 +391,34 @@ proc gdb_breakpoint { function args } {
|
|||
exp_continue
|
||||
}
|
||||
-re "A problem internal to GDB has been detected" {
|
||||
fail "setting breakpoint at $function in runto (GDB internal error)"
|
||||
if { $print_fail } {
|
||||
fail "$test_name (GDB internal error)"
|
||||
}
|
||||
gdb_internal_error_resync
|
||||
return 0
|
||||
}
|
||||
-re "$gdb_prompt $" {
|
||||
if { $no_message == 0 } {
|
||||
fail "setting breakpoint at $function"
|
||||
if { $print_fail } {
|
||||
fail $test_name
|
||||
}
|
||||
return 0
|
||||
}
|
||||
eof {
|
||||
if { $print_fail } {
|
||||
fail "$test_name (eof)"
|
||||
}
|
||||
return 0
|
||||
}
|
||||
timeout {
|
||||
if { $no_message == 0 } {
|
||||
fail "setting breakpoint at $function (timeout)"
|
||||
if { $print_fail } {
|
||||
fail "$test_name (timeout)"
|
||||
}
|
||||
return 0
|
||||
}
|
||||
}
|
||||
if { $print_pass } {
|
||||
pass $test_name
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
@ -400,8 +426,15 @@ proc gdb_breakpoint { function args } {
|
|||
# Since this is the only breakpoint that will be set, if it stops
|
||||
# at a breakpoint, we will assume it is the one we want. We can't
|
||||
# just compare to "function" because it might be a fully qualified,
|
||||
# single quoted C++ function specifier. If there's an additional argument,
|
||||
# pass it to gdb_breakpoint.
|
||||
# single quoted C++ function specifier.
|
||||
#
|
||||
# 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)
|
||||
# message: turns on printing of passes (and fails, but they're already on)
|
||||
|
||||
proc runto { function args } {
|
||||
global gdb_prompt
|
||||
|
@ -409,7 +442,25 @@ proc runto { function args } {
|
|||
|
||||
delete_breakpoints
|
||||
|
||||
if ![gdb_breakpoint $function [lindex $args 0]] {
|
||||
# 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]
|
||||
set message_loc [lsearch -exact $args message]
|
||||
# The last one to appear in args wins.
|
||||
if { $no_message_loc > $message_loc } {
|
||||
set print_fail 0
|
||||
} elseif { $message_loc > $no_message_loc } {
|
||||
set print_pass 1
|
||||
}
|
||||
|
||||
set test_name "running to $function in runto"
|
||||
|
||||
# We need to use eval here to pass our varargs args to gdb_breakpoint
|
||||
# which is also a varargs function.
|
||||
if ![eval gdb_breakpoint $function $args] {
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -419,33 +470,52 @@ proc runto { function args } {
|
|||
# the "in func" output we get without -g.
|
||||
gdb_expect 30 {
|
||||
-re "Break.* at .*:$decimal.*$gdb_prompt $" {
|
||||
if { $print_pass } {
|
||||
pass $test_name
|
||||
}
|
||||
return 1
|
||||
}
|
||||
-re "Breakpoint \[0-9\]*, \[0-9xa-f\]* in .*$gdb_prompt $" {
|
||||
if { $print_pass } {
|
||||
pass $test_name
|
||||
}
|
||||
return 1
|
||||
}
|
||||
-re "The target does not support running in non-stop mode.\r\n$gdb_prompt $" {
|
||||
unsupported "Non-stop mode not supported"
|
||||
if { $print_fail } {
|
||||
unsupported "Non-stop mode not supported"
|
||||
}
|
||||
return 0
|
||||
}
|
||||
-re ".*A problem internal to GDB has been detected" {
|
||||
fail "running to $function in runto (GDB internal error)"
|
||||
if { $print_fail } {
|
||||
fail "$test_name (GDB internal error)"
|
||||
}
|
||||
gdb_internal_error_resync
|
||||
return 0
|
||||
}
|
||||
-re "$gdb_prompt $" {
|
||||
fail "running to $function in runto"
|
||||
if { $print_fail } {
|
||||
fail $test_name
|
||||
}
|
||||
return 0
|
||||
}
|
||||
eof {
|
||||
fail "running to $function in runto (eof)"
|
||||
if { $print_fail } {
|
||||
fail "$test_name (eof)"
|
||||
}
|
||||
return 0
|
||||
}
|
||||
timeout {
|
||||
fail "running to $function in runto (timeout)"
|
||||
if { $print_fail } {
|
||||
fail "$test_name (timeout)"
|
||||
}
|
||||
return 0
|
||||
}
|
||||
}
|
||||
if { $print_pass } {
|
||||
pass $test_name
|
||||
}
|
||||
return 1
|
||||
}
|
||||
|
||||
|
@ -455,7 +525,7 @@ proc runto { function args } {
|
|||
# If you don't want that, use gdb_start_cmd.
|
||||
|
||||
proc runto_main { } {
|
||||
return [runto main]
|
||||
return [runto main no-message]
|
||||
}
|
||||
|
||||
### Continue, and expect to hit a breakpoint.
|
||||
|
@ -508,6 +578,8 @@ proc gdb_continue_to_breakpoint {name {location_pattern .*}} {
|
|||
proc gdb_internal_error_resync {} {
|
||||
global gdb_prompt
|
||||
|
||||
verbose -log "Resyncing due to internal error."
|
||||
|
||||
set count 0
|
||||
while {$count < 10} {
|
||||
gdb_expect {
|
||||
|
@ -1283,7 +1355,7 @@ proc gdb_file_cmd { arg } {
|
|||
return -1
|
||||
}
|
||||
-re "A problem internal to GDB has been detected" {
|
||||
fail "($arg) GDB internal error"
|
||||
fail "($arg) (GDB internal error)"
|
||||
gdb_internal_error_resync
|
||||
return -1
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue