Skip to content

Commit

Permalink
tests/tcg/s390x: Add sam.S
Browse files Browse the repository at this point in the history
Add a small test to prevent regressions.

Signed-off-by: Ilya Leoshkevich <[email protected]>
Signed-off-by: Richard Henderson <[email protected]>
Message-Id: <[email protected]>
Message-Id: <[email protected]>
Signed-off-by: Thomas Huth <[email protected]>
  • Loading branch information
iii-i authored and huth committed Feb 27, 2023
1 parent c78d926 commit c8db90b
Show file tree
Hide file tree
Showing 2 changed files with 68 additions and 0 deletions.
1 change: 1 addition & 0 deletions tests/tcg/s390x/Makefile.softmmu-target
Original file line number Diff line number Diff line change
Expand Up @@ -8,3 +8,4 @@ QEMU_OPTS=-action panic=exit-failure -kernel

TESTS += unaligned-lowcore
TESTS += bal
TESTS += sam
67 changes: 67 additions & 0 deletions tests/tcg/s390x/sam.S
Original file line number Diff line number Diff line change
@@ -0,0 +1,67 @@
/* DAT on, home-space mode, 64-bit mode */
#define DAT_PSWM 0x400c00180000000
#define VIRTUAL_BASE 0x123456789abcd000

.org 0x8e
program_interruption_code:
.org 0x150
program_old_psw:
.org 0x1d0 /* program new PSW */
.quad 0,pgm_handler
.org 0x200 /* lowcore padding */

.globl _start
_start:
lctlg %c13,%c13,hasce
lpswe dat_psw
start_dat:
sam24
sam24_suppressed:
/* sam24 should fail */
fail:
basr %r12,%r0
lpswe failure_psw-.(%r12)
pgm_handler:
chhsi program_interruption_code,6 /* specification exception? */
jne fail
clc suppressed_psw(16),program_old_psw /* correct location? */
jne fail
lpswe success_psw

.align 8
dat_psw:
.quad DAT_PSWM,VIRTUAL_BASE+start_dat
suppressed_psw:
.quad DAT_PSWM,VIRTUAL_BASE+sam24_suppressed
success_psw:
.quad 0x2000000000000,0xfff /* see is_special_wait_psw() */
failure_psw:
.quad 0x2000000000000,0 /* disabled wait */
hasce:
/* DT = 0b11 (region-first-table), TL = 3 (2k entries) */
.quad region_first_table + (3 << 2) + 3
.align 0x1000
region_first_table:
.org region_first_table + ((VIRTUAL_BASE >> 53) & 0x7ff) * 8
/* TT = 0b11 (region-first-table), TL = 3 (2k entries) */
.quad region_second_table + (3 << 2) + 3
.org region_first_table + 0x800 * 8
region_second_table:
.org region_second_table + ((VIRTUAL_BASE >> 42) & 0x7ff) * 8
/* TT = 0b10 (region-second-table), TL = 3 (2k entries) */
.quad region_third_table + (2 << 2) + 3
.org region_second_table + 0x800 * 8
region_third_table:
.org region_third_table + ((VIRTUAL_BASE >> 31) & 0x7ff) * 8
/* TT = 0b01 (region-third-table), TL = 3 (2k entries) */
.quad segment_table + (1 << 2) + 3
.org region_third_table + 0x800 * 8
segment_table:
.org segment_table + ((VIRTUAL_BASE >> 20) & 0x7ff) * 8
/* TT = 0b00 (segment-table) */
.quad page_table
.org segment_table + 0x800 * 8
page_table:
.org page_table + ((VIRTUAL_BASE >> 12) & 0xff) * 8
.quad 0
.org page_table + 0x100 * 8

0 comments on commit c8db90b

Please sign in to comment.