mirror of
https://github.com/edk2-porting/linux-next.git
synced 2024-12-23 20:53:53 +08:00
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>
32 lines
958 B
ArmAsm
32 lines
958 B
ArmAsm
#include <linux/linkage.h>
|
|
#include <asm/assembler.h>
|
|
#include "abort-macro.S"
|
|
/*
|
|
* Function: v5t_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(v5t_early_abort)
|
|
mrc p15, 0, r1, c5, c0, 0 @ get FSR
|
|
mrc p15, 0, r0, c6, c0, 0 @ get FAR
|
|
do_thumb_abort fsr=r1, pc=r2, psr=r3, tmp=r3
|
|
ldreq r3, [r2] @ read aborted ARM instruction
|
|
bic r1, r1, #1 << 11 @ clear bits 11 of FSR
|
|
do_ldrd_abort tmp=r2, insn=r3
|
|
tst r3, #1 << 20 @ check write
|
|
orreq r1, r1, #1 << 11
|
|
mov pc, lr
|