summaryrefslogtreecommitdiff
path: root/arch/arm/include/asm/user.h
diff options
context:
space:
mode:
authorImre Deak <imre.deak@nokia.com>2010-04-11 15:58:27 +0100
committerRussell King <rmk+kernel@arm.linux.org.uk>2010-04-14 11:11:30 +0100
commit82c6f5a5b3e91ef4d2fb8725de4b8cf7affd4d61 (patch)
tree1f077be392f88b7b8355960b882ffbfdc3e6bab6 /arch/arm/include/asm/user.h
parent5c5cac63851f347d8308d69f1892c4af51d7c1a4 (diff)
ARM: 6051/1: VFP: preserve the HW context when calling signal handlers
From: Imre Deak <imre.deak@nokia.com> Signal handlers can use floating point, so prevent them to corrupt the main thread's VFP context. So far there were two signal stack frame formats defined based on the VFP implementation, but the user struct used for ptrace covers all posibilities, so use it for the signal stack too. Introduce also a new user struct for VFP exception registers. In this too fields not relevant to the current VFP architecture are ignored. Support to save / restore the exception registers was added by Will Deacon. Signed-off-by: Imre Deak <imre.deak@nokia.com> Signed-off-by: Will Deacon <will.deacon@arm.com> Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
Diffstat (limited to 'arch/arm/include/asm/user.h')
-rw-r--r--arch/arm/include/asm/user.h12
1 files changed, 11 insertions, 1 deletions
diff --git a/arch/arm/include/asm/user.h b/arch/arm/include/asm/user.h
index df95e050f9dd..05ac4b06876a 100644
--- a/arch/arm/include/asm/user.h
+++ b/arch/arm/include/asm/user.h
@@ -83,11 +83,21 @@ struct user{
/*
* User specific VFP registers. If only VFPv2 is present, registers 16 to 31
- * are ignored by the ptrace system call.
+ * are ignored by the ptrace system call and the signal handler.
*/
struct user_vfp {
unsigned long long fpregs[32];
unsigned long fpscr;
};
+/*
+ * VFP exception registers exposed to user space during signal delivery.
+ * Fields not relavant to the current VFP architecture are ignored.
+ */
+struct user_vfp_exc {
+ unsigned long fpexc;
+ unsigned long fpinst;
+ unsigned long fpinst2;
+};
+
#endif /* _ARM_USER_H */