| # Copyright (C) 2011-2021 Free Software Foundation, Inc. |
| # |
| # This program is free software; you can redistribute it and/or modify |
| # it under the terms of the GNU General Public License as published by |
| # the Free Software Foundation; either version 3 of the License, or |
| # (at your option) any later version. |
| # |
| # This program is distributed in the hope that it will be useful, |
| # but WITHOUT ANY WARRANTY; without even the implied warranty of |
| # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
| # GNU General Public License for more details. |
| # |
| # You should have received a copy of the GNU General Public License |
| # along with this program. If not, see <http://www.gnu.org/licenses/>. |
| |
| # Specialized subroutines for launching gdb and testing the very first prompt. |
| |
| |
| # |
| # start gdb -- start gdb running, prompt procedure |
| # this procedure differs from the default in that you must pass 'set height 0', |
| # and 'set width 0', yourself in GDBFLAGS, and it has a gdb_prompt_fail variable, |
| # |
| # uses pass if it sees $gdb_prompt, and fail if it sees $gdb_prompt_fail. |
| # |
| proc default_prompt_gdb_start { } { |
| global GDB |
| global INTERNAL_GDBFLAGS GDBFLAGS |
| global gdb_prompt |
| global gdb_prompt_fail |
| global timeout |
| global gdb_spawn_id |
| |
| verbose "Spawning $GDB $INTERNAL_GDBFLAGS $GDBFLAGS" |
| |
| if [info exists gdb_spawn_id] { |
| return 0 |
| } |
| |
| if ![is_remote host] { |
| if { [which $GDB] == 0 } then { |
| perror "$GDB does not exist." |
| exit 1 |
| } |
| } |
| set res [remote_spawn host "$GDB $INTERNAL_GDBFLAGS $GDBFLAGS [host_info gdb_opts]"] |
| if { $res < 0 || $res == "" } { |
| perror "Spawning $GDB failed." |
| return 1 |
| } |
| gdb_expect 360 { |
| -re ".*$gdb_prompt_fail.*$gdb_prompt_fail.*" { |
| fail "double prompted fail prompt" |
| } |
| -re ".*$gdb_prompt.*$gdb_prompt.*" { |
| fail "double prompted" |
| } |
| -re "\[\r\n\]$gdb_prompt_fail $" { |
| fail "GDB initializing first prompt" |
| } |
| -re "\[\r\n\]$gdb_prompt $" { |
| pass "GDB initializing first prompt" |
| } |
| -re "$gdb_prompt $" { |
| perror "GDB never initialized." |
| return -1 |
| } |
| -re "$gdb_prompt_fail $" { |
| perror "GDB never initialized." |
| return -1 |
| } |
| timeout { |
| perror "(timeout) GDB never initialized after 10 seconds." |
| remote_close host |
| return -1 |
| } |
| } |
| set gdb_spawn_id $res |
| return 0 |
| } |
| |
| # |
| # Overridable function. You can override this function in your |
| # baseboard file. |
| # |
| proc prompt_gdb_start { } { |
| default_prompt_gdb_start |
| } |
| |