# Copyright 2010 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/>.
#
# This file is part of the gdb testsuite.
#
# Contributed by Ulrich Weigand  <uweigand@de.ibm.com>.
# Tests for SPU addresses resulting from complex DWARF expressions.

load_lib cell.exp

set testfile "dwarfaddr"
set srcfile ${srcdir}/${subdir}/${testfile}.S
set binary ${objdir}/${subdir}/${testfile}

if {[skip_cell_tests]} {
    return 0
}

# Compile SPU binary.
if { [gdb_compile_cell_spu $srcfile $binary executable {debug}]  != "" } {
  unsupported "Compiling spu binary failed."
  return -1
}

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

if ![runto_main] then {
  fail "Can't run to main"
  return 0
}

gdb_test "print x" " = \\{0 <repeats 16 times>\\}" "print x"
gdb_test "print &x" " = \\(int \\(\\*\\)\\\[16\\\]\\) 0x\[0-9a-f\]*" "print &x"
gdb_test "info address x" "Symbol \"x\" is a complex DWARF expression.*DW_OP_and\[\r\n\]+\." "info address x"

gdb_exit

return 0
