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

# Please email any bugs, comments, and/or additions to this file to:
# bug-gdb@gnu.org

# This file is part of the gdb testsuite.


if { ![istarget s390-*-*] && ![istarget s390x-*-* ] } {
    verbose "Skipping s390 TDB register tests."
    return
}

standard_testfile .c

# The test case assumes that no FP- or vector instructions occur within
# the transaction.  Thus tell the compiler to use soft float, so it
# doesn't emit them.  Some GCC versions may otherwise do so, and an
# endless loop would result.
if { [prepare_for_testing "failed to prepare" $testfile $srcfile \
	  [list "debug" "additional_flags=-msoft-float"]] } {
    return -1
}

if ![runto_main] then {
    return 0
}

gdb_test_multiple "next" "check for TE support" {
    -re "Program received signal SIGILL,.*\r\n$gdb_prompt $" {
	unsupported "no TE support."
	return
    }
    -re "\[0-9\]+.*\r\n$gdb_prompt $" {
	pass "TE support available"
    }
    -re "$gdb_prompt $" {
	unsupported "no TE support (unknown error)."
	return
    }
}

set crashline [gdb_get_line_number "FAULT"]

gdb_test "print \$tdb0" "\\\$\[0-9\]+ = <unavailable>" "tdb0 unavailable"
gdb_test "print \$tr0" "\\\$\[0-9\]+ = <unavailable>" "tr0 unavailable"
gdb_test "next" \
    "Program received signal SIGSEGV, .*" \
    "crash in transaction"
gdb_test "print/x \$tdb0" "\\\$\[0-9\]+ = 0x1.*" "tdb0 available"
gdb_test "set print symbol-filename" "" "set print symbol-filename"
gdb_test "print/a \$atia" \
    "<crash_in_transaction.*:$crashline>" \
    "ATIA points to crash"
