arm64: expand register mapping between AArch32 and AArch64
authorMarc Zyngier <marc.zyngier@arm.com>
Wed, 3 Oct 2012 14:54:09 +0000 (15:54 +0100)
committerCatalin Marinas <catalin.marinas@arm.com>
Wed, 5 Dec 2012 11:23:50 +0000 (11:23 +0000)
The general purpose registers in AArch32 are mapped in an
architecturally defined manner into the AArch64 registers.

It allows the AArch32 registers of an application or a virtual
machine to be inspected by the OS or an hypervisor.

Signed-off-by: Marc Zyngier <marc.zyngier@arm.com>
Signed-off-by: Catalin Marinas <catalin.marinas@arm.com>
arch/arm64/include/asm/ptrace.h

index b04d340..de68a5a 100644 (file)
 
 /* sizeof(struct user) for AArch32 */
 #define COMPAT_USER_SZ 296
-/* AArch32 uses x13 as the stack pointer... */
+
+/* Architecturally defined mapping between AArch32 and AArch64 registers */
+#define compat_usr(x)  regs[(x)]
 #define compat_sp      regs[13]
-/* ... and x14 as the link register. */
 #define compat_lr      regs[14]
+#define compat_sp_hyp  regs[15]
+#define compat_sp_irq  regs[16]
+#define compat_lr_irq  regs[17]
+#define compat_sp_svc  regs[18]
+#define compat_lr_svc  regs[19]
+#define compat_sp_abt  regs[20]
+#define compat_lr_abt  regs[21]
+#define compat_sp_und  regs[22]
+#define compat_lr_und  regs[23]
+#define compat_r8_fiq  regs[24]
+#define compat_r9_fiq  regs[25]
+#define compat_r10_fiq regs[26]
+#define compat_r11_fiq regs[27]
+#define compat_r12_fiq regs[28]
+#define compat_sp_fiq  regs[29]
+#define compat_lr_fiq  regs[30]
 
 /*
  * This struct defines the way the registers are stored on the stack during an