diff --git a/ports/run/gdb_monitor_interactive.run b/ports/run/gdb_monitor_interactive.run new file mode 100644 index 0000000000..096cd25d7d --- /dev/null +++ b/ports/run/gdb_monitor_interactive.run @@ -0,0 +1,148 @@ +# +# \brief Test for using the GDB monitor +# \author Christian Prochaska +# \author Norman Feske +# \date 2011-05-24 +# + +# +# Build +# + +build { + core init + drivers/timer drivers/uart + app/gdb_monitor + test/gdb_monitor +} + +create_boot_directory + +# +# Generate config +# + +set config { + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +} + +install_config $config + +# +# Boot modules +# + +# generic modules +set boot_modules { + core init timer + ld.lib.so libc.lib.so libc_log.lib.so libc_lock_pipe.lib.so libc_terminal.lib.so + uart_drv + gdb_monitor test-gdb_monitor +} + +build_boot_image $boot_modules + +# +# Execute test case +# +# +set local_port 5555 + +# qemu config +append qemu_args " -m 128 -nographic " + +# connect comport 0 to stdio +append qemu_args " -serial mon:stdio " + +# connect comport 1 with TCP port $local_port +append qemu_args " -serial chardev:uart " +append qemu_args " -chardev socket,id=uart,port=$local_port,host=localhost,server,nowait " + +run_genode_until {.*Remote debugging using /dev/terminal.*} 30 + +puts "GDB monitor is up, starting GDB in a new terminal" + +# sequence of GDB commands to execute at startup +set gdb_cmds "" +append gdb_cmds "-ex \"target remote localhost:$local_port\" " + +# +# The test breaks into the 'main()' function of the dynamically linked test +# application by using the following gdb command sequence. It's important that +# the 'main()' breakpoint gets set before the 'sharedlibrary' command is +# executed. Otherwise the breakpoint would get set in ld.lib.so's main() +# function. +# + +# don't ask for y/n when loading a new symbol file +append gdb_cmds {-ex "set interactive-mode off" } + +# load the symbols of ld.lib.so +append gdb_cmds {-ex "symbol-file bin/ld.lib.so" } + +# set a breakpoint in the 'call_main()' function +append gdb_cmds {-ex "b call_main" } + +# continue execution until the breakpoint triggers +append gdb_cmds {-ex "c" } + +# delete the 'call_main()' breakpoint +append gdb_cmds {-ex "delete 1" } + +# load the symbols of the test application +append gdb_cmds {-ex "symbol-file bin/test-gdb_monitor" } + +# set a breakpoint in the application's 'main()' function +append gdb_cmds {-ex "b main" } + +# load the symbols of loaded shared libraries +append gdb_cmds {-ex "sharedlibrary" } + +# continue execution until the breakpoint triggers +append gdb_cmds {-ex "c" } + +# delete the 'main()' breakpoint +append gdb_cmds {-ex "delete 2" } + +# ask the user for confirmations again +append gdb_cmds {-ex "set interactive-mode auto" } + +puts "command: [gdb] bin/test-gdb_monitor $gdb_cmds" + +exec [terminal] -e "[gdb] bin/test-gdb_monitor $gdb_cmds" & + +interact + +# vi: set ft=tcl :