Browse Source
Several C test-cases exposed the bug, but let's have one for people who test using just the assembler and linker. * asm/endmem1.ms: New test.gdb-12-branch
committed by
Hans-Peter Nilsson
1 changed files with 47 additions and 0 deletions
@ -0,0 +1,47 @@ |
|||
# mach: crisv3 crisv8 crisv10 crisv32 |
|||
|
|||
; Check that the simulator and the program agrees on the |
|||
; value of endmem; the base point for further allocations. |
|||
|
|||
.include "testutils.inc" |
|||
start |
|||
|
|||
; First, get the end of memory by calling brk with 0 to get |
|||
; the current value. |
|||
clear.d $r10 |
|||
movu.w 0x2d,$r9 |
|||
break 13 |
|||
|
|||
; Get one more 8192-byte page. |
|||
addu.w 8192,$r10 |
|||
|
|||
; Save it in a (call- and) syscall-saved register. |
|||
move.d $r10,$r0 |
|||
|
|||
; Call brk again to raise the value. |
|||
movu.w 0x2d,$r9 |
|||
break 13 |
|||
|
|||
; If the simulator messed up internally, it'd have exited |
|||
; with an error at the brk call. But, let's sanity-check |
|||
; the return-value: it should be the same as the input and |
|||
; the allocated memory should be accessible. |
|||
cmp.d $r10,$r0 |
|||
beq 0f |
|||
nop |
|||
|
|||
1: |
|||
fail |
|||
|
|||
0: |
|||
; Check that we can write and read the last address on that |
|||
; page. |
|||
subq 4,$r10 |
|||
move.d 0xbad1d101,$r12 |
|||
move.d $r12,[$r10] |
|||
move.d [$r10],$r11 |
|||
cmp.d $r11,$r12 |
|||
bne 1b |
|||
nop |
|||
|
|||
pass |
|||
Loading…
Reference in new issue