mirror of
https://github.com/darlinghq/darling-gdb.git
synced 2025-03-03 23:17:25 +00:00
* config/gdbserver.exp (gdbserver_gdb_load): Update argument list.
(gdb_load): Delete, replace with... (gdb_reload): ...this. * gdb.server/server-run.exp: Use gdb_load and gdbserver_run. * gdb.server/server-mon.exp: Likewise. * lib/gdb.exp (gdb_run_cmd): Use gdb_reload. (gdb_start_cmd): New. (gdb_file_cmd): Save the last loaded file. (gdb_reload): New. (gdb_gnu_strip_debug): Use transform. * lib/gdbserver-support.exp (gdbserver_spawn): Move file download support here. Use new $last_loaded_file. Check mtime. (gdb_target_cmd): Handle ObjC failure case. (infer_host_exec): Delete. (gdbserver_load): Rename to... (gdbserver_run): ...this. Simplify. * lib/mi-support.exp (mi_gdb_file_cmd): Set last_loaded_file. (mi_gdb_load): Move most contents to a new function... (mi_gdb_target_load): ...here. Simplify call to gdbserver_gdb_load. (mi_run_cmd): Use mi_gdb_target_load. * gdb.base/break.exp, gdb.base/ending-run.exp, gdb.base/pending.exp, gdb.base/sepdebug.exp, gdb.base/unload.exp, gdb.objc/objcdecode.exp: Use gdb_run_cmd. * gdb.base/charsign.exp: Remove incorrect comment. * gdb.base/dbx.exp (gdb_file_cmd): Set last_loaded_file. * gdb.ada/exec_changed.exp, gdb.ada/null_record.exp, gdb.ada/start.exp, gdb.base/start.exp: Use gdb_start_cmd.
This commit is contained in:
parent
d2449ee801
commit
b741e21792
@ -1,3 +1,33 @@
|
||||
2007-03-27 Daniel Jacobowitz <dan@codesourcery.com>
|
||||
|
||||
* config/gdbserver.exp (gdbserver_gdb_load): Update argument list.
|
||||
(gdb_load): Delete, replace with...
|
||||
(gdb_reload): ...this.
|
||||
* gdb.server/server-run.exp: Use gdb_load and gdbserver_run.
|
||||
* gdb.server/server-mon.exp: Likewise.
|
||||
* lib/gdb.exp (gdb_run_cmd): Use gdb_reload.
|
||||
(gdb_start_cmd): New.
|
||||
(gdb_file_cmd): Save the last loaded file.
|
||||
(gdb_reload): New.
|
||||
(gdb_gnu_strip_debug): Use transform.
|
||||
* lib/gdbserver-support.exp (gdbserver_spawn): Move file download
|
||||
support here. Use new $last_loaded_file. Check mtime.
|
||||
(gdb_target_cmd): Handle ObjC failure case.
|
||||
(infer_host_exec): Delete.
|
||||
(gdbserver_load): Rename to...
|
||||
(gdbserver_run): ...this. Simplify.
|
||||
* lib/mi-support.exp (mi_gdb_file_cmd): Set last_loaded_file.
|
||||
(mi_gdb_load): Move most contents to a new function...
|
||||
(mi_gdb_target_load): ...here. Simplify call to gdbserver_gdb_load.
|
||||
(mi_run_cmd): Use mi_gdb_target_load.
|
||||
* gdb.base/break.exp, gdb.base/ending-run.exp, gdb.base/pending.exp,
|
||||
gdb.base/sepdebug.exp, gdb.base/unload.exp, gdb.objc/objcdecode.exp:
|
||||
Use gdb_run_cmd.
|
||||
* gdb.base/charsign.exp: Remove incorrect comment.
|
||||
* gdb.base/dbx.exp (gdb_file_cmd): Set last_loaded_file.
|
||||
* gdb.ada/exec_changed.exp, gdb.ada/null_record.exp, gdb.ada/start.exp,
|
||||
gdb.base/start.exp: Use gdb_start_cmd.
|
||||
|
||||
2007-03-23 Nigel Stephens <nigel@mips.com>
|
||||
Maciej W. Rozycki <macro@mips.com>
|
||||
|
||||
|
@ -74,10 +74,10 @@
|
||||
|
||||
load_lib gdbserver-support.exp
|
||||
|
||||
proc gdbserver_gdb_load { arg } {
|
||||
return [gdbserver_spawn $arg ""]
|
||||
proc gdbserver_gdb_load { } {
|
||||
return [gdbserver_spawn ""]
|
||||
}
|
||||
|
||||
proc gdb_load { arg } {
|
||||
return [gdbserver_load $arg ""]
|
||||
proc gdb_reload { } {
|
||||
return [gdbserver_run ""]
|
||||
}
|
||||
|
@ -55,7 +55,12 @@ gdb_test "shell mv ${binfile1} ${binfile}" "" ""
|
||||
gdb_load ${binfile}
|
||||
|
||||
# Start the program, we should land in the program main procedure
|
||||
gdb_test "start" \
|
||||
if { [gdb_start_cmd] < 0 } {
|
||||
untested start
|
||||
return -1
|
||||
}
|
||||
|
||||
gdb_test "" \
|
||||
"first \\(\\) at .*first.adb.*" \
|
||||
"start first"
|
||||
|
||||
@ -76,12 +81,10 @@ gdb_test "set confirm off" "" ""
|
||||
# Start the program a second time, GDB should land in procedure Second
|
||||
# this time.
|
||||
|
||||
if [is_remote target] {
|
||||
unsupported "start the program a second time ";
|
||||
if { [gdb_start_cmd] < 0 } {
|
||||
fail "start second"
|
||||
} else {
|
||||
# Start the program, we should land in the program main procedure
|
||||
gdb_test "start" \
|
||||
gdb_test "" \
|
||||
"second \\(\\) at .*second.adb.*" \
|
||||
"start second"
|
||||
}
|
||||
|
||||
|
@ -36,7 +36,12 @@ gdb_start
|
||||
gdb_reinitialize_dir $srcdir/$subdir
|
||||
gdb_load ${binfile}
|
||||
|
||||
gdb_test "start" \
|
||||
if { [gdb_start_cmd] < 0 } {
|
||||
untested start
|
||||
return -1
|
||||
}
|
||||
|
||||
gdb_test "" \
|
||||
"null_record \\(\\) at .*null_record.adb.*" \
|
||||
"start"
|
||||
|
||||
|
@ -37,7 +37,11 @@ gdb_reinitialize_dir $srcdir/$subdir
|
||||
gdb_load ${binfile}
|
||||
|
||||
# Verify that "start" lands inside the right procedure.
|
||||
gdb_test "start" \
|
||||
if { [gdb_start_cmd] < 0 } {
|
||||
untested start
|
||||
return -1
|
||||
}
|
||||
|
||||
gdb_test "" \
|
||||
"dummy \\(\\) at .*dummy.adb.*" \
|
||||
"start"
|
||||
|
||||
|
@ -202,27 +202,16 @@ if [istarget "mips-idt-*"] then {
|
||||
#
|
||||
# run until the breakpoint at main is hit. For non-stubs-using targets.
|
||||
#
|
||||
if ![target_info exists use_gdb_stub] {
|
||||
if [istarget "*-*-vxworks*"] then {
|
||||
send_gdb "run vxmain \"2\"\n"
|
||||
set timeout 120
|
||||
verbose "Timeout is now $timeout seconds" 2
|
||||
} else {
|
||||
send_gdb "run\n"
|
||||
}
|
||||
gdb_expect {
|
||||
-re "The program .* has been started already.*y or n. $" {
|
||||
send_gdb "y\n"
|
||||
exp_continue
|
||||
gdb_run_cmd
|
||||
gdb_expect {
|
||||
-re "Breakpoint \[0-9\]+,.*main .*argc.*argv.* at .*$srcfile:$bp_location6.*$bp_location6\[\t \]+if .argc.* \{.*$gdb_prompt $" {
|
||||
pass "run until function breakpoint"
|
||||
}
|
||||
-re "Starting program.*Breakpoint \[0-9\]+,.*main .*argc.*argv.* at .*$srcfile:$bp_location6.*$bp_location6\[\t \]+if .argc.* \{.*$gdb_prompt $"\
|
||||
{ pass "run until function breakpoint" }
|
||||
-re ".*$gdb_prompt $" { fail "run until function breakpoint" }
|
||||
timeout { fail "run until function breakpoint (timeout)" }
|
||||
}
|
||||
} else {
|
||||
if ![target_info exists gdb_stub] {
|
||||
gdb_test continue ".*Continuing\\..*Breakpoint \[0-9\]+, main \\(argc=.*, argv=.*, envp=.*\\) at .*$srcfile:$bp_location6.*$bp_location6\[\t \]+if .argc.*\{.*" "stub continue"
|
||||
-re "$gdb_prompt $" {
|
||||
fail "run until function breakpoint"
|
||||
}
|
||||
timeout {
|
||||
fail "run until function breakpoint (timeout)"
|
||||
}
|
||||
}
|
||||
|
||||
@ -773,26 +762,14 @@ proc test_next_with_recursion {} {
|
||||
global decimal
|
||||
global binfile
|
||||
|
||||
if [target_info exists use_gdb_stub] {
|
||||
# Reload the program.
|
||||
delete_breakpoints
|
||||
gdb_load ${binfile};
|
||||
} else {
|
||||
# FIXME: should be using runto
|
||||
gdb_test "kill" "" "kill program" "Kill the program being debugged.*y or n. $" "y"
|
||||
|
||||
delete_breakpoints
|
||||
}
|
||||
gdb_test "kill" "" "kill program" "Kill the program being debugged.*y or n. $" "y"
|
||||
delete_breakpoints
|
||||
|
||||
gdb_test "break factorial" "Breakpoint $decimal at .*" "break at factorial"
|
||||
|
||||
# Run until we call factorial with 6
|
||||
|
||||
if [istarget "*-*-vxworks*"] then {
|
||||
send_gdb "run vxmain \"6\"\n"
|
||||
} else {
|
||||
gdb_run_cmd
|
||||
}
|
||||
gdb_run_cmd
|
||||
gdb_expect {
|
||||
-re "Break.* factorial .value=6. .*$gdb_prompt $" {}
|
||||
-re ".*$gdb_prompt $" {
|
||||
@ -916,29 +893,19 @@ gdb_test "break marker4" \
|
||||
#
|
||||
# run until the breakpoint at main is hit. For non-stubs-using targets.
|
||||
#
|
||||
if ![target_info exists use_gdb_stub] {
|
||||
if [istarget "*-*-vxworks*"] then {
|
||||
send_gdb "run vxmain \"2\"\n"
|
||||
set timeout 120
|
||||
verbose "Timeout is now $timeout seconds" 2
|
||||
} else {
|
||||
send_gdb "run\n"
|
||||
}
|
||||
gdb_expect {
|
||||
-re "The program .* has been started already.*y or n. $" {
|
||||
send_gdb "y\n"
|
||||
exp_continue
|
||||
gdb_run_cmd
|
||||
gdb_expect {
|
||||
-re "Breakpoint \[0-9\]+,.*main .*argc.*argv.* at .*$srcfile:$bp_location6.*$bp_location6\[\t \]+if .argc.* \{.*$gdb_prompt $" {
|
||||
pass "run until function breakpoint, optimized file"
|
||||
}
|
||||
-re "Starting program.*Breakpoint \[0-9\]+,.*main .*argc.*argv.* at .*$srcfile:$bp_location6.*$bp_location6\[\t \]+if .argc.* \{.*$gdb_prompt $"\
|
||||
{ pass "run until function breakpoint, optimized file" }
|
||||
-re "Starting program.*Breakpoint \[0-9\]+,.*main .*argc.*argv.* at .*$gdb_prompt $"\
|
||||
{ pass "run until function breakpoint, optimized file (code motion)" }
|
||||
-re ".*$gdb_prompt $" { fail "run until function breakpoint, optimized file" }
|
||||
timeout { fail "run until function breakpoint, optimized file (timeout)" }
|
||||
}
|
||||
} else {
|
||||
if ![target_info exists gdb_stub] {
|
||||
gdb_test continue ".*Continuing\\..*Breakpoint \[0-9\]+, main \\(argc=.*, argv=.*, envp=.*\\) at .*$srcfile:$bp_location6.*$bp_location6\[\t \]+if .argc.*\{.*" "stub continue, optimized file"
|
||||
-re "Breakpoint \[0-9\]+,.*main .*argc.*argv.* at .*$gdb_prompt $" {
|
||||
pass "run until function breakpoint, optimized file (code motion)"
|
||||
}
|
||||
-re "$gdb_prompt $" {
|
||||
fail "run until function breakpoint, optimized file"
|
||||
}
|
||||
timeout {
|
||||
fail "run until function breakpoint, optimized file (timeout)"
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -44,8 +44,6 @@ proc do_test { cflags } {
|
||||
gdb_reinitialize_dir $srcdir/$subdir
|
||||
gdb_load ${binfile}
|
||||
|
||||
# For C programs, "start" should stop in main().
|
||||
|
||||
gdb_test "p n" \
|
||||
"= \"A\""
|
||||
gdb_test "p s" \
|
||||
|
@ -184,6 +184,9 @@ proc gdb_file_cmd {arg} {
|
||||
global gdb_prompt
|
||||
global spawn_id
|
||||
upvar timeout timeout
|
||||
global last_loaded_file
|
||||
|
||||
set last_loaded_file $arg
|
||||
|
||||
if [is_remote host] {
|
||||
set arg [remote_download host $arg];
|
||||
|
@ -67,11 +67,9 @@ gdb_test "b ending-run.c:31" ".*Breakpoint 3.*ending-run.c, line 31.*"
|
||||
# Expect to hit the bp at line "1", but symbolize this
|
||||
# as line "13". Then try to clear it--this should work.
|
||||
#
|
||||
if [target_info exists use_gdb_stub] {
|
||||
gdb_test "continue" ".*Breakpoint.*1.*callee.*13.*"
|
||||
} else {
|
||||
gdb_test "r" ".*Breakpoint.*1.*callee.*13.*"
|
||||
}
|
||||
gdb_run_cmd
|
||||
gdb_test "" ".*Breakpoint.*1.*callee.*13.*" "run"
|
||||
|
||||
gdb_test "cle" ".*Deleted breakpoints 2 1.*" "clear worked"
|
||||
send_gdb "i b\n"
|
||||
gdb_expect {
|
||||
|
@ -191,7 +191,8 @@ gdb_test "info break" \
|
||||
# Run to main which should resolve a pending breakpoint
|
||||
#
|
||||
|
||||
gdb_test "run" \
|
||||
gdb_run_cmd
|
||||
gdb_test "" \
|
||||
"Breakpoint.*at.*
|
||||
Pending breakpoint \"pendshr.c:26 if x > 3\" resolved.*
|
||||
Breakpoint.*, main.*$mainline.*" \
|
||||
|
@ -199,27 +199,16 @@ if [istarget "mips-idt-*"] then {
|
||||
#
|
||||
# run until the breakpoint at main is hit. For non-stubs-using targets.
|
||||
#
|
||||
if ![target_info exists use_gdb_stub] {
|
||||
if [istarget "*-*-vxworks*"] then {
|
||||
send_gdb "run vxmain \"2\"\n"
|
||||
set timeout 120
|
||||
verbose "Timeout is now $timeout seconds" 2
|
||||
} else {
|
||||
send_gdb "run\n"
|
||||
}
|
||||
gdb_expect {
|
||||
-re "The program .* has been started already.*y or n. $" {
|
||||
send_gdb "y\n"
|
||||
exp_continue
|
||||
gdb_run_cmd
|
||||
gdb_expect {
|
||||
-re "Breakpoint \[0-9\]+,.*main .*argc.*argv.* at .*$srcfile:$bp_location6.*$bp_location6\[\t \]+if .argc.* \{.*$gdb_prompt $" {
|
||||
pass "run until function breakpoint"
|
||||
}
|
||||
-re "Starting program.*Breakpoint \[0-9\]+,.*main .*argc.*argv.* at .*$srcfile:$bp_location6.*$bp_location6\[\t \]+if .argc.* \{.*$gdb_prompt $"\
|
||||
{ pass "run until function breakpoint" }
|
||||
-re ".*$gdb_prompt $" { fail "run until function breakpoint" }
|
||||
timeout { fail "run until function breakpoint (timeout)" }
|
||||
}
|
||||
} else {
|
||||
if ![target_info exists gdb_stub] {
|
||||
gdb_test continue ".*Continuing\\..*Breakpoint \[0-9\]+, main \\(argc=.*, argv=.*, envp=.*\\) at .*$srcfile:$bp_location6.*$bp_location6\[\t \]+if .argc.*\{.*" "stub continue"
|
||||
-re "$gdb_prompt $" {
|
||||
fail "run until function breakpoint"
|
||||
}
|
||||
timeout {
|
||||
fail "run until function breakpoint (timeout)"
|
||||
}
|
||||
}
|
||||
|
||||
@ -759,26 +748,14 @@ proc test_next_with_recursion {} {
|
||||
global decimal
|
||||
global binfile
|
||||
|
||||
if [target_info exists use_gdb_stub] {
|
||||
# Reload the program.
|
||||
delete_breakpoints
|
||||
gdb_load ${binfile};
|
||||
} else {
|
||||
# FIXME: should be using runto
|
||||
gdb_test "kill" "" "kill program" "Kill the program being debugged.*y or n. $" "y"
|
||||
|
||||
delete_breakpoints
|
||||
}
|
||||
gdb_test "kill" "" "kill program" "Kill the program being debugged.*y or n. $" "y"
|
||||
delete_breakpoints
|
||||
|
||||
gdb_test "break factorial" "Breakpoint $decimal at .*" "break at factorial"
|
||||
|
||||
# Run until we call factorial with 6
|
||||
|
||||
if [istarget "*-*-vxworks*"] then {
|
||||
send_gdb "run vxmain \"6\"\n"
|
||||
} else {
|
||||
gdb_run_cmd
|
||||
}
|
||||
gdb_run_cmd
|
||||
gdb_expect {
|
||||
-re "Break.* factorial .value=6. .*$gdb_prompt $" {}
|
||||
-re ".*$gdb_prompt $" {
|
||||
@ -883,29 +860,19 @@ gdb_test "break marker4" \
|
||||
#
|
||||
# run until the breakpoint at main is hit. For non-stubs-using targets.
|
||||
#
|
||||
if ![target_info exists use_gdb_stub] {
|
||||
if [istarget "*-*-vxworks*"] then {
|
||||
send_gdb "run vxmain \"2\"\n"
|
||||
set timeout 120
|
||||
verbose "Timeout is now $timeout seconds" 2
|
||||
} else {
|
||||
send_gdb "run\n"
|
||||
}
|
||||
gdb_expect {
|
||||
-re "The program .* has been started already.*y or n. $" {
|
||||
send_gdb "y\n"
|
||||
exp_continue
|
||||
gdb_run_cmd
|
||||
gdb_expect {
|
||||
-re "Breakpoint \[0-9\]+,.*main .*argc.*argv.* at .*$srcfile:$bp_location6.*$bp_location6\[\t \]+if .argc.* \{.*$gdb_prompt $" {
|
||||
pass "run until function breakpoint, optimized file"
|
||||
}
|
||||
-re "Starting program.*Breakpoint \[0-9\]+,.*main .*argc.*argv.* at .*$srcfile:$bp_location6.*$bp_location6\[\t \]+if .argc.* \{.*$gdb_prompt $"\
|
||||
{ pass "run until function breakpoint, optimized file" }
|
||||
-re "Starting program.*Breakpoint \[0-9\]+,.*main .*argc.*argv.* at .*$gdb_prompt $"\
|
||||
{ pass "run until function breakpoint, optimized file (code motion)" }
|
||||
-re ".*$gdb_prompt $" { fail "run until function breakpoint, optimized file" }
|
||||
timeout { fail "run until function breakpoint, optimized file (timeout)" }
|
||||
}
|
||||
} else {
|
||||
if ![target_info exists gdb_stub] {
|
||||
gdb_test continue ".*Continuing\\..*Breakpoint \[0-9\]+, main \\(argc=.*, argv=.*, envp=.*\\) at .*$srcfile:$bp_location6.*$bp_location6\[\t \]+if .argc.*\{.*" "stub continue, optimized file"
|
||||
-re "Breakpoint \[0-9\]+,.*main .*argc.*argv.* at .*$gdb_prompt $" {
|
||||
pass "run until function breakpoint, optimized file (code motion)"
|
||||
}
|
||||
-re "$gdb_prompt $" {
|
||||
fail "run until function breakpoint, optimized file"
|
||||
}
|
||||
timeout {
|
||||
fail "run until function breakpoint, optimized file (timeout)"
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -37,8 +37,12 @@ gdb_reinitialize_dir $srcdir/$subdir
|
||||
gdb_load ${binfile}
|
||||
|
||||
# For C programs, "start" should stop in main().
|
||||
if { [gdb_start_cmd] < 0 } {
|
||||
untested start
|
||||
return -1
|
||||
}
|
||||
|
||||
gdb_test "start" \
|
||||
gdb_test "" \
|
||||
"main \\(\\) at .*start.c.*" \
|
||||
"start"
|
||||
|
||||
|
@ -90,26 +90,27 @@ gdb_test "info break" \
|
||||
|
||||
set unloadshr_line [gdb_get_line_number "unloadshr break" ${libsrcfile}]
|
||||
|
||||
gdb_test "run" \
|
||||
"Starting program.*unload.*
|
||||
Breakpoint.*at.*
|
||||
gdb_run_cmd
|
||||
gdb_test "" \
|
||||
"Breakpoint.*at.*
|
||||
Pending breakpoint \"shrfunc1\" resolved.*
|
||||
Breakpoint.*, shrfunc1 \\\(x=3\\\).*unloadshr.c:$unloadshr_line.*" \
|
||||
"running program"
|
||||
|
||||
gdb_test "continue" \
|
||||
"Continuing.*y is 7.*warning: Temporarily disabling breakpoints for.*unloadshr.sl.*Program exited normally." \
|
||||
"Continuing.*warning: Temporarily disabling breakpoints for.*unloadshr.sl.*Program exited normally." \
|
||||
"continuing to end of program"
|
||||
|
||||
#
|
||||
# Try to rerun program and verify that shared breakpoint is reset properly
|
||||
#
|
||||
|
||||
gdb_test "run" \
|
||||
gdb_run_cmd
|
||||
gdb_test "" \
|
||||
".*Breakpoint.*shrfunc1.*at.*unloadshr.c:$unloadshr_line.*" \
|
||||
"rerun to shared library breakpoint"
|
||||
|
||||
gdb_test "continue" \
|
||||
"Continuing.*y is 7.*warning: Temporarily disabling breakpoints for.*unloadshr.sl.*Program exited normally." \
|
||||
"Continuing.*warning: Temporarily disabling breakpoints for.*unloadshr.sl.*Program exited normally." \
|
||||
"continuing to end of program second time"
|
||||
|
||||
|
@ -72,12 +72,13 @@ gdb_test_multiple "break multipleDef" $name \
|
||||
}
|
||||
|
||||
set name "continue after break on multiply defined symbol"
|
||||
gdb_test_multiple "run" $name \
|
||||
gdb_run_cmd
|
||||
gdb_test_multiple "" $name \
|
||||
{
|
||||
-re "Starting program.*Breakpoint \[0-9\]+, multipleDef \\\(\\\) at .*\r\n$gdb_prompt $" {
|
||||
-re "Breakpoint \[0-9\]+, multipleDef \\\(\\\) at .*\r\n$gdb_prompt $" {
|
||||
pass $name
|
||||
}
|
||||
-re "Starting program.*\\\[0\\\] cancel\r\n\\\[1\\\] all\r\n\\\[2\\\] -.Decode multipleDef. at .*\r\n\\\[3\\\] multipleDef at .*\r\n> $" {
|
||||
-re "\\\[0\\\] cancel\r\n\\\[1\\\] all\r\n\\\[2\\\] -.Decode multipleDef. at .*\r\n\\\[3\\\] multipleDef at .*\r\n> $" {
|
||||
send_gdb "0\n"
|
||||
kfail "gdb/1238" $name
|
||||
# gdb is in a bad state here.
|
||||
|
@ -34,10 +34,11 @@ if { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {deb
|
||||
|
||||
gdb_exit
|
||||
gdb_start
|
||||
|
||||
gdbserver_load $binfile ""
|
||||
gdb_load $binfile
|
||||
gdb_reinitialize_dir $srcdir/$subdir
|
||||
|
||||
gdbserver_run ""
|
||||
|
||||
gdb_test_multiple "monitor help" "" {
|
||||
-re "Unknown monitor command.*$gdb_prompt $" {
|
||||
fail "monitor help"
|
||||
|
@ -34,8 +34,9 @@ if { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {deb
|
||||
|
||||
gdb_exit
|
||||
gdb_start
|
||||
gdb_load $binfile
|
||||
|
||||
gdbserver_load $binfile ""
|
||||
gdbserver_run ""
|
||||
gdb_reinitialize_dir $srcdir/$subdir
|
||||
|
||||
gdb_breakpoint main
|
||||
|
@ -203,9 +203,7 @@ proc gdb_run_cmd {args} {
|
||||
|
||||
if [target_info exists use_gdb_stub] {
|
||||
if [target_info exists gdb,do_reload_on_run] {
|
||||
# Specifying no file, defaults to the executable
|
||||
# currently being debugged.
|
||||
if { [gdb_load ""] != 0 } {
|
||||
if { [gdb_reload] != 0 } {
|
||||
return;
|
||||
}
|
||||
send_gdb "continue\n";
|
||||
@ -250,7 +248,7 @@ proc gdb_run_cmd {args} {
|
||||
send_gdb "y\n"
|
||||
}
|
||||
-re "The program is not being run.*$gdb_prompt $" {
|
||||
if { [gdb_load ""] != 0 } {
|
||||
if { [gdb_reload] != 0 } {
|
||||
return;
|
||||
}
|
||||
send_gdb "jump *$start\n";
|
||||
@ -272,7 +270,7 @@ proc gdb_run_cmd {args} {
|
||||
}
|
||||
|
||||
if [target_info exists gdb,do_reload_on_run] {
|
||||
if { [gdb_load ""] != 0 } {
|
||||
if { [gdb_reload] != 0 } {
|
||||
return;
|
||||
}
|
||||
}
|
||||
@ -289,6 +287,42 @@ proc gdb_run_cmd {args} {
|
||||
}
|
||||
}
|
||||
|
||||
# Generic start command. Return 0 if we could start the program, -1
|
||||
# if we could not.
|
||||
|
||||
proc gdb_start_cmd {args} {
|
||||
global gdb_prompt
|
||||
|
||||
if [target_info exists gdb_init_command] {
|
||||
send_gdb "[target_info gdb_init_command]\n";
|
||||
gdb_expect 30 {
|
||||
-re "$gdb_prompt $" { }
|
||||
default {
|
||||
perror "gdb_init_command for target failed";
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if [target_info exists use_gdb_stub] {
|
||||
return -1
|
||||
}
|
||||
|
||||
send_gdb "start $args\n"
|
||||
gdb_expect 60 {
|
||||
-re "The program .* has been started already.*y or n. $" {
|
||||
send_gdb "y\n"
|
||||
exp_continue
|
||||
}
|
||||
# Use -notransfer here so that test cases (like chng-sym.exp)
|
||||
# may test for additional start-up messages.
|
||||
-notransfer -re "Starting program: \[^\r\n\]*" {
|
||||
return 0
|
||||
}
|
||||
}
|
||||
return -1
|
||||
}
|
||||
|
||||
# Set a breakpoint at FUNCTION. If there is an additional argument it is
|
||||
# a list of options; the only currently supported option is allow-pending.
|
||||
|
||||
@ -1001,6 +1035,9 @@ proc gdb_file_cmd { arg } {
|
||||
global gdb_prompt
|
||||
global verbose
|
||||
global GDB
|
||||
global last_loaded_file
|
||||
|
||||
set last_loaded_file $arg
|
||||
|
||||
# Set whether debug info was found.
|
||||
# Default to "fail".
|
||||
@ -1937,6 +1974,18 @@ proc gdb_load { arg } {
|
||||
return [gdb_file_cmd $arg]
|
||||
}
|
||||
|
||||
# gdb_reload -- load a file into the target. Called before "running",
|
||||
# either the first time or after already starting the program once,
|
||||
# for remote targets. Most files that override gdb_load should now
|
||||
# override this instead.
|
||||
|
||||
proc gdb_reload { } {
|
||||
# For the benefit of existing configurations, default to gdb_load.
|
||||
# Specifying no file defaults to the executable currently being
|
||||
# debugged.
|
||||
return [gdb_load ""]
|
||||
}
|
||||
|
||||
proc gdb_continue { function } {
|
||||
global decimal
|
||||
|
||||
@ -2381,8 +2430,8 @@ proc gdb_gnu_strip_debug { dest args } {
|
||||
gdb_exit
|
||||
|
||||
set debug_file [separate_debug_filename $dest]
|
||||
set strip_to_file_program strip
|
||||
set objcopy_program objcopy
|
||||
set strip_to_file_program [transform strip]
|
||||
set objcopy_program [transform objcopy]
|
||||
|
||||
# Make sure the directory that will hold the separated debug
|
||||
# info actually exists.
|
||||
|
@ -80,6 +80,11 @@ proc gdb_target_cmd { targetname serialport } {
|
||||
-re "Timeout reading from remote system.*$gdb_prompt $" {
|
||||
verbose "Got timeout error from gdb."
|
||||
}
|
||||
-notransfer -re "Remote debugging using .*\r\n> $" {
|
||||
# We got an unexpected prompt while creating the target.
|
||||
# Leave it there for the test to diagnose.
|
||||
return 1
|
||||
}
|
||||
timeout {
|
||||
send_gdb ""
|
||||
break
|
||||
@ -129,8 +134,40 @@ proc skip_gdbserver_tests { } {
|
||||
#
|
||||
# Returns the target protocol and socket to connect to.
|
||||
|
||||
proc gdbserver_spawn { server_exec child_args } {
|
||||
proc gdbserver_spawn { child_args } {
|
||||
global portnum
|
||||
global gdbserver_host_exec
|
||||
global gdbserver_host_mtime
|
||||
global gdbserver_server_exec
|
||||
global last_loaded_file
|
||||
|
||||
set host_exec $last_loaded_file
|
||||
|
||||
# If we already downloaded a file to the target, see if we can reuse it.
|
||||
set reuse 0
|
||||
if { [info exists gdbserver_server_exec] } {
|
||||
set reuse 1
|
||||
|
||||
# If the file has changed, we can not.
|
||||
if { $host_exec != $gdbserver_host_exec } {
|
||||
set reuse 0
|
||||
}
|
||||
|
||||
# If the mtime has changed, we can not.
|
||||
if { [file mtime $host_exec] != $gdbserver_host_mtime } {
|
||||
set reuse 0
|
||||
}
|
||||
}
|
||||
|
||||
if { $reuse == 0 } {
|
||||
set gdbserver_host_exec $host_exec
|
||||
set gdbserver_host_mtime [file mtime $host_exec]
|
||||
if [is_remote target] {
|
||||
set gdbserver_server_exec [remote_download target $host_exec /tmp/[file tail $host_exec].[pid]]
|
||||
} else {
|
||||
set gdbserver_server_exec $host_exec
|
||||
}
|
||||
}
|
||||
|
||||
# Port id -- either specified in baseboard file, or managed here.
|
||||
if [target_info exists gdb,socketport] {
|
||||
@ -162,7 +199,7 @@ proc gdbserver_spawn { server_exec child_args } {
|
||||
# Fire off the debug agent. This flavour of gdbserver takes as
|
||||
# arguments the port information, the name of the executable file to
|
||||
# be debugged, and any arguments.
|
||||
set gdbserver_command "$gdbserver :$portnum $server_exec"
|
||||
set gdbserver_command "$gdbserver :$portnum $gdbserver_server_exec"
|
||||
if { $child_args != "" } {
|
||||
append gdbserver_command " $child_args"
|
||||
}
|
||||
@ -194,58 +231,13 @@ proc gdbserver_spawn { server_exec child_args } {
|
||||
return [list $protocol $gdbport]
|
||||
}
|
||||
|
||||
proc infer_host_exec { } {
|
||||
set host_exec ""
|
||||
|
||||
send_gdb "info files\n"
|
||||
gdb_expect 30 {
|
||||
-re "Symbols from \"(\[^\"\]+)\"" {
|
||||
set host_exec $expect_out(1,string)
|
||||
exp_continue
|
||||
}
|
||||
-re "Local exec file:\[\r\n\]+\[ \t\]*`(\[^'\]+)'," {
|
||||
set host_exec $expect_out(1,string)
|
||||
exp_continue
|
||||
}
|
||||
-re "$gdb_prompt $" { }
|
||||
}
|
||||
|
||||
return $host_exec
|
||||
}
|
||||
|
||||
# Start a gdbserver process running HOST_EXEC and pass CHILD_ARGS
|
||||
# to it. Return 0 on success, or non-zero on failure.
|
||||
|
||||
proc gdbserver_load { host_exec child_args } {
|
||||
global gdbserver_host_exec
|
||||
global gdbserver_server_exec
|
||||
|
||||
# If we weren't passed an explicit binary, try to reuse the current
|
||||
# one. If we were, be sure to redownload it.
|
||||
|
||||
if { $host_exec == "" && $gdbserver_host_exec == "" } {
|
||||
set gdbserver_host_exec [infer_host_exec]
|
||||
} elseif { $host_exec != "" } {
|
||||
set gdbserver_host_exec $host_exec
|
||||
if [info exists gdbserver_server_exec] { unset gdbserver_server_exec }
|
||||
}
|
||||
|
||||
if { ! [info exists gdbserver_server_exec] } {
|
||||
if [is_remote target] {
|
||||
set gdbserver_server_exec [remote_download target $host_exec /tmp/[file tail $gdbserver_host_exec].[pid]]
|
||||
} else {
|
||||
set gdbserver_server_exec $gdbserver_host_exec
|
||||
}
|
||||
}
|
||||
|
||||
set res [gdbserver_spawn $gdbserver_server_exec $child_args]
|
||||
proc gdbserver_run { child_args } {
|
||||
set res [gdbserver_spawn $child_args]
|
||||
set protocol [lindex $res 0]
|
||||
set gdbport [lindex $res 1]
|
||||
|
||||
if { $host_exec != "" } {
|
||||
if [gdb_file_cmd $host_exec] {
|
||||
return -1
|
||||
}
|
||||
}
|
||||
gdb_target_cmd $protocol $gdbport
|
||||
return [gdb_target_cmd $protocol $gdbport]
|
||||
}
|
||||
|
@ -379,18 +379,10 @@ proc mi_gdb_file_cmd { arg } {
|
||||
global loadfile
|
||||
global GDB
|
||||
global mi_gdb_prompt
|
||||
global last_mi_gdb_file
|
||||
global last_mi_remote_file
|
||||
global last_loaded_file
|
||||
upvar timeout timeout
|
||||
|
||||
if { $arg == "" } {
|
||||
set arg $last_mi_gdb_file;
|
||||
} else {
|
||||
set last_mi_gdb_file $arg
|
||||
if { [ info exists last_mi_remote_file ] } {
|
||||
unset last_mi_remote_file
|
||||
}
|
||||
}
|
||||
set last_loaded_file $arg
|
||||
|
||||
if [is_remote host] {
|
||||
set arg [remote_download host $arg];
|
||||
@ -449,10 +441,10 @@ proc mi_gdb_file_cmd { arg } {
|
||||
}
|
||||
|
||||
#
|
||||
# load a file into the debugger.
|
||||
# connect to the target and download a file, if necessary.
|
||||
# return a -1 if anything goes wrong.
|
||||
#
|
||||
proc mi_gdb_load { arg } {
|
||||
proc mi_gdb_target_load { } {
|
||||
global verbose
|
||||
global loadpath
|
||||
global loadfile
|
||||
@ -460,25 +452,8 @@ proc mi_gdb_load { arg } {
|
||||
global mi_gdb_prompt
|
||||
upvar timeout timeout
|
||||
|
||||
# ``gdb_unload''
|
||||
if { $arg != "" } {
|
||||
mi_gdb_file_cmd $arg
|
||||
}
|
||||
|
||||
# ``load''
|
||||
if { [info procs gdbserver_gdb_load] != "" } {
|
||||
global last_mi_gdb_file
|
||||
global last_mi_remote_file
|
||||
|
||||
if { ! [info exists last_mi_remote_file] } {
|
||||
if [is_remote target] {
|
||||
set last_mi_remote_file [remote_download target $arg /tmp/[file tail $arg].[pid]]
|
||||
} else {
|
||||
set last_mi_remote_file $last_mi_gdb_file
|
||||
}
|
||||
}
|
||||
|
||||
set res [gdbserver_gdb_load $last_mi_remote_file]
|
||||
set res [gdbserver_gdb_load]
|
||||
set protocol [lindex $res 0]
|
||||
set gdbport [lindex $res 1]
|
||||
|
||||
@ -544,6 +519,17 @@ proc mi_gdb_load { arg } {
|
||||
return 0
|
||||
}
|
||||
|
||||
#
|
||||
# load a file into the debugger.
|
||||
# return a -1 if anything goes wrong.
|
||||
#
|
||||
proc mi_gdb_load { arg } {
|
||||
if { $arg != "" } {
|
||||
return [mi_gdb_file_cmd $arg]
|
||||
}
|
||||
return 0
|
||||
}
|
||||
|
||||
# mi_gdb_test COMMAND PATTERN MESSAGE [IPATTERN] -- send a command to gdb;
|
||||
# test the result.
|
||||
#
|
||||
@ -786,13 +772,12 @@ proc mi_run_cmd {args} {
|
||||
}
|
||||
}
|
||||
|
||||
if { [mi_gdb_target_load] < 0 } {
|
||||
return
|
||||
}
|
||||
|
||||
if [target_info exists use_gdb_stub] {
|
||||
if [target_info exists gdb,do_reload_on_run] {
|
||||
# Specifying no file, defaults to the executable
|
||||
# currently being debugged.
|
||||
if { [mi_gdb_load ""] < 0 } {
|
||||
return;
|
||||
}
|
||||
send_gdb "000-exec-continue\n";
|
||||
gdb_expect 60 {
|
||||
-re "000\\^running\[\r\n\]+$mi_gdb_prompt$" {}
|
||||
|
Loading…
x
Reference in New Issue
Block a user