# Copyright 2008, 2009 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, write to the Free Software
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
#
# This file is part of the gdb testsuite.

if $tracelevel {
    strace $tracelevel
}

# Test single stepping through atomic sequences beginning with
# a lwarx/ldarx instruction and ending with a stwcx/stdcx
# instruction.

set prms_id 0
set bug_id 0

if ![istarget "powerpc64-*"] then {
    verbose "Skipping testing of powerpc64 single stepping over atomic sequences."
    return
}

set testfile "ppc64-atomic-inst"
set srcfile ${testfile}.c
set binfile ${objdir}/${subdir}/${testfile}
set compile_flags "debug quiet"

if { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable [concat $compile_flags additional_flags=-m64]] != "" } {
    unsupported "Testcase compile failed."
    return -1
}

gdb_exit
gdb_start
gdb_reinitialize_dir $srcdir/$subdir
gdb_load ${binfile}

if ![runto_main] then {
    perror "Couldn't run to breakpoint"
    continue
}

set bp1 [gdb_get_line_number "lwarx"]
gdb_breakpoint "$bp1" "Breakpoint $decimal at $hex" \
  "Set the breakpoint at the start of the sequence"

gdb_test continue "Continuing.*Breakpoint $decimal.*" \
  "Continue until breakpoint"

gdb_test next ".*__asm __volatile.*" \
  "Step through the lwarx/stwcx sequence"

gdb_test next ".*return 0.*" \
  "Step through the ldarx/stdcx sequence"
