syscall: add access hw stack tests
This commit is contained in:
parent
b505304e47
commit
3fee26ddd1
@ -5,6 +5,7 @@
|
|||||||
#define NR_write 4
|
#define NR_write 4
|
||||||
#define NR_rt_sigaction 174
|
#define NR_rt_sigaction 174
|
||||||
#define NR_rt_sigreturn 173
|
#define NR_rt_sigreturn 173
|
||||||
|
#define NR_access_hw_stacks 254
|
||||||
|
|
||||||
#define SCRATCH_REG0 %g23
|
#define SCRATCH_REG0 %g23
|
||||||
#define SCRATCH_REG1 %g22
|
#define SCRATCH_REG1 %g22
|
||||||
@ -165,6 +166,38 @@
|
|||||||
}
|
}
|
||||||
.endm
|
.endm
|
||||||
|
|
||||||
|
#define READ_CHAIN_STACK 0
|
||||||
|
#define READ_PROCEDURE_STACK 1
|
||||||
|
#define WRITE_PROCEDURE_STACK 2
|
||||||
|
#define GET_CHAIN_STACK_OFFSET 3
|
||||||
|
#define GET_CHAIN_STACK_SIZE 4
|
||||||
|
#define GET_PROCEDURE_STACK_SIZE 5
|
||||||
|
#define READ_CHAIN_STACK_EX 6
|
||||||
|
#define READ_PROCEDURE_STACK_EX 7
|
||||||
|
#define WRITE_PROCEDURE_STACK_EX 8
|
||||||
|
#define WRITE_CHAIN_STACK_EX 9
|
||||||
|
|
||||||
|
.macro sys_access_hw_stacks mode, frame_addr=0, buf_addr=0, buf_size=0, size_addr=0
|
||||||
|
{
|
||||||
|
setwd wsz=8, nfx=1
|
||||||
|
sdisp %ctpr1, 0x3
|
||||||
|
}
|
||||||
|
{
|
||||||
|
addd,0 0, NR_access_hw_stacks, %r8
|
||||||
|
addd,1 0, \mode, %r9
|
||||||
|
}
|
||||||
|
{
|
||||||
|
nop 2
|
||||||
|
addd,0 0, \frame_addr, %r10
|
||||||
|
addd,1 0, \buf_addr, %r11
|
||||||
|
}
|
||||||
|
{
|
||||||
|
addd,0 0, \buf_size, %r12
|
||||||
|
addd,1 0, \size_addr, %r13
|
||||||
|
call %ctpr1, wbs=4
|
||||||
|
}
|
||||||
|
.endm
|
||||||
|
|
||||||
#define assert_(PRED, MSG) \
|
#define assert_(PRED, MSG) \
|
||||||
ibranch local(ok) ? PRED; \
|
ibranch local(ok) ? PRED; \
|
||||||
write("assert at " __FILE__ ":" str(__LINE__) ":\n" \
|
write("assert at " __FILE__ ":" str(__LINE__) ":\n" \
|
||||||
@ -225,8 +258,11 @@
|
|||||||
set_exit_code 1; \
|
set_exit_code 1; \
|
||||||
local(ok):
|
local(ok):
|
||||||
|
|
||||||
#define assert_ne_i32(LEFT, RIGHT, MSG) assert_ne(cmpesb, LEFT, RIGHT, MSG)
|
#define assert_ne_i32(LEFT, RIGHT) assert_ne(cmpesb, LEFT, RIGHT, "")
|
||||||
#define assert_ne_i64(LEFT, RIGHT, MSG) assert_ne(cmpedb, LEFT, RIGHT, MSG)
|
#define assert_ne_i64(LEFT, RIGHT) assert_ne(cmpedb, LEFT, RIGHT, "")
|
||||||
|
|
||||||
|
#define assert_ne_i32m(LEFT, RIGHT, MSG) assert_ne(cmpesb, LEFT, RIGHT, MSG)
|
||||||
|
#define assert_ne_i64m(LEFT, RIGHT, MSG) assert_ne(cmpedb, LEFT, RIGHT, MSG)
|
||||||
|
|
||||||
#define test_helper(OP, CMP, S1, S2, EXPECTED) \
|
#define test_helper(OP, CMP, S1, S2, EXPECTED) \
|
||||||
{ \
|
{ \
|
||||||
|
@ -164,6 +164,14 @@ asm_tests = {
|
|||||||
'dam-1': {},
|
'dam-1': {},
|
||||||
'dam-2': {},
|
'dam-2': {},
|
||||||
},
|
},
|
||||||
|
'syscall': {
|
||||||
|
'get-ps-size-1': {},
|
||||||
|
'get-pcs-size-1': {},
|
||||||
|
'get-pcs-offset-1': {},
|
||||||
|
'read-ps-ex-1': {},
|
||||||
|
'read-ps-ex-unaligned-1': { 'should_fail': true },
|
||||||
|
'write-ps-ex-1': {},
|
||||||
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
foreach suite, tests : asm_tests
|
foreach suite, tests : asm_tests
|
||||||
|
22
tests/asm/syscall/get-pcs-offset-1.S
Normal file
22
tests/asm/syscall/get-pcs-offset-1.S
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
#include "test_start.S"
|
||||||
|
|
||||||
|
setwd wsz=8, nfx=1
|
||||||
|
rrd,0 %pcsp.lo, %g16
|
||||||
|
rrd,0 %pcsp.hi, %g17
|
||||||
|
{
|
||||||
|
andd,0 %g16, (1ULL << 48) - 1, %g16
|
||||||
|
andd,1 %g17, (1ULL << 32) - 1, %g17
|
||||||
|
}
|
||||||
|
addd,0 %g16, %g17, %g16
|
||||||
|
std,2 %g16, [ frame ]
|
||||||
|
sys_access_hw_stacks GET_CHAIN_STACK_OFFSET, frame, 0, 0, offset
|
||||||
|
assert_eq_i64(%r8, 0)
|
||||||
|
|
||||||
|
#include "test_end.S"
|
||||||
|
|
||||||
|
.data
|
||||||
|
.balign 8
|
||||||
|
frame:
|
||||||
|
.quad 0
|
||||||
|
offset:
|
||||||
|
.quad 0
|
15
tests/asm/syscall/get-pcs-size-1.S
Normal file
15
tests/asm/syscall/get-pcs-size-1.S
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
#include "test_start.S"
|
||||||
|
|
||||||
|
setwd wsz=8, nfx=1
|
||||||
|
sys_access_hw_stacks GET_CHAIN_STACK_SIZE, 0, 0, 0, size
|
||||||
|
assert_eq_i64(%r8, 0)
|
||||||
|
ldd,0 [ size ], %g16
|
||||||
|
assert_ne_i64(%g16, 0)
|
||||||
|
|
||||||
|
#include "test_end.S"
|
||||||
|
|
||||||
|
.data
|
||||||
|
.balign 8
|
||||||
|
.byte 0
|
||||||
|
size:
|
||||||
|
.quad 0
|
15
tests/asm/syscall/get-ps-size-1.S
Normal file
15
tests/asm/syscall/get-ps-size-1.S
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
#include "test_start.S"
|
||||||
|
|
||||||
|
setwd wsz=8, nfx=1
|
||||||
|
sys_access_hw_stacks GET_PROCEDURE_STACK_SIZE, 0, 0, 0, size
|
||||||
|
assert_eq_i64(%r8, 0)
|
||||||
|
ldd,0 [ size ], %g16
|
||||||
|
assert_ne_i64(%g16, 0)
|
||||||
|
|
||||||
|
#include "test_end.S"
|
||||||
|
|
||||||
|
.data
|
||||||
|
.balign 8
|
||||||
|
.byte 0
|
||||||
|
size:
|
||||||
|
.quad 0
|
46
tests/asm/syscall/read-ps-ex-1.S
Normal file
46
tests/asm/syscall/read-ps-ex-1.S
Normal file
@ -0,0 +1,46 @@
|
|||||||
|
#include "test_start.S"
|
||||||
|
|
||||||
|
{
|
||||||
|
setwd wsz=8, nfx=1
|
||||||
|
disp %ctpr1, 0f
|
||||||
|
}
|
||||||
|
{
|
||||||
|
addd,0 0, 0xdeadbeef, %r8
|
||||||
|
addd,1 0, 8, %r9
|
||||||
|
call %ctpr1, wbs=4
|
||||||
|
}
|
||||||
|
|
||||||
|
#include "test_end.S"
|
||||||
|
|
||||||
|
0:
|
||||||
|
{
|
||||||
|
setwd wsz=8, nfx=1
|
||||||
|
disp %ctpr1, 0b
|
||||||
|
}
|
||||||
|
{
|
||||||
|
cmpedb,0 %r1, 0, %pred0
|
||||||
|
addd,1 0, 0xdeadbeef, %r8
|
||||||
|
subd,2 %r1, 1, %r9
|
||||||
|
}
|
||||||
|
call %ctpr1, wbs=4 ? ~%pred0
|
||||||
|
ibranch 0f ? ~%pred0
|
||||||
|
|
||||||
|
sys_access_hw_stacks GET_PROCEDURE_STACK_SIZE, 0, 0, 0, size
|
||||||
|
ldd,0 [ size ], %g16
|
||||||
|
subd,0 %g16, 128, %g16
|
||||||
|
std,2 %g16, [ frame ]
|
||||||
|
sys_access_hw_stacks READ_PROCEDURE_STACK_EX, frame, buf, 128
|
||||||
|
ldd,0 0, buf, %g16
|
||||||
|
assert_eq_i64(%g16, 0xdeadbeef)
|
||||||
|
0:
|
||||||
|
return %ctpr3
|
||||||
|
ct %ctpr3
|
||||||
|
|
||||||
|
.data
|
||||||
|
.balign 8
|
||||||
|
buf:
|
||||||
|
.fill 64, 1, 0
|
||||||
|
size:
|
||||||
|
.quad 0
|
||||||
|
frame:
|
||||||
|
.quad 0
|
47
tests/asm/syscall/read-ps-ex-unaligned-1.S
Normal file
47
tests/asm/syscall/read-ps-ex-unaligned-1.S
Normal file
@ -0,0 +1,47 @@
|
|||||||
|
#include "test_start.S"
|
||||||
|
|
||||||
|
{
|
||||||
|
setwd wsz=8, nfx=1
|
||||||
|
disp %ctpr1, 0f
|
||||||
|
}
|
||||||
|
{
|
||||||
|
addd,0 0, 0xdeadbeef, %r8
|
||||||
|
addd,1 0, 8, %r9
|
||||||
|
call %ctpr1, wbs=4
|
||||||
|
}
|
||||||
|
|
||||||
|
#include "test_end.S"
|
||||||
|
|
||||||
|
0:
|
||||||
|
{
|
||||||
|
setwd wsz=8, nfx=1
|
||||||
|
disp %ctpr1, 0b
|
||||||
|
}
|
||||||
|
{
|
||||||
|
cmpedb,0 %r1, 0, %pred0
|
||||||
|
addd,1 0, 0xdeadbeef, %r8
|
||||||
|
subd,2 %r1, 1, %r9
|
||||||
|
}
|
||||||
|
call %ctpr1, wbs=4 ? ~%pred0
|
||||||
|
ibranch 0f ? ~%pred0
|
||||||
|
|
||||||
|
sys_access_hw_stacks GET_PROCEDURE_STACK_SIZE, 0, 0, 0, size
|
||||||
|
ldd,0 [ size ], %g16
|
||||||
|
subd,0 %g16, 128, %g16
|
||||||
|
std,2 %g16, [ frame ]
|
||||||
|
sys_access_hw_stacks READ_PROCEDURE_STACK_EX, frame, buf, 128
|
||||||
|
ldd,0 0, buf, %g16
|
||||||
|
assert_eq_i64(%g16, 0xdeadbeef)
|
||||||
|
0:
|
||||||
|
return %ctpr3
|
||||||
|
ct %ctpr3
|
||||||
|
|
||||||
|
.data
|
||||||
|
.balign 8
|
||||||
|
.byte 0
|
||||||
|
buf:
|
||||||
|
.fill 64, 1, 0
|
||||||
|
size:
|
||||||
|
.quad 0
|
||||||
|
frame:
|
||||||
|
.quad 0
|
33
tests/asm/syscall/write-ps-ex-1.S
Normal file
33
tests/asm/syscall/write-ps-ex-1.S
Normal file
@ -0,0 +1,33 @@
|
|||||||
|
#include "test_start.S"
|
||||||
|
|
||||||
|
{
|
||||||
|
setwd wsz=8, nfx=1
|
||||||
|
disp %ctpr1, 0f
|
||||||
|
}
|
||||||
|
{
|
||||||
|
addd,0 0, 0, %r0
|
||||||
|
call %ctpr1, wbs=4
|
||||||
|
}
|
||||||
|
assert_eq_i64(%r0, 0xdeadbeef)
|
||||||
|
|
||||||
|
#include "test_end.S"
|
||||||
|
|
||||||
|
0:
|
||||||
|
setwd wsz=8, nfx=1
|
||||||
|
sys_access_hw_stacks GET_PROCEDURE_STACK_SIZE, 0, 0, 0, size
|
||||||
|
ldd,0 [ size ], %g16
|
||||||
|
subd,0 %g16, 256, %g16
|
||||||
|
std,2 %g16, [ frame ]
|
||||||
|
sys_access_hw_stacks WRITE_PROCEDURE_STACK_EX, frame, buf, 8
|
||||||
|
assert_eq_i64(%r8, 0)
|
||||||
|
return %ctpr3
|
||||||
|
ct %ctpr3
|
||||||
|
|
||||||
|
.data
|
||||||
|
.balign 8
|
||||||
|
buf:
|
||||||
|
.quad 0xdeadbeef
|
||||||
|
size:
|
||||||
|
.quad 0
|
||||||
|
frame:
|
||||||
|
.quad 0
|
Loading…
Reference in New Issue
Block a user