ARM: introduce svc_pt_regs structure
authorRussell King <rmk+kernel@armlinux.org.uk>
Fri, 13 May 2016 09:22:38 +0000 (10:22 +0100)
committerRussell King <rmk+kernel@armlinux.org.uk>
Wed, 22 Jun 2016 18:54:52 +0000 (19:54 +0100)
Since the privileged mode pt_regs are an extended version of the saved
userland pt_regs, introduce a new svc_pt_regs structure to describe this
layout.

Acked-by: Will Deacon <will.deacon@arm.com>
Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk>
arch/arm/include/asm/assembler.h
arch/arm/include/asm/ptrace.h
arch/arm/kernel/asm-offsets.c
arch/arm/kernel/entry-armv.S

index 60d9c54..4eaea21 100644 (file)
@@ -480,13 +480,13 @@ THUMB(    orr     \reg , \reg , #PSR_T_BIT        )
        .macro  uaccess_save, tmp
 #ifdef CONFIG_CPU_SW_DOMAIN_PAN
        mrc     p15, 0, \tmp, c3, c0, 0
-       str     \tmp, [sp, #PT_REGS_SIZE]
+       str     \tmp, [sp, #SVC_DACR]
 #endif
        .endm
 
        .macro  uaccess_restore
 #ifdef CONFIG_CPU_SW_DOMAIN_PAN
-       ldr     r0, [sp, #PT_REGS_SIZE]
+       ldr     r0, [sp, #SVC_DACR]
        mcr     p15, 0, r0, c3, c0, 0
 #endif
        .endm
index 51622ba..5194cf7 100644 (file)
 #include <uapi/asm/ptrace.h>
 
 #ifndef __ASSEMBLY__
+#include <linux/types.h>
+
 struct pt_regs {
        unsigned long uregs[18];
 };
 
+struct svc_pt_regs {
+       struct pt_regs regs;
+       u32 dacr;
+       u32 unused;
+};
+
 #define user_mode(regs)        \
        (((regs)->ARM_cpsr & 0xf) == 0)
 
index 2841c99..9a8ce34 100644 (file)
@@ -108,6 +108,8 @@ int main(void)
   DEFINE(S_PSR,                        offsetof(struct pt_regs, ARM_cpsr));
   DEFINE(S_OLD_R0,             offsetof(struct pt_regs, ARM_ORIG_r0));
   DEFINE(PT_REGS_SIZE,         sizeof(struct pt_regs));
+  DEFINE(SVC_DACR,             offsetof(struct svc_pt_regs, dacr));
+  DEFINE(SVC_REGS_SIZE,                sizeof(struct svc_pt_regs));
   BLANK();
 #ifdef CONFIG_CACHE_L2X0
   DEFINE(L2X0_R_PHY_BASE,      offsetof(struct l2x0_regs, phy_base));
index a6cb019..0d6f541 100644 (file)
@@ -152,7 +152,7 @@ ENDPROC(__und_invalid)
        .macro  svc_entry, stack_hole=0, trace=1, uaccess=1
  UNWIND(.fnstart               )
  UNWIND(.save {r0 - pc}                )
-       sub     sp, sp, #(PT_REGS_SIZE + 8 + \stack_hole - 4)
+       sub     sp, sp, #(SVC_REGS_SIZE + \stack_hole - 4)
 #ifdef CONFIG_THUMB2_KERNEL
  SPFIX(        str     r0, [sp]        )       @ temporarily saved
  SPFIX(        mov     r0, sp          )
@@ -167,7 +167,7 @@ ENDPROC(__und_invalid)
        ldmia   r0, {r3 - r5}
        add     r7, sp, #S_SP - 4       @ here for interlock avoidance
        mov     r6, #-1                 @  ""  ""      ""       ""
-       add     r2, sp, #(PT_REGS_SIZE + 8 + \stack_hole - 4)
+       add     r2, sp, #(SVC_REGS_SIZE + \stack_hole - 4)
  SPFIX(        addeq   r2, r2, #4      )
        str     r3, [sp, #-4]!          @ save the "real" r0 copied
                                        @ from the exception stack