# Copyright 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/>.

load_lib "ada.exp"

if { [skip_ada_tests] } { return -1 }

standard_ada_testfile task_switch

if {[gdb_compile_ada "${srcfile}" "${binfile}" executable [list debug additional_flags=-gnata ]] != "" } {
  return -1
}

load_lib mi-support.exp
set MIFLAGS "-i=mi"

gdb_exit
if [mi_gdb_start] {
    continue
}

mi_delete_breakpoints
mi_gdb_reinitialize_dir $srcdir/$subdir
mi_gdb_load ${binfile}

# This test won't work properly if system debuginfo is installed.
mi_gdb_test "-gdb-set debug-file-directory \"\"" ".*"

if ![mi_runto "task_switch.break_me"] then {
   return 0
}

# Verify that "-stack-list-arguments" does not cause the debugger to
# crash when printing the arguments of frame 1 (due to the internally-
# generated argument "_task").
# Frame for task_switch.break_me
set frame0 "frame=\{level=\"0\",args=\\\[\\\]\}"
# Frame for task_switch.caller
set frame1_args "\{name=\"<_task>\",value=\"$hex\"\}"
set frame1 "frame=\{level=\"1\",args=\\\[$frame1_args\\\]\}"
# Frame for system.tasking.stages.task_wrapper
set frame2_args "(\{name=\"self_id\",value=\"($hex|<optimized out>)\"\})?"
set frame2 "frame=\{level=\"2\",args=\\\[$frame2_args\\\]\}"
mi_gdb_test "-stack-list-arguments 1" \
            "\\^done,stack-args=\\\[$frame0,$frame1,$frame2,.*" \
            "-stack-list-arguments 1"

