summaryrefslogtreecommitdiff
path: root/asm/src/stack_check.s
blob: 32ed1fa5217ee5f602768d511ab3e29f6e667c4f (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
	.include "asm/macros.inc"
	.include "constants/constants.inc"
	.syntax unified
	.text

	thumb_func_start fill_rq_stack
fill_rq_stack: // fill iqr and user stack with 'MCZ3'
	adr r0, pool
	ldm r0!, {r1, r2, r3}
loop1:
	subs r2, #4
	str r1, [r2]
	cmp r2, r3
	bgt loop1
	bx lr

// unused
// returns the maximum values reached by irq stack (r0) and usr stack (r1)
check_stack_threshold:
	adr r0, pool
	ldm r0!, {r1, r2, r3}
loop2:
	ldr r0, [r3]
	adds r3, #4
	cmp r0, r1 // cmp against magic
	beq loop2

	subs r2, #0xa0
loop3:
	ldr r0, [r2]
	adds r2, #4
	cmp r0, r1  // cmp against magic
	beq loop3

	subs r1, r2, #4
	subs r0, r3, #4
	bx lr

	.align 2, 0
pool:
	.byte '3, 'Z, 'C, 'M 	// r1
	.4byte irq_stack_begin  // r2
	.4byte usr_stack_top 	// r3