# 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 {
    fail "can't run to main"
    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"
