29 lines
		
	
	
	
		
			549 B
		
	
	
	
		
			ArmAsm
		
	
	
	
	
	
			
		
		
	
	
			29 lines
		
	
	
	
		
			549 B
		
	
	
	
		
			ArmAsm
		
	
	
	
	
	
// =================================================
 | 
						|
// chkstk.s
 | 
						|
 | 
						|
.text
 | 
						|
.globl __chkstk
 | 
						|
 | 
						|
__chkstk:
 | 
						|
	xchg    (%esp), %ebp   // store ebp, get ret.addr
 | 
						|
	push    %ebp           // push ret.addr
 | 
						|
	lea     4(%esp), %ebp  // setup frame ptr
 | 
						|
	push    %ecx           // save ecx
 | 
						|
	mov     %ebp, %ecx
 | 
						|
P0:
 | 
						|
	sub     $4096,%ecx
 | 
						|
	test    %eax,(%ecx)
 | 
						|
	sub     $4096,%eax
 | 
						|
	cmp     $4096,%eax
 | 
						|
	jge     P0
 | 
						|
 | 
						|
	sub     %eax,%ecx
 | 
						|
	mov     %esp,%eax
 | 
						|
	test    %eax,(%ecx)
 | 
						|
	mov     %ecx,%esp
 | 
						|
 | 
						|
	mov     (%eax),%ecx     // restore ecx
 | 
						|
	mov     4(%eax),%eax
 | 
						|
	push    %eax
 | 
						|
	ret
 | 
						|
 |