# Copyright (C) 1998, 2007-2012 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/>.  */


if { [skip_hp_tests] } then { continue }

set testfile1 "average"
set testfile2 "sum"
set testfile "xdb-test"
set binfile1 ${objdir}/${subdir}/${testfile1}
set binfile2 ${objdir}/${subdir}/${testfile2}
set binfile ${objdir}/${subdir}/${testfile}

if  { [gdb_compile "${srcdir}/${subdir}/average.c" "${binfile1}.o" object {debug}] != "" } {
     untested xdb3.exp
     return -1
}

if  { [gdb_compile "${srcdir}/${subdir}/sum.c" "${binfile2}.o" object {debug}] != "" } {
     untested xdb3.exp
     return -1
}

if  { [gdb_compile "${binfile1}.o ${binfile2}.o" ${binfile} executable {debug}] != "" } {
     untested xdb3.exp
     return -1
}

if [get_compiler_info] {
    return -1;
}
if { $gcc_compiled } then { continue }


proc xdb_reinitialize_dir { subdir } {
    global gdb_prompt

   send_gdb "D\n"
    gdb_expect {
        -re "Reinitialize source path to empty.*y or n. " {
            send_gdb "y\n"
            gdb_expect {
                -re "Source directories searched.*$gdb_prompt $" {
                    send_gdb "D $subdir\n"
                    gdb_expect {
                        -re "Source directories searched.*$gdb_prompt $" {
                            verbose "Dir set to $subdir"
                        }
                        -re ".*$gdb_prompt $" {
                            perror "Dir \"$subdir\" failed."
                        }
                    }
                }
                -re ".*$gdb_prompt $" {
                    perror "Dir \"$subdir\" failed."
                }
            }
        }
        -re ".*$gdb_prompt $" {
            perror "Dir \"$subdir\" failed."
        }
    }
}

#
#test_search
#
proc test_search { } {
    gdb_test "set listsize 4" ""
    gdb_test "list average.c:1" "1\[ \t\]+/. This is a sample .*"
    gdb_test "/ print_average" "17\[ \t\]+void print_average\\(int \\*list.*"
    gdb_test "/ print_average" "19\[ \t\]+void print_average\\(list, low, high\\)"
    gdb_test "/ print_average" "42\[ \t\]+print_average \\(my_list, first, last\\);"
    gdb_test "? print_average" "19\[ \t\]+void print_average\\(list, low, high\\)"
    gdb_test "? sum" "9\[ \t]+extern int sum\\(\\);"
}

#
#test_viewing_loc
#
proc test_viewing_loc { } {
    gdb_test "L" "No stack."
    gdb_test "break main" ""
    gdb_test "R" ""
    gdb_test "L" "#0\[ \t\]+main \\(\\) at.*average.c:38\r\n38\[ \t\]+int first = 0, last = 0;"
}

#
#test_dir_list
#
proc test_dir_list { } {
    gdb_test "ld" "Source directories searched: .*"
}

#
#test_list_sources
#
proc test_list_sources { } {
    if [istarget "hppa64-*-*"] {
	gdb_test "lf" "Source files for which symbols have been read in:\r\n\r\n.*average\\.c.*Source files for which symbols will be read in on demand:\r\n\r\nglobals,.*\[se\]\[un\]\[md\]\\.c.*\[se\]\[un\]\[md\]\\.c"
    } else {
	gdb_test "lf" "Source files for which symbols have been read in:\r\n\r\n.*average\\.c.*\r\n\r\nSource files for which symbols will be read in on demand:\r\n\r\nglobals, end\\.c,.*sum\\.c"
    }
}
#
#test_vlist
#
proc test_vlist { } {
    gdb_test "v main" "34\[ \t\]+main \\(\\)\r\n35\[ \t\]+#endif\r\n36\[ \t\]+.\r\n37\[ \t\]+char c;"
}

#
#test_va
#
proc test_va { } {
    if [istarget "hppa64-*-*"] {
	gdb_test "va main" "Dump of assembler code for function main:\r\n.*0x.* <main>:\[ \t\]+std %rp,-0x10\\(%sp\\)\r\n0x.* <main\\+4>:\[ \t\]+std,ma %r3,0xd0\\(%sp\\)\r\n.*0x.* <main\\+8>:\[ \t\]+std %r4,-0xc8\\(%sp\\)\r\n.*0x.* <main\\+12>:\[ \t\]+copy %ret1,%r3\r\n.*"
    } else {
	gdb_test "va main" "Dump of assembler code for function main:\r\n.*0x.* <main>:\[ \t\]+stw %rp,-0x14\\(%sr0,%sp\\)\r\n0x.* <main\\+4>:\[ \t\]+ldo 0x\[48\]0\\(%sp\\),%sp\r\n.*0x.* <main\\+8>:\[ \t\]+stw %r0,-0x.*\\(%sr0,%sp\\)\r\n.*0x.* <main\\+12>:\[ \t\]+stw %r0,-0x.*\\(%sr0,%sp\\)\r\n.*"
    }
}

#
#test_list_globals
#
proc test_list_globals { } {
    gdb_test "lg" "All defined variables:\r\n\r\nFile globals:.*"
#    gdb_test "lg" "All defined variables:\r\n\r\nFile globals:\r\nchar __buffer.512.;\r\nint __d_eh_catch_catch;\r\nint __d_eh_catch_throw;.*"
}

#
#test_list_registers
#
proc test_list_registers { } {
    if [istarget "hppa64-*-*"] {
	gdb_test "lr" "\[ \t\]+flags:.*r17:.*pcsqh:.*cr0:.*\r\n\[ \t\]+r1:.*r18:.*pcoqt:.*cr8:.*"
    } else {
	gdb_test "lr" "\[ \t\]+flags:.*r18:.*pcsqt:.*ccr:.*\r\n\[ \t\]+r1:.*r19:.*eiem:.*cr12:.*"
    }
    gdb_test "lr r1" "r1 .*"
}

#
#test_backtrace
#
proc test_backtrace { } {
    gdb_test "t" "#0  main \\(\\) at.*average.c:39"
    gdb_test "T" "#0  main \\(\\) at.*average.c:39\r\n\[ \t\]+c = *.*\r\n\[ \t\]+first = 0\r\n\[ \t\]+last = 0"

    gdb_test "break sum" ""
    gdb_test "cont" ""
    gdb_test "next"

    gdb_test "t" "#0  sum \\(list=0x.*, low=0, high=9\\) at.*sum\.c:12\r\n#1  0x.* in print_average \\(list=0x.*, low=0, high=9\\) at.*average\.c:24\r\n#2  0x.* in main \\(\\) at.*average\.c:42"
    gdb_test "t 1" "#0  sum \\(list=0x.*, low=0, high=9\\) at.*sum\.c:12\r\n\\(More stack frames follow\.\.\.\\)"
    gdb_test "T" "#0  sum \\(list=0x.*, low=0, high=9\\) at.*sum\.c:12\r\n\[ \t\]+i = 0\r\n\[ \t\]+s = 0\r\n#1  0x.* in print_average \\(list=0x.*, low=0, high=9\\) at.*average\.c:24\r\n\[ \t\]+total = 0\r\n\[ \t\]+num_elements = 0\r\n\[ \t\]+average = 0\r\n#2  0x.* in main \\(\\) at.*average\.c:42\r\n\[ \t\]+c = *.*\r\n\[ \t\]+first = 0\r\n\[ \t\]+last = 9"
    gdb_test "T 1" "#0  sum \\(list=0x.*, low=0, high=9\\) at.*sum\.c:12\r\n\[ \t\]+i = 0\r\n\[ \t\]+s = 0\r\n\\(More stack frames follow\.\.\.\\)"

    gdb_test "V" "#0  sum \\(list=0x.*, low=0, high=9\\) at.*sum\.c:12\r\n\\12\[ \t\]+for \\(i = low;.*\\)"
    gdb_test "V 1" "#1  0x.* in print_average \\(list=0x.*, low=0, high=9\\) at.*average\.c:24\r\n24\[ \t\]+total = sum\\(list, low, high\\);"
}

#
# test_go
#
proc test_go { }  {
    gdb_test "break main" ""
    gdb_test "R" ""

    gdb_test "g +1" "Breakpoint.*at 0x.*: file.*average\.c, line 39\.\r\nContinuing at 0x.*\.\r\nmain \\(\\) at.*average\.c:39\r\n39\[ \t\]+last = num-1;"
    gdb_test "g 42" "Breakpoint.*at 0x.*: file.*average\.c, line 42\.\r\nContinuing at 0x.*\.\r\nmain \\(\\) at.*average\.c:42\r\n42\[ \t\]+print_average \\(my_list, first, last\\);"

}

#
#test_breakpoints
#
proc test_breakpoints { } {
    global gdb_prompt

    gdb_test "sb" ""
    gdb_test "lb" "Num.*Type.*Disp.*Enb.*Address.*What\r\n1\[ \r\]+breakpoint\[ \r\]+keep n.*in main at.*average\.c:38.*"
    gdb_test "ab" ""
    gdb_test "lb" "Num.*Type.*Disp.*Enb.*Address.*What\r\n1\[ \r\]+breakpoint\[ \r\]+keep y.*in main at.*average\.c:38.*"
    gdb_test "ba sum" "Breakpoint.*at.*: file.*sum\.c, line 11\."
    gdb_test "cont" ""
    gdb_test "bx" "Breakpoint.*at.*: file.*sum.c, line 15\."
    #gdb_test "bx if (1)" "Breakpoint.*at.*: file.*sum.c, line 15\."
    gdb_test "bx 1" "Breakpoint.*at.*: file.*average.c, line 29\."
    gdb_test "bx 1 if (1)" "Breakpoint.*at.*: file.*average.c, line 29\."
    gdb_test "bc 1 2" "Will ignore next 2 crossings of breakpoint 1\."
    gdb_test "lb 1" "Num.*Type.*Disp.*Enb.*Address.*What\r\n1\[ \r\]+breakpoint\[ \r\]+keep y.*in main at.*average\.c:38\r\n.*breakpoint already hit 1 time\r\n.*ignore next 2 hits.*"

    send_gdb "db\n"
    gdb_expect {
        -re "Delete all breakpoints.*y or n. $" {
            send_gdb "y\n"
            exp_continue
        }
        -re "y\r\n$gdb_prompt $" {}
        -re ".*$gdb_prompt $" { # This happens if there were no breakpoints
            }
        timeout { perror "Delete all breakpoints (timeout)" ; return }
    }
    send_gdb "lb\n"
    gdb_expect {
        -re "No breakpoints or watchpoints..*$gdb_prompt $" {}
        -re ".*$gdb_prompt $" { perror "breakpoints not deleted" ; return }
        timeout { perror "info breakpoints (timeout)" ; return }
    }
gdb_test "xbreak" "Breakpoint.*at.*file.*sum.c, line 15."
gdb_test "xbreak print_average" "Breakpoint.*at.*file.*average.c, line 29."
gdb_test "xbreak if (1)" "Note: breakpoint.*also set at pc.*Breakpoint.*at.*file.*sum.c, line 15."
gdb_test "xbreak print_average if (1)" "Note: breakpoint.*also set at pc.*Breakpoint.*at.*file.*average.c, line 29."

    send_gdb "lb\n"
    gdb_expect {
        -re "Num Type           Disp Enb Address    What.*breakpoint     keep y.*sum.c:15.*breakpoint     keep y.*average.c:29.*breakpoint     keep y.*sum.c:15.*stop only if 1.*breakpoint     keep y.*average.c:29.*stop only if 1.*$gdb_prompt $" {pass "lb on xbreaks"}
        -re ".*$gdb_prompt $" { fail "breakpoints not deleted"}
        timeout { fail "info breakpoints (timeout)" }
    }

}

#
# test_signals 
#
proc test_signals { } {
    gdb_test "handle SIGTERM nostop noprint" ""
    gdb_test "z 15 s" "Signal.*Stop.*Print.*Pass to program.*Description\r\nSIGTERM.*Yes.*Yes.*Yes.*Terminated"
    gdb_test "z 15 r" "Signal.*Stop.*Print.*Pass to program.*Description\r\nSIGTERM.*No.*No.*Yes.*Terminated"
    gdb_test "z 15 i" "Signal.*Stop.*Print.*Pass to program.*Description\r\nSIGTERM.*No.*No.*No.*Terminated"
    gdb_test "z 15 r" "Signal.*Stop.*Print.*Pass to program.*Description\r\nSIGTERM.*No.*Yes.*No.*Terminated"
    gdb_test "z 15 Q" "Signal.*Stop.*Print.*Pass to program.*Description\r\nSIGTERM.*No.*No.*No.*Terminated"
    gdb_test "lz" "Signal.*Stop.*Print.*Pass to program.*Description\r\n\r\nSIGHUP.*Yes.*"
}



# Start with a fresh gdb.
global GDBFLAGS
set saved_gdbflags $GDBFLAGS

set GDBFLAGS "$GDBFLAGS --xdb"

gdb_exit
gdb_start

xdb_reinitialize_dir $srcdir/$subdir

gdb_load ${binfile}
send_gdb "set width 0\n"
gdb_expect -re "$gdb_prompt $"
test_search
test_viewing_loc
test_dir_list
test_list_sources
test_vlist
test_va
gdb_test "next"
gdb_test "l" "No arguments.\r\nc = *.*\r\nfirst = 0\r\nlast = 0"
#test_list_globals
test_list_registers
test_backtrace

# Start with a fresh gdb.

gdb_exit
gdb_start
xdb_reinitialize_dir $srcdir/$subdir

gdb_load ${binfile}
send_gdb "set width 0\n"
gdb_expect -re "$gdb_prompt $"
test_go


gdb_exit
gdb_start
xdb_reinitialize_dir $srcdir/$subdir

gdb_load ${binfile}
send_gdb "set width 0\n"
gdb_expect -re "$gdb_prompt $"
gdb_test "break main" ""
gdb_test "R" ""
gdb_test "S" "39\[ \t\]+last = num-1;"
test_breakpoints
test_signals
gdb_test "sm" ""
gdb_test "info set" ".*pagination:  State of pagination is off.*"
gdb_test "am" ""
gdb_test "info set" ".*pagination:  State of pagination is on.*"
gdb_exit

set GDBFLAGS $saved_gdbflags

return 0






