-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
This patch adds support for signal handling. The sigreturn is done via VDSO, introduced by a previous patch. The SA_RESTORER is still defined as it is required for 32-bit (compat) support but it is not to be used for 64-bit applications. Signed-off-by: Will Deacon <will.deacon@arm.com> Signed-off-by: Catalin Marinas <catalin.marinas@arm.com> Acked-by: Tony Lindgren <tony@atomide.com> Acked-by: Nicolas Pitre <nico@linaro.org> Acked-by: Olof Johansson <olof@lixom.net> Acked-by: Santosh Shilimkar <santosh.shilimkar@ti.com>
- Loading branch information
Catalin Marinas
committed
Sep 17, 2012
1 parent
9031fef
commit 2c020ed
Showing
5 changed files
with
583 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,69 @@ | ||
/* | ||
* Copyright (C) 2012 ARM Ltd. | ||
* | ||
* This program is free software; you can redistribute it and/or modify | ||
* it under the terms of the GNU General Public License version 2 as | ||
* published by the Free Software Foundation. | ||
* | ||
* This program is distributed in the hope that it will be useful, | ||
* but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
* GNU General Public License for more details. | ||
* | ||
* You should have received a copy of the GNU General Public License | ||
* along with this program. If not, see <http://www.gnu.org/licenses/>. | ||
*/ | ||
#ifndef __ASM_SIGCONTEXT_H | ||
#define __ASM_SIGCONTEXT_H | ||
|
||
#include <linux/types.h> | ||
|
||
/* | ||
* Signal context structure - contains all info to do with the state | ||
* before the signal handler was invoked. | ||
*/ | ||
struct sigcontext { | ||
__u64 fault_address; | ||
/* AArch64 registers */ | ||
__u64 regs[31]; | ||
__u64 sp; | ||
__u64 pc; | ||
__u64 pstate; | ||
/* 4K reserved for FP/SIMD state and future expansion */ | ||
__u8 __reserved[4096] __attribute__((__aligned__(16))); | ||
}; | ||
|
||
/* | ||
* Header to be used at the beginning of structures extending the user | ||
* context. Such structures must be placed after the rt_sigframe on the stack | ||
* and be 16-byte aligned. The last structure must be a dummy one with the | ||
* magic and size set to 0. | ||
*/ | ||
struct _aarch64_ctx { | ||
__u32 magic; | ||
__u32 size; | ||
}; | ||
|
||
#define FPSIMD_MAGIC 0x46508001 | ||
|
||
struct fpsimd_context { | ||
struct _aarch64_ctx head; | ||
__u32 fpsr; | ||
__u32 fpcr; | ||
__uint128_t vregs[32]; | ||
}; | ||
|
||
#ifdef __KERNEL__ | ||
/* | ||
* Auxiliary context saved in the sigcontext.__reserved array. Not exported to | ||
* user space as it will change with the addition of new context. User space | ||
* should check the magic/size information. | ||
*/ | ||
struct aux_context { | ||
struct fpsimd_context fpsimd; | ||
/* additional context to be added before "end" */ | ||
struct _aarch64_ctx end; | ||
}; | ||
#endif | ||
|
||
#endif |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,23 @@ | ||
/* | ||
* Copyright (C) 2012 ARM Ltd. | ||
* | ||
* This program is free software; you can redistribute it and/or modify | ||
* it under the terms of the GNU General Public License version 2 as | ||
* published by the Free Software Foundation. | ||
* | ||
* This program is distributed in the hope that it will be useful, | ||
* but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
* GNU General Public License for more details. | ||
* | ||
* You should have received a copy of the GNU General Public License | ||
* along with this program. If not, see <http://www.gnu.org/licenses/>. | ||
*/ | ||
#ifndef __ASM_SIGINFO_H | ||
#define __ASM_SIGINFO_H | ||
|
||
#define __ARCH_SI_PREAMBLE_SIZE (4 * sizeof(int)) | ||
|
||
#include <asm-generic/siginfo.h> | ||
|
||
#endif |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,24 @@ | ||
/* | ||
* Copyright (C) 2012 ARM Ltd. | ||
* | ||
* This program is free software; you can redistribute it and/or modify | ||
* it under the terms of the GNU General Public License version 2 as | ||
* published by the Free Software Foundation. | ||
* | ||
* This program is distributed in the hope that it will be useful, | ||
* but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
* GNU General Public License for more details. | ||
* | ||
* You should have received a copy of the GNU General Public License | ||
* along with this program. If not, see <http://www.gnu.org/licenses/>. | ||
*/ | ||
#ifndef __ASM_SIGNAL_H | ||
#define __ASM_SIGNAL_H | ||
|
||
/* Required for AArch32 compatibility. */ | ||
#define SA_RESTORER 0x04000000 | ||
|
||
#include <asm-generic/signal.h> | ||
|
||
#endif |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,30 @@ | ||
/* | ||
* Copyright (C) 2012 ARM Ltd. | ||
* | ||
* This program is free software; you can redistribute it and/or modify | ||
* it under the terms of the GNU General Public License version 2 as | ||
* published by the Free Software Foundation. | ||
* | ||
* This program is distributed in the hope that it will be useful, | ||
* but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
* GNU General Public License for more details. | ||
* | ||
* You should have received a copy of the GNU General Public License | ||
* along with this program. If not, see <http://www.gnu.org/licenses/>. | ||
*/ | ||
#ifndef __ASM_UCONTEXT_H | ||
#define __ASM_UCONTEXT_H | ||
|
||
struct ucontext { | ||
unsigned long uc_flags; | ||
struct ucontext *uc_link; | ||
stack_t uc_stack; | ||
sigset_t uc_sigmask; | ||
/* glibc uses a 1024-bit sigset_t */ | ||
__u8 __unused[(1024 - sizeof(sigset_t)) / 8]; | ||
/* last for future expansion */ | ||
struct sigcontext uc_mcontext; | ||
}; | ||
|
||
#endif /* __ASM_UCONTEXT_H */ |
Oops, something went wrong.