e22f8b7c8c
Switch the license of all .f and .f90 files to GPLv3. Switch the license of all .s and .S files to GPLv3.
241 lines
7.1 KiB
Text
241 lines
7.1 KiB
Text
# Copyright 2007 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 Markus Deuling <deuling@de.ibm.com>.
|
|
# Tests for 'info spu' commands.
|
|
|
|
set prms_id 0
|
|
set bug_id 0
|
|
|
|
if { ![istarget "spu-*-elf"] } then {
|
|
verbose "Skipping SPU-only testcase"
|
|
return
|
|
}
|
|
|
|
set testfile "spu-info"
|
|
set srcfile ${testfile}.c
|
|
set binfile ${objdir}/${subdir}/${testfile}
|
|
set sources ${srcdir}/${subdir}/${srcfile}
|
|
|
|
if { [gdb_compile $sources ${binfile} executable { debug }] != "" } {
|
|
return -1
|
|
}
|
|
|
|
gdb_exit
|
|
gdb_start
|
|
gdb_reinitialize_dir $srcdir/$subdir
|
|
gdb_load ${binfile}
|
|
|
|
# Continue to MARKER
|
|
proc c_to { marker } {
|
|
global srcfile
|
|
set line [gdb_get_line_number $marker]
|
|
gdb_test "break $line" \
|
|
"Breakpoint.*at.*file.*$srcfile.*line $line.*" \
|
|
"break $line"
|
|
gdb_test "continue" \
|
|
"Continuing.*Breakpoint.*at.*$srcfile.*$line.*" \
|
|
"continue to $line"
|
|
}
|
|
|
|
|
|
|
|
if ![runto_main] then {
|
|
fail "Can't run to main"
|
|
return 0
|
|
}
|
|
|
|
# Check the help.
|
|
gdb_test "info spu" \
|
|
".*info spu.* must be followed by the name of an SPU facility.*" \
|
|
"info spu"
|
|
gdb_test "help info spu" \
|
|
"Various SPU specific commands.*List of info spu subcommands.*" \
|
|
"help info spu"
|
|
|
|
gdb_test "help info spu dma" \
|
|
"Display MFC DMA status." \
|
|
"help info spu dma"
|
|
gdb_test "help info spu event" \
|
|
"Display SPU event facility status." \
|
|
"help info spu event"
|
|
gdb_test "help info spu mailbox" \
|
|
"Display SPU mailbox facility status." \
|
|
"help info spu mailbox"
|
|
gdb_test "help info spu proxydma" \
|
|
"Display MFC Proxy-DMA status." \
|
|
"help info spu proxydma"
|
|
gdb_test "help info spu signal" \
|
|
"Display SPU signal notification facility status." \
|
|
"help info spu signal"
|
|
|
|
|
|
# architecture should be spu:256K.
|
|
gdb_test "show architecture" \
|
|
"The target architecture is set automatically.*currently spu:256K.*" \
|
|
"architecture = spu256K"
|
|
|
|
# 'info spu event'.
|
|
gdb_test "info spu event" \
|
|
"Event Status.*Event Mask.*" \
|
|
"info spu event"
|
|
|
|
# 'info spu signal'.
|
|
gdb_test "info spu signal" \
|
|
"Signal 1 not pending.*\(Type.*\).*Signal 2 not pending.*\(Type.*\).*" \
|
|
"info spu signal"
|
|
|
|
# 'info spu mailbox'.
|
|
gdb_test "info spu mailbox" \
|
|
"SPU Outbound Mailbox.*SPU Outbound Interrupt Mailbox.*" \
|
|
"info spu mailbox"
|
|
|
|
# 'info spu dma'.
|
|
gdb_test "info spu dma" \
|
|
"Tag-Group Status.*Tag-Group Mask.*Stall-and-Notify .*Atomic Cmd Status.*Opcode.*Tag.*TId.*RId.*EA.*LSA.*Size.*LstAddr.*LstSize.*E.*" \
|
|
"info spu dma"
|
|
|
|
# 'info spu proxydma'.
|
|
gdb_test "info spu proxydma" \
|
|
"Tag-Group Status.*Tag-Group Mask.*Opcode.*Tag.*TId.*RId.*EA.*LSA.*Size.*LstAddr.*LstSize.*E.*" \
|
|
"info spu proxydma"
|
|
|
|
# Event tests.
|
|
c_to "Marker Event"
|
|
gdb_test "info spu event" \
|
|
"Event Status 0x00000000.*Event Mask 0x00000000.*" \
|
|
"empty event status"
|
|
|
|
# MFC_MULTI_SRC_SYNC_EVENT.
|
|
gdb_test "next" "" "next"
|
|
gdb_test "info spu event" \
|
|
"Event Status 0x00000000.*Event Mask 0x00001000.*" \
|
|
"event mask 0x1000"
|
|
# MFC_PRIV_ATTN_EVENT.
|
|
gdb_test "next" "" "next"
|
|
gdb_test "info spu event" \
|
|
"Event Status 0x00000000.*Event Mask 0x00000800.*" \
|
|
"event mask 0x0800"
|
|
# MFC_LLR_LOST_EVENT.
|
|
gdb_test "next" "" "next"
|
|
gdb_test "info spu event" \
|
|
"Event Status 0x00000000.*Event Mask 0x00000400.*" \
|
|
"event mask 0x0400"
|
|
# MFC_SIGNAL_NOTIFY_1_EVENT.
|
|
gdb_test "next" "" "next"
|
|
gdb_test "info spu event" \
|
|
"Event Status 0x00000000.*Event Mask 0x00000200.*" \
|
|
"event mask 0x0200"
|
|
# MFC_SIGNAL_NOTIFY_2_EVENT.
|
|
gdb_test "next" "" "next"
|
|
gdb_test "info spu event" \
|
|
"Event Status 0x00000000.*Event Mask 0x00000100.*" \
|
|
"event mask 0x0100"
|
|
# MFC_OUT_MBOX_AVAILABLE_EVENT.
|
|
gdb_test "next" "" "next"
|
|
gdb_test "info spu event" \
|
|
"Event Status 0x00000000.*Event Mask 0x00000080.*" \
|
|
"event mask 0x0080"
|
|
# MFC_OUT_INTR_MBOX_AVAILABLE_EVENT.
|
|
gdb_test "next" "" "next"
|
|
gdb_test "info spu event" \
|
|
"Event Status 0x00000000.*Event Mask 0x00000040.*" \
|
|
"event mask 0x0040"
|
|
# MFC_DECREMENTER_EVENT.
|
|
gdb_test "next" "" "next"
|
|
gdb_test "info spu event" \
|
|
"Event Status 0x00000000.*Event Mask 0x00000020.*" \
|
|
"event mask 0x0020"
|
|
# MFC_IN_MBOX_AVAILABLE_EVENT.
|
|
gdb_test "next" "" "next"
|
|
gdb_test "info spu event" \
|
|
"Event Status 0x00000000.*Event Mask 0x00000010.*" \
|
|
"event mask 0x0010"
|
|
# MFC_COMMAND_QUEUE_AVAILABLE_EVENT.
|
|
gdb_test "next" "" "next"
|
|
gdb_test "info spu event" \
|
|
"Event Status 0x00000000.*Event Mask 0x00000008.*" \
|
|
"event mask 0x0008"
|
|
# MFC_LIST_STALL_NOTIFY_EVENT.
|
|
gdb_test "next" "" "next"
|
|
gdb_test "info spu event" \
|
|
"Event Status 0x00000000.*Event Mask 0x00000002.*" \
|
|
"event mask 0x0002"
|
|
# MFC_TAG_STATUS_UPDATE_EVENT.
|
|
gdb_test "next" "" "next"
|
|
gdb_test "info spu event" \
|
|
"Event Status 0x00000000.*Event Mask 0x00000001.*" \
|
|
"event mask 0x0001"
|
|
|
|
|
|
# DMA tests.
|
|
# 'info spu dma' should be empty.
|
|
c_to "Marker DMA"
|
|
gdb_test "info spu dma" \
|
|
"Tag-Group Status.*0x00000000.*Tag-Group Mask.*0x00000000.*Stall-and-Notify.*0x00000000.*Atomic Cmd Status.*0x00000000.*Opcode.*Tag.*TId.*RId.*EA.*LSA.*Size.*LstAddr.*LstSize.*E.*0.*0.*0.*0.*0x00000 0x00000.*" \
|
|
"info spu dma (empty)"
|
|
|
|
# 'info spu dma' should be filled with some data.
|
|
c_to "Marker DMAWait"
|
|
gdb_test "next" "" "next"
|
|
gdb_test "info spu dma" \
|
|
"Tag-Group Status.*0x00000000.*Tag-Group Mask.*0x00000020.*Stall-and-Notify.*0x00000000.*Atomic Cmd Status.*0x00000000.*Opcode.*Tag.*TId.*RId.*EA.*LSA.*Size.*LstAddr.*LstSize.*E.*getl.*putllc.*get.*mfcsync.*get.*0.*0.*0.*0.*0x00000 0x00000.*" \
|
|
"info spu dma (non-empty)"
|
|
gdb_test "finish" "" "finish"
|
|
|
|
# Mailbox Test
|
|
# 'info spu mailbox' should be empty.
|
|
c_to "Marker Mbox"
|
|
gdb_test "info spu mailbox" \
|
|
"SPU Outbound Mailbox.*0xc0000000.*SPU Outbound Interrupt Mailbox.*0xc0000000.*" \
|
|
"info spu mailbox"
|
|
|
|
# 'info spu mailbox' should now contain data.
|
|
c_to "Marker MboxEnd"
|
|
gdb_test "info spu mailbox" \
|
|
"SPU Outbound Mailbox.*0x12345678.*SPU Outbound Interrupt Mailbox.*0x12345678.*" \
|
|
"info spu mailbox"
|
|
|
|
# Signal Test
|
|
# 'info spu signal'.
|
|
c_to "Marker Signal"
|
|
gdb_test "info spu signal" \
|
|
"Signal 1 not pending.*\(Type.*\).*Signal 2 not pending.*\(Type.*\).*" \
|
|
"info spu signal"
|
|
|
|
# 'info spu signal' with signal1 pending.
|
|
c_to "Marker Signal1"
|
|
gdb_test "info spu signal" \
|
|
"Signal 1 control word 0x801c0800.*Signal 2 not pending.*\(Type.*\).*" \
|
|
"info spu signal"
|
|
|
|
# 'info spu signal' with signal1 and signal2 pending.
|
|
c_to "Marker Signal2"
|
|
gdb_test "info spu signal" \
|
|
"Signal 1 control word 0x801c0800.*Signal 2 control word 0x801c0800.*" \
|
|
"info spu signal"
|
|
|
|
# Read signal1. Only signal2 is pending.
|
|
c_to "Marker SignalRead"
|
|
gdb_test "info spu signal" \
|
|
"Signal 1 not pending.*Signal 2 control word 0x801c0800.*" \
|
|
"info spu signal"
|
|
|
|
|
|
gdb_exit
|
|
|
|
return 0
|