Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
torvalds
GitHub Repository: torvalds/linux
Path: blob/master/arch/parisc/kernel/signal32.h
26288 views
1
/* SPDX-License-Identifier: GPL-2.0-or-later */
2
/*
3
* Copyright (C) 2001 Matthew Wilcox <willy at parisc-linux.org>
4
* Copyright (C) 2003 Carlos O'Donell <carlos at parisc-linux.org>
5
*/
6
#ifndef _PARISC64_KERNEL_SIGNAL32_H
7
#define _PARISC64_KERNEL_SIGNAL32_H
8
9
#include <linux/compat.h>
10
11
/* 32-bit ucontext as seen from an 64-bit kernel */
12
struct compat_ucontext {
13
compat_uint_t uc_flags;
14
compat_uptr_t uc_link;
15
compat_stack_t uc_stack; /* struct compat_sigaltstack (12 bytes)*/
16
/* FIXME: Pad out to get uc_mcontext to start at an 8-byte aligned boundary */
17
compat_uint_t pad[1];
18
struct compat_sigcontext uc_mcontext;
19
compat_sigset_t uc_sigmask; /* mask last for extensibility */
20
};
21
22
/* ELF32 signal handling */
23
24
/* In a deft move of uber-hackery, we decide to carry the top half of all
25
* 64-bit registers in a non-portable, non-ABI, hidden structure.
26
* Userspace can read the hidden structure if it *wants* but is never
27
* guaranteed to be in the same place. In fact the uc_sigmask from the
28
* ucontext_t structure may push the hidden register file downards
29
*/
30
struct compat_regfile {
31
/* Upper half of all the 64-bit registers that were truncated
32
on a copy to a 32-bit userspace */
33
compat_int_t rf_gr[32];
34
compat_int_t rf_iasq[2];
35
compat_int_t rf_iaoq[2];
36
compat_int_t rf_sar;
37
};
38
39
struct compat_rt_sigframe {
40
unsigned int tramp[2]; /* holds original return address */
41
compat_siginfo_t info;
42
struct compat_ucontext uc;
43
/* Hidden location of truncated registers, *must* be last. */
44
struct compat_regfile regs;
45
};
46
47
/*
48
* The 32-bit ABI wants at least 48 bytes for a function call frame:
49
* 16 bytes for arg0-arg3, and 32 bytes for magic (the only part of
50
* which Linux/parisc uses is sp-20 for the saved return pointer...)
51
* Then, the stack pointer must be rounded to a cache line (64 bytes).
52
*/
53
#define SIGFRAME32 64
54
#define FUNCTIONCALLFRAME32 48
55
#define PARISC_RT_SIGFRAME_SIZE32 (((sizeof(struct compat_rt_sigframe) + FUNCTIONCALLFRAME32) + SIGFRAME32) & -SIGFRAME32)
56
57
long restore_sigcontext32(struct compat_sigcontext __user *sc,
58
struct compat_regfile __user *rf,
59
struct pt_regs *regs);
60
long setup_sigcontext32(struct compat_sigcontext __user *sc,
61
struct compat_regfile __user *rf,
62
struct pt_regs *regs, int in_syscall);
63
64
#endif
65
66