iBoot/arch/arm/cortex_hang.S

42 lines
911 B
ArmAsm

/*
* Copyright (C) 2009 Apple Inc. All rights reserved.
*
* This document is the property of Apple Inc.
* It is considered confidential and proprietary.
*
* This document may not be reproduced or transmitted in any form,
* in whole or in part, without the express written permission of
* Apple Inc.
*/
.text
.global _cortex_hang_start, _cortex_hang_ffe, _cortex_hang_end
.thumb
.syntax unified
// Believe it or not, without this, it does not fail
#define NOP mov r8,r8
// R0 holds the number of iterations we should run
// start this routine at a page boundary
_cortex_hang_start:
// save some registers and set aside a word
push {r4,r5,r6,r7,lr}
sub sp, #4
1:
cmp r0, #0
beq 1f
NOP // 0xff0
NOP // 0xff2
NOP // 0xff4
NOP // 0xff6
subs r0, #1 // 0xff8
str.w ip, [sp] // 0xffa
_cortex_hang_ffe:
bl 1b // 0xffe
1:
add sp, #4
pop {r4,r5,r6,r7,pc}
bx lr
_cortex_hang_end: