forked from luck/tmp_suning_uos_patched
be020f8618
Require all callers of abort macros to specify the registers to be used. This improves the documentation at the callsites as to which registers are being used by this assembly code. Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
36 lines
1.0 KiB
ArmAsm
36 lines
1.0 KiB
ArmAsm
#include <linux/linkage.h>
|
|
#include <asm/assembler.h>
|
|
#include "abort-macro.S"
|
|
/*
|
|
* Function: v5tj_early_abort
|
|
*
|
|
* Params : r2 = address of aborted instruction
|
|
* : r3 = saved SPSR
|
|
*
|
|
* Returns : r0 = address of abort
|
|
* : r1 = FSR, bit 11 = write
|
|
* : r2-r8 = corrupted
|
|
* : r9 = preserved
|
|
* : sp = pointer to registers
|
|
*
|
|
* Purpose : obtain information about current aborted instruction.
|
|
* Note: we read user space. This means we might cause a data
|
|
* abort here if the I-TLB and D-TLB aren't seeing the same
|
|
* picture. Unfortunately, this does happen. We live with it.
|
|
*/
|
|
.align 5
|
|
ENTRY(v5tj_early_abort)
|
|
mrc p15, 0, r1, c5, c0, 0 @ get FSR
|
|
mrc p15, 0, r0, c6, c0, 0 @ get FAR
|
|
bic r1, r1, #1 << 11 | 1 << 10 @ clear bits 11 and 10 of FSR
|
|
tst r3, #PSR_J_BIT @ Java?
|
|
movne pc, lr
|
|
do_thumb_abort fsr=r1, pc=r2, psr=r3, tmp=r3
|
|
ldreq r3, [r2] @ read aborted ARM instruction
|
|
do_ldrd_abort tmp=r2, insn=r3
|
|
tst r3, #1 << 20 @ L = 0 -> write
|
|
orreq r1, r1, #1 << 11 @ yes.
|
|
mov pc, lr
|
|
|
|
|