Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 409d5db4 authored by Will Deacon's avatar Will Deacon
Browse files

arm64: rseq: Implement backend rseq calls and select HAVE_RSEQ



Implement calls to rseq_signal_deliver, rseq_handle_notify_resume
and rseq_syscall so that we can select HAVE_RSEQ on arm64.

Acked-by: default avatarMathieu Desnoyers <mathieu.desnoyers@efficios.com>
Acked-by: default avatarMark Rutland <mark.rutland@arm.com>
Signed-off-by: default avatarWill Deacon <will.deacon@arm.com>
parent 54501ac1
Loading
Loading
Loading
Loading
+1 −0
Original line number Original line Diff line number Diff line
@@ -138,6 +138,7 @@ config ARM64
	select HAVE_PERF_USER_STACK_DUMP
	select HAVE_PERF_USER_STACK_DUMP
	select HAVE_REGS_AND_STACK_ACCESS_API
	select HAVE_REGS_AND_STACK_ACCESS_API
	select HAVE_RCU_TABLE_FREE
	select HAVE_RCU_TABLE_FREE
	select HAVE_RSEQ
	select HAVE_STACKPROTECTOR
	select HAVE_STACKPROTECTOR
	select HAVE_SYSCALL_TRACEPOINTS
	select HAVE_SYSCALL_TRACEPOINTS
	select HAVE_KPROBES
	select HAVE_KPROBES
+1 −1
Original line number Original line Diff line number Diff line
@@ -43,7 +43,7 @@
#define __ARM_NR_compat_cacheflush	(__ARM_NR_COMPAT_BASE+2)
#define __ARM_NR_compat_cacheflush	(__ARM_NR_COMPAT_BASE+2)
#define __ARM_NR_compat_set_tls		(__ARM_NR_COMPAT_BASE+5)
#define __ARM_NR_compat_set_tls		(__ARM_NR_COMPAT_BASE+5)


#define __NR_compat_syscalls		398
#define __NR_compat_syscalls		399
#endif
#endif


#define __ARCH_WANT_SYS_CLONE
#define __ARCH_WANT_SYS_CLONE
+2 −0
Original line number Original line Diff line number Diff line
@@ -817,6 +817,8 @@ __SYSCALL(__NR_pkey_alloc, sys_pkey_alloc)
__SYSCALL(__NR_pkey_free, sys_pkey_free)
__SYSCALL(__NR_pkey_free, sys_pkey_free)
#define __NR_statx 397
#define __NR_statx 397
__SYSCALL(__NR_statx, sys_statx)
__SYSCALL(__NR_statx, sys_statx)
#define __NR_rseq 398
__SYSCALL(__NR_rseq, sys_rseq)


/*
/*
 * Please add new compat syscalls above this comment and update
 * Please add new compat syscalls above this comment and update
+2 −0
Original line number Original line Diff line number Diff line
@@ -904,6 +904,7 @@ ENDPROC(el0_error)
ret_fast_syscall:
ret_fast_syscall:
	disable_daif
	disable_daif
	str	x0, [sp, #S_X0]			// returned x0
	str	x0, [sp, #S_X0]			// returned x0
#ifndef CONFIG_DEBUG_RSEQ
	ldr	x1, [tsk, #TSK_TI_FLAGS]	// re-check for syscall tracing
	ldr	x1, [tsk, #TSK_TI_FLAGS]	// re-check for syscall tracing
	and	x2, x1, #_TIF_SYSCALL_WORK
	and	x2, x1, #_TIF_SYSCALL_WORK
	cbnz	x2, ret_fast_syscall_trace
	cbnz	x2, ret_fast_syscall_trace
@@ -911,6 +912,7 @@ ret_fast_syscall:
	cbnz	x2, work_pending
	cbnz	x2, work_pending
	enable_step_tsk x1, x2
	enable_step_tsk x1, x2
	kernel_exit 0
	kernel_exit 0
#endif
ret_fast_syscall_trace:
ret_fast_syscall_trace:
	enable_daif
	enable_daif
	b	__sys_trace_return_skipped	// we already saved x0
	b	__sys_trace_return_skipped	// we already saved x0
+2 −0
Original line number Original line Diff line number Diff line
@@ -1658,6 +1658,8 @@ asmlinkage void syscall_trace_exit(struct pt_regs *regs)


	if (test_thread_flag(TIF_SYSCALL_TRACE))
	if (test_thread_flag(TIF_SYSCALL_TRACE))
		tracehook_report_syscall(regs, PTRACE_SYSCALL_EXIT);
		tracehook_report_syscall(regs, PTRACE_SYSCALL_EXIT);

	rseq_syscall(regs);
}
}


/*
/*
Loading