# # \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 :