# Copyright 2009, 2011-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/>.
#
# Contributed by Markus Deuling <deuling@de.ibm.com>.
#
# Testsuite for Cell Broadband Engine combined debugger
# Testcase for __ea pointer

load_lib cell.exp

set testfile "ea-test"
set source ${srcdir}/${subdir}/${testfile}.c
set binary ${objdir}/${subdir}/${testfile}

if {[skip_cell_tests]} {
    return 0
}

# Compile SPU binary.
if { [gdb_compile_cell_spu $source $binary executable {debug}]  != "" } {
  unsupported "Compile spu binary failed, so all tests in this file will automatically fail."
  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
}

# p
gdb_test "p ppe_pointer" \
	 "(int.*@__ea).*0x0.*" \
	 "p ppe_pointer"

gdb_test "p normal_pointer" \
	 "(int.*).*0x0.*" \
	 "p normal_pointer"

gdb_test "p local_ppe_pointer" \
	 "(int.*@__ea).*0x0.*" \
	 "p local_ppe_pointer"

gdb_test "p local_normal_pointer" \
	 "(int.*).*0x0.*" \
	 "p local_normal_pointer"

# ptype
gdb_test "ptype ppe_pointer" \
	 "type = int.*@__ea" \
	 "ptype ppe_pointer"

gdb_test "ptype normal_pointer" \
	 "type = int.*" \
	 "ptype normal_pointer"

gdb_test "ptype local_ppe_pointer" \
	 "type = int.*@__ea" \
	 "ptype local_ppe_pointer"

gdb_test "ptype local_normal_pointer" \
	 "type = int.*" \
	 "ptype local_normal_pointer"

# info locals
gdb_test "info locals" \
	 ".*local_ppe_pointer =.*0x0.*local_normal_pointer =.*0x0.*" \
	 "info locals"

# p &
gdb_test "p &ppe_pointer" \
	 ".*=.*(int.*@__ea.*).*0x.*" \
	 "p &ppe_pointer"

gdb_test "p &normal_pointer" \
	 ".*=.*(int.*).*0x.*" \
	 "p &normal_pointer"

gdb_test "p &local_ppe_pointer" \
	 ".*=.*(int.*@__ea.*).*0x.*" \
	 "p &local_ppe_pointer"

gdb_test "p &local_normal_pointer" \
	 ".*=.*(int.*).*0x.*" \
	 "p &local_normal_pointer"

# ptype *
gdb_test "ptype *ppe_pointer" \
	 "type = int" \
	 "ptype *ppe_pointer"

gdb_test "ptype *normal_pointer" \
	 "type = int" \
	 "ptype *normal_pointer"

gdb_test "ptype *local_ppe_pointer" \
	 "type = int" \
	 "ptype *local_ppe_pointer"

gdb_test "ptype *local_normal_pointer" \
	 "type = int" \
	 "ptype *local_normal_pointer"

gdb_exit

return 0


