blob: 87ab4e157997f9f335d461c501964750a52296d2 [file] [log] [blame]
#include <linux/init.h>
#include <linux/linkage.h>
#include <asm/assembler.h>
#include <asm/asm-offsets.h>
#include <asm/errno.h>
#include <asm/thread_info.h>
@ Bad Abort numbers
@ -----------------
#define BAD_PREFETCH 0
#define BAD_DATA 1
#define BAD_IRQ 3
@ Most of the stack format comes from struct pt_regs, but with
@ the addition of 8 bytes for storing syscall args 5 and 6.
@ This _must_ remain a multiple of 8 for EABI.
#define S_OFF 8
* The SWI code relies on the fact that R0 is at the bottom of the stack
* (due to slow/fast restore user regs).
#if S_R0 != 0
#error "Please fix"
.macro zero_fp
mov fp, #0
.macro get_thread_info, rd
mov \rd, sp, lsr #13
mov \rd, \rd, lsl #13
.macro alignment_trap, rtemp
ldr \rtemp, .LCcralign
ldr \rtemp, [\rtemp]
mcr p15, 0, \rtemp, c1, c0
* These are the registers used in the syscall handler, and allow us to
* have in theory up to 7 arguments to a function - r0 to r6.
* r7 is reserved for the system call number for thumb mode.
* Note that tbl == why is intentional.
* We must set at least "tsk" and "why" when calling ret_with_reschedule.
scno .req r7 @ syscall number
tbl .req r8 @ syscall table pointer
why .req r8 @ Linux syscall (!= 0)
tsk .req r9 @ current thread_info