-
Notifications
You must be signed in to change notification settings - Fork 17
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
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
Showing
2 changed files
with
68 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -8,3 +8,4 @@ QEMU_OPTS=-action panic=exit-failure -kernel | |
|
||
TESTS += unaligned-lowcore | ||
TESTS += bal | ||
TESTS += sam |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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 |