mirror of
https://github.com/armbian/linux-cix.git
synced 2026-01-06 12:30:45 -08:00
Merge tag 'x86-entry-2020-03-30' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip
Pull x86 entry code updates from Thomas Gleixner:
- Convert the 32bit syscalls to be pt_regs based which removes the
requirement to push all 6 potential arguments onto the stack and
consolidates the interface with the 64bit variant
- The first small portion of the exception and syscall related entry
code consolidation which aims to address the recently discovered
issues vs. RCU, int3, NMI and some other exceptions which can
interrupt any context. The bulk of the changes is still work in
progress and aimed for 5.8.
- A few lockdep namespace cleanups which have been applied into this
branch to keep the prerequisites for the ongoing work confined.
* tag 'x86-entry-2020-03-30' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip: (35 commits)
x86/entry: Fix build error x86 with !CONFIG_POSIX_TIMERS
lockdep: Rename trace_{hard,soft}{irq_context,irqs_enabled}()
lockdep: Rename trace_softirqs_{on,off}()
lockdep: Rename trace_hardirq_{enter,exit}()
x86/entry: Rename ___preempt_schedule
x86: Remove unneeded includes
x86/entry: Drop asmlinkage from syscalls
x86/entry/32: Enable pt_regs based syscalls
x86/entry/32: Use IA32-specific wrappers for syscalls taking 64-bit arguments
x86/entry/32: Rename 32-bit specific syscalls
x86/entry/32: Clean up syscall_32.tbl
x86/entry: Remove ABI prefixes from functions in syscall tables
x86/entry/64: Add __SYSCALL_COMMON()
x86/entry: Remove syscall qualifier support
x86/entry/64: Remove ptregs qualifier from syscall table
x86/entry: Move max syscall number calculation to syscallhdr.sh
x86/entry/64: Split X32 syscall table into its own file
x86/entry/64: Move sys_ni_syscall stub to common.c
x86/entry/64: Use syscall wrappers for x32_rt_sigreturn
x86/entry: Refactor SYS_NI macros
...
This commit is contained in:
@@ -30,7 +30,6 @@ config X86_64
|
||||
select MODULES_USE_ELF_RELA
|
||||
select NEED_DMA_MAP_STATE
|
||||
select SWIOTLB
|
||||
select ARCH_HAS_SYSCALL_WRAPPER
|
||||
|
||||
config FORCE_DYNAMIC_FTRACE
|
||||
def_bool y
|
||||
@@ -79,6 +78,7 @@ config X86
|
||||
select ARCH_HAS_STRICT_KERNEL_RWX
|
||||
select ARCH_HAS_STRICT_MODULE_RWX
|
||||
select ARCH_HAS_SYNC_CORE_BEFORE_USERMODE
|
||||
select ARCH_HAS_SYSCALL_WRAPPER
|
||||
select ARCH_HAS_UBSAN_SANITIZE_ALL
|
||||
select ARCH_HAVE_NMI_SAFE_CMPXCHG
|
||||
select ARCH_MIGHT_HAVE_ACPI_PDC if ACPI
|
||||
|
||||
@@ -14,4 +14,5 @@ obj-y += vdso/
|
||||
obj-y += vsyscall/
|
||||
|
||||
obj-$(CONFIG_IA32_EMULATION) += entry_64_compat.o syscall_32.o
|
||||
obj-$(CONFIG_X86_X32_ABI) += syscall_x32.o
|
||||
|
||||
|
||||
@@ -333,20 +333,7 @@ static __always_inline void do_syscall_32_irqs_on(struct pt_regs *regs)
|
||||
|
||||
if (likely(nr < IA32_NR_syscalls)) {
|
||||
nr = array_index_nospec(nr, IA32_NR_syscalls);
|
||||
#ifdef CONFIG_IA32_EMULATION
|
||||
regs->ax = ia32_sys_call_table[nr](regs);
|
||||
#else
|
||||
/*
|
||||
* It's possible that a 32-bit syscall implementation
|
||||
* takes a 64-bit parameter but nonetheless assumes that
|
||||
* the high bits are zero. Make sure we zero-extend all
|
||||
* of the args.
|
||||
*/
|
||||
regs->ax = ia32_sys_call_table[nr](
|
||||
(unsigned int)regs->bx, (unsigned int)regs->cx,
|
||||
(unsigned int)regs->dx, (unsigned int)regs->si,
|
||||
(unsigned int)regs->di, (unsigned int)regs->bp);
|
||||
#endif /* CONFIG_IA32_EMULATION */
|
||||
}
|
||||
|
||||
syscall_return_slowpath(regs);
|
||||
@@ -438,3 +425,8 @@ __visible long do_fast_syscall_32(struct pt_regs *regs)
|
||||
#endif
|
||||
}
|
||||
#endif
|
||||
|
||||
SYSCALL_DEFINE0(ni_syscall)
|
||||
{
|
||||
return -ENOSYS;
|
||||
}
|
||||
|
||||
@@ -1088,10 +1088,10 @@ SYM_FUNC_START(entry_INT80_32)
|
||||
STACKLEAK_ERASE
|
||||
|
||||
restore_all:
|
||||
TRACE_IRQS_IRET
|
||||
TRACE_IRQS_ON
|
||||
SWITCH_TO_ENTRY_STACK
|
||||
CHECK_AND_APPLY_ESPFIX
|
||||
.Lrestore_nocheck:
|
||||
|
||||
/* Switch back to user CR3 */
|
||||
SWITCH_TO_USER_CR3 scratch_reg=%eax
|
||||
|
||||
@@ -1290,7 +1290,7 @@ SYM_CODE_END(simd_coprocessor_error)
|
||||
|
||||
SYM_CODE_START(device_not_available)
|
||||
ASM_CLAC
|
||||
pushl $-1 # mark this as an int
|
||||
pushl $0
|
||||
pushl $do_device_not_available
|
||||
jmp common_exception
|
||||
SYM_CODE_END(device_not_available)
|
||||
@@ -1365,7 +1365,7 @@ SYM_CODE_END(divide_error)
|
||||
SYM_CODE_START(machine_check)
|
||||
ASM_CLAC
|
||||
pushl $0
|
||||
pushl machine_check_vector
|
||||
pushl $do_mce
|
||||
jmp common_exception
|
||||
SYM_CODE_END(machine_check)
|
||||
#endif
|
||||
@@ -1531,7 +1531,7 @@ SYM_CODE_START(debug)
|
||||
* Entry from sysenter is now handled in common_exception
|
||||
*/
|
||||
ASM_CLAC
|
||||
pushl $-1 # mark this as an int
|
||||
pushl $0
|
||||
pushl $do_debug
|
||||
jmp common_exception
|
||||
SYM_CODE_END(debug)
|
||||
@@ -1682,18 +1682,13 @@ SYM_CODE_END(nmi)
|
||||
|
||||
SYM_CODE_START(int3)
|
||||
ASM_CLAC
|
||||
pushl $-1 # mark this as an int
|
||||
|
||||
SAVE_ALL switch_stacks=1
|
||||
ENCODE_FRAME_POINTER
|
||||
TRACE_IRQS_OFF
|
||||
xorl %edx, %edx # zero error code
|
||||
movl %esp, %eax # pt_regs pointer
|
||||
call do_int3
|
||||
jmp ret_from_exception
|
||||
pushl $0
|
||||
pushl $do_int3
|
||||
jmp common_exception
|
||||
SYM_CODE_END(int3)
|
||||
|
||||
SYM_CODE_START(general_protection)
|
||||
ASM_CLAC
|
||||
pushl $do_general_protection
|
||||
jmp common_exception
|
||||
SYM_CODE_END(general_protection)
|
||||
|
||||
@@ -174,7 +174,7 @@ SYM_INNER_LABEL(entry_SYSCALL_64_after_hwframe, SYM_L_GLOBAL)
|
||||
movq %rsp, %rsi
|
||||
call do_syscall_64 /* returns with IRQs disabled */
|
||||
|
||||
TRACE_IRQS_IRETQ /* we're about to change IF */
|
||||
TRACE_IRQS_ON /* return enables interrupts */
|
||||
|
||||
/*
|
||||
* Try to use SYSRET instead of IRET if we're returning to
|
||||
@@ -619,7 +619,7 @@ ret_from_intr:
|
||||
.Lretint_user:
|
||||
mov %rsp,%rdi
|
||||
call prepare_exit_to_usermode
|
||||
TRACE_IRQS_IRETQ
|
||||
TRACE_IRQS_ON
|
||||
|
||||
SYM_INNER_LABEL(swapgs_restore_regs_and_return_to_usermode, SYM_L_GLOBAL)
|
||||
#ifdef CONFIG_DEBUG_ENTRY
|
||||
|
||||
@@ -4,29 +4,22 @@
|
||||
#include <linux/linkage.h>
|
||||
#include <linux/sys.h>
|
||||
#include <linux/cache.h>
|
||||
#include <asm/asm-offsets.h>
|
||||
#include <linux/syscalls.h>
|
||||
#include <asm/unistd.h>
|
||||
#include <asm/syscall.h>
|
||||
|
||||
#ifdef CONFIG_IA32_EMULATION
|
||||
/* On X86_64, we use struct pt_regs * to pass parameters to syscalls */
|
||||
#define __SYSCALL_I386(nr, sym, qual) extern asmlinkage long sym(const struct pt_regs *);
|
||||
#define __sys_ni_syscall __ia32_sys_ni_syscall
|
||||
#else /* CONFIG_IA32_EMULATION */
|
||||
#define __SYSCALL_I386(nr, sym, qual) extern asmlinkage long sym(unsigned long, unsigned long, unsigned long, unsigned long, unsigned long, unsigned long);
|
||||
extern asmlinkage long sys_ni_syscall(unsigned long, unsigned long, unsigned long, unsigned long, unsigned long, unsigned long);
|
||||
#define __sys_ni_syscall sys_ni_syscall
|
||||
#endif /* CONFIG_IA32_EMULATION */
|
||||
#define __SYSCALL_I386(nr, sym) extern long __ia32_##sym(const struct pt_regs *);
|
||||
|
||||
#include <asm/syscalls_32.h>
|
||||
#undef __SYSCALL_I386
|
||||
|
||||
#define __SYSCALL_I386(nr, sym, qual) [nr] = sym,
|
||||
#define __SYSCALL_I386(nr, sym) [nr] = __ia32_##sym,
|
||||
|
||||
__visible const sys_call_ptr_t ia32_sys_call_table[__NR_syscall_compat_max+1] = {
|
||||
__visible const sys_call_ptr_t ia32_sys_call_table[__NR_ia32_syscall_max+1] = {
|
||||
/*
|
||||
* Smells like a compiler bug -- it doesn't work
|
||||
* when the & below is removed.
|
||||
*/
|
||||
[0 ... __NR_syscall_compat_max] = &__sys_ni_syscall,
|
||||
[0 ... __NR_ia32_syscall_max] = &__ia32_sys_ni_syscall,
|
||||
#include <asm/syscalls_32.h>
|
||||
};
|
||||
|
||||
@@ -5,24 +5,17 @@
|
||||
#include <linux/sys.h>
|
||||
#include <linux/cache.h>
|
||||
#include <linux/syscalls.h>
|
||||
#include <asm/asm-offsets.h>
|
||||
#include <asm/unistd.h>
|
||||
#include <asm/syscall.h>
|
||||
|
||||
extern asmlinkage long sys_ni_syscall(void);
|
||||
#define __SYSCALL_X32(nr, sym)
|
||||
#define __SYSCALL_COMMON(nr, sym) __SYSCALL_64(nr, sym)
|
||||
|
||||
SYSCALL_DEFINE0(ni_syscall)
|
||||
{
|
||||
return sys_ni_syscall();
|
||||
}
|
||||
|
||||
#define __SYSCALL_64(nr, sym, qual) extern asmlinkage long sym(const struct pt_regs *);
|
||||
#define __SYSCALL_X32(nr, sym, qual) __SYSCALL_64(nr, sym, qual)
|
||||
#define __SYSCALL_64(nr, sym) extern long __x64_##sym(const struct pt_regs *);
|
||||
#include <asm/syscalls_64.h>
|
||||
#undef __SYSCALL_64
|
||||
#undef __SYSCALL_X32
|
||||
|
||||
#define __SYSCALL_64(nr, sym, qual) [nr] = sym,
|
||||
#define __SYSCALL_X32(nr, sym, qual)
|
||||
#define __SYSCALL_64(nr, sym) [nr] = __x64_##sym,
|
||||
|
||||
asmlinkage const sys_call_ptr_t sys_call_table[__NR_syscall_max+1] = {
|
||||
/*
|
||||
@@ -32,25 +25,3 @@ asmlinkage const sys_call_ptr_t sys_call_table[__NR_syscall_max+1] = {
|
||||
[0 ... __NR_syscall_max] = &__x64_sys_ni_syscall,
|
||||
#include <asm/syscalls_64.h>
|
||||
};
|
||||
|
||||
#undef __SYSCALL_64
|
||||
#undef __SYSCALL_X32
|
||||
|
||||
#ifdef CONFIG_X86_X32_ABI
|
||||
|
||||
#define __SYSCALL_64(nr, sym, qual)
|
||||
#define __SYSCALL_X32(nr, sym, qual) [nr] = sym,
|
||||
|
||||
asmlinkage const sys_call_ptr_t x32_sys_call_table[__NR_syscall_x32_max+1] = {
|
||||
/*
|
||||
* Smells like a compiler bug -- it doesn't work
|
||||
* when the & below is removed.
|
||||
*/
|
||||
[0 ... __NR_syscall_x32_max] = &__x64_sys_ni_syscall,
|
||||
#include <asm/syscalls_64.h>
|
||||
};
|
||||
|
||||
#undef __SYSCALL_64
|
||||
#undef __SYSCALL_X32
|
||||
|
||||
#endif
|
||||
|
||||
29
arch/x86/entry/syscall_x32.c
Normal file
29
arch/x86/entry/syscall_x32.c
Normal file
@@ -0,0 +1,29 @@
|
||||
// SPDX-License-Identifier: GPL-2.0
|
||||
/* System call table for x32 ABI. */
|
||||
|
||||
#include <linux/linkage.h>
|
||||
#include <linux/sys.h>
|
||||
#include <linux/cache.h>
|
||||
#include <linux/syscalls.h>
|
||||
#include <asm/unistd.h>
|
||||
#include <asm/syscall.h>
|
||||
|
||||
#define __SYSCALL_64(nr, sym)
|
||||
|
||||
#define __SYSCALL_X32(nr, sym) extern long __x32_##sym(const struct pt_regs *);
|
||||
#define __SYSCALL_COMMON(nr, sym) extern long __x64_##sym(const struct pt_regs *);
|
||||
#include <asm/syscalls_64.h>
|
||||
#undef __SYSCALL_X32
|
||||
#undef __SYSCALL_COMMON
|
||||
|
||||
#define __SYSCALL_X32(nr, sym) [nr] = __x32_##sym,
|
||||
#define __SYSCALL_COMMON(nr, sym) [nr] = __x64_##sym,
|
||||
|
||||
asmlinkage const sys_call_ptr_t x32_sys_call_table[__NR_x32_syscall_max+1] = {
|
||||
/*
|
||||
* Smells like a compiler bug -- it doesn't work
|
||||
* when the & below is removed.
|
||||
*/
|
||||
[0 ... __NR_x32_syscall_max] = &__x64_sys_ni_syscall,
|
||||
#include <asm/syscalls_64.h>
|
||||
};
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -15,14 +15,21 @@ grep -E "^[0-9A-Fa-fXx]+[[:space:]]+${my_abis}" "$in" | sort -n | (
|
||||
echo "#define ${fileguard} 1"
|
||||
echo ""
|
||||
|
||||
max=0
|
||||
while read nr abi name entry ; do
|
||||
if [ -z "$offset" ]; then
|
||||
echo "#define __NR_${prefix}${name} $nr"
|
||||
else
|
||||
echo "#define __NR_${prefix}${name} ($offset + $nr)"
|
||||
fi
|
||||
|
||||
max=$nr
|
||||
done
|
||||
|
||||
echo ""
|
||||
echo "#ifdef __KERNEL__"
|
||||
echo "#define __NR_${prefix}syscall_max $max"
|
||||
echo "#endif"
|
||||
echo ""
|
||||
echo "#endif /* ${fileguard} */"
|
||||
) > "$out"
|
||||
|
||||
@@ -9,15 +9,7 @@ syscall_macro() {
|
||||
local nr="$2"
|
||||
local entry="$3"
|
||||
|
||||
# Entry can be either just a function name or "function/qualifier"
|
||||
real_entry="${entry%%/*}"
|
||||
if [ "$entry" = "$real_entry" ]; then
|
||||
qualifier=
|
||||
else
|
||||
qualifier=${entry#*/}
|
||||
fi
|
||||
|
||||
echo "__SYSCALL_${abi}($nr, $real_entry, $qualifier)"
|
||||
echo "__SYSCALL_${abi}($nr, $entry)"
|
||||
}
|
||||
|
||||
emit() {
|
||||
@@ -25,27 +17,15 @@ emit() {
|
||||
local nr="$2"
|
||||
local entry="$3"
|
||||
local compat="$4"
|
||||
local umlentry=""
|
||||
|
||||
if [ "$abi" != "I386" -a -n "$compat" ]; then
|
||||
echo "a compat entry ($abi: $compat) for a 64-bit syscall makes no sense" >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# For CONFIG_UML, we need to strip the __x64_sys prefix
|
||||
if [ "$abi" = "64" -a "${entry}" != "${entry#__x64_sys}" ]; then
|
||||
umlentry="sys${entry#__x64_sys}"
|
||||
fi
|
||||
|
||||
if [ -z "$compat" ]; then
|
||||
if [ -n "$entry" -a -z "$umlentry" ]; then
|
||||
if [ -n "$entry" ]; then
|
||||
syscall_macro "$abi" "$nr" "$entry"
|
||||
elif [ -n "$umlentry" ]; then # implies -n "$entry"
|
||||
echo "#ifdef CONFIG_X86"
|
||||
syscall_macro "$abi" "$nr" "$entry"
|
||||
echo "#else /* CONFIG_UML */"
|
||||
syscall_macro "$abi" "$nr" "$umlentry"
|
||||
echo "#endif"
|
||||
fi
|
||||
else
|
||||
echo "#ifdef CONFIG_X86_32"
|
||||
@@ -61,24 +41,6 @@ emit() {
|
||||
grep '^[0-9]' "$in" | sort -n | (
|
||||
while read nr abi name entry compat; do
|
||||
abi=`echo "$abi" | tr '[a-z]' '[A-Z]'`
|
||||
if [ "$abi" = "COMMON" -o "$abi" = "64" ]; then
|
||||
emit 64 "$nr" "$entry" "$compat"
|
||||
if [ "$abi" = "COMMON" ]; then
|
||||
# COMMON means that this syscall exists in the same form for
|
||||
# 64-bit and X32.
|
||||
echo "#ifdef CONFIG_X86_X32_ABI"
|
||||
emit X32 "$nr" "$entry" "$compat"
|
||||
echo "#endif"
|
||||
fi
|
||||
elif [ "$abi" = "X32" ]; then
|
||||
echo "#ifdef CONFIG_X86_X32_ABI"
|
||||
emit X32 "$nr" "$entry" "$compat"
|
||||
echo "#endif"
|
||||
elif [ "$abi" = "I386" ]; then
|
||||
emit "$abi" "$nr" "$entry" "$compat"
|
||||
else
|
||||
echo "Unknown abi $abi" >&2
|
||||
exit 1
|
||||
fi
|
||||
emit "$abi" "$nr" "$entry" "$compat"
|
||||
done
|
||||
) > "$out"
|
||||
|
||||
@@ -35,9 +35,9 @@ SYM_CODE_END(\name)
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_PREEMPTION
|
||||
THUNK ___preempt_schedule, preempt_schedule
|
||||
THUNK ___preempt_schedule_notrace, preempt_schedule_notrace
|
||||
EXPORT_SYMBOL(___preempt_schedule)
|
||||
EXPORT_SYMBOL(___preempt_schedule_notrace)
|
||||
THUNK preempt_schedule_thunk, preempt_schedule
|
||||
THUNK preempt_schedule_notrace_thunk, preempt_schedule_notrace
|
||||
EXPORT_SYMBOL(preempt_schedule_thunk)
|
||||
EXPORT_SYMBOL(preempt_schedule_notrace_thunk)
|
||||
#endif
|
||||
|
||||
|
||||
@@ -47,10 +47,10 @@ SYM_FUNC_END(\name)
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_PREEMPTION
|
||||
THUNK ___preempt_schedule, preempt_schedule
|
||||
THUNK ___preempt_schedule_notrace, preempt_schedule_notrace
|
||||
EXPORT_SYMBOL(___preempt_schedule)
|
||||
EXPORT_SYMBOL(___preempt_schedule_notrace)
|
||||
THUNK preempt_schedule_thunk, preempt_schedule
|
||||
THUNK preempt_schedule_notrace_thunk, preempt_schedule_notrace
|
||||
EXPORT_SYMBOL(preempt_schedule_thunk)
|
||||
EXPORT_SYMBOL(preempt_schedule_notrace_thunk)
|
||||
#endif
|
||||
|
||||
#if defined(CONFIG_TRACE_IRQFLAGS) \
|
||||
|
||||
@@ -13,6 +13,7 @@
|
||||
*/
|
||||
#undef CONFIG_64BIT
|
||||
#undef CONFIG_X86_64
|
||||
#undef CONFIG_COMPAT
|
||||
#undef CONFIG_PGTABLE_LEVELS
|
||||
#undef CONFIG_ILLEGAL_POINTER_VALUE
|
||||
#undef CONFIG_SPARSEMEM_VMEMMAP
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
# Makefile for the ia32 kernel emulation subsystem.
|
||||
#
|
||||
|
||||
obj-$(CONFIG_IA32_EMULATION) := sys_ia32.o ia32_signal.o
|
||||
obj-$(CONFIG_IA32_EMULATION) := ia32_signal.o
|
||||
|
||||
obj-$(CONFIG_IA32_AOUT) += ia32_aout.o
|
||||
|
||||
|
||||
@@ -36,7 +36,7 @@ extern void native_init_IRQ(void);
|
||||
|
||||
extern void handle_irq(struct irq_desc *desc, struct pt_regs *regs);
|
||||
|
||||
extern __visible unsigned int do_IRQ(struct pt_regs *regs);
|
||||
extern __visible void do_IRQ(struct pt_regs *regs);
|
||||
|
||||
extern void init_ISA_irqs(void);
|
||||
|
||||
|
||||
@@ -238,9 +238,6 @@ extern void mce_disable_bank(int bank);
|
||||
/*
|
||||
* Exception handler
|
||||
*/
|
||||
|
||||
/* Call the installed machine check handler for this CPU setup. */
|
||||
extern void (*machine_check_vector)(struct pt_regs *, long error_code);
|
||||
void do_machine_check(struct pt_regs *, long);
|
||||
|
||||
/*
|
||||
|
||||
@@ -103,14 +103,14 @@ static __always_inline bool should_resched(int preempt_offset)
|
||||
}
|
||||
|
||||
#ifdef CONFIG_PREEMPTION
|
||||
extern asmlinkage void ___preempt_schedule(void);
|
||||
extern asmlinkage void preempt_schedule_thunk(void);
|
||||
# define __preempt_schedule() \
|
||||
asm volatile ("call ___preempt_schedule" : ASM_CALL_CONSTRAINT)
|
||||
asm volatile ("call preempt_schedule_thunk" : ASM_CALL_CONSTRAINT)
|
||||
|
||||
extern asmlinkage void preempt_schedule(void);
|
||||
extern asmlinkage void ___preempt_schedule_notrace(void);
|
||||
extern asmlinkage void preempt_schedule_notrace_thunk(void);
|
||||
# define __preempt_schedule_notrace() \
|
||||
asm volatile ("call ___preempt_schedule_notrace" : ASM_CALL_CONSTRAINT)
|
||||
asm volatile ("call preempt_schedule_notrace_thunk" : ASM_CALL_CONSTRAINT)
|
||||
|
||||
extern asmlinkage void preempt_schedule_notrace(void);
|
||||
#endif
|
||||
|
||||
@@ -17,9 +17,4 @@ void signal_fault(struct pt_regs *regs, void __user *frame, char *where);
|
||||
int setup_sigcontext(struct sigcontext __user *sc, void __user *fpstate,
|
||||
struct pt_regs *regs, unsigned long mask);
|
||||
|
||||
|
||||
#ifdef CONFIG_X86_X32_ABI
|
||||
asmlinkage long sys32_x32_rt_sigreturn(void);
|
||||
#endif
|
||||
|
||||
#endif /* _ASM_X86_SIGHANDLING_H */
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user