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

Commit 709110bd authored by Hiroshi Shimamoto's avatar Hiroshi Shimamoto Committed by Ingo Molnar
Browse files

x86: signal: cosmetic unification of restore_sigcontext()



Impact: cleanup

Make restore_sigcontext() the same.

Signed-off-by: default avatarHiroshi Shimamoto <h-shimamoto@ct.jp.nec.com>
Signed-off-by: default avatarIngo Molnar <mingo@elte.hu>
parent f8d56f17
Loading
Loading
Loading
Loading
+22 −0
Original line number Diff line number Diff line
@@ -149,14 +149,36 @@ restore_sigcontext(struct pt_regs *regs, struct sigcontext __user *sc,
	/* Always make any pending restarted system calls return -EINTR */
	current_thread_info()->restart_block.fn = do_no_restart_syscall;

#ifdef CONFIG_X86_32
	GET_SEG(gs);
	COPY_SEG(fs);
	COPY_SEG(es);
	COPY_SEG(ds);
#endif /* CONFIG_X86_32 */

	COPY(di); COPY(si); COPY(bp); COPY(sp); COPY(bx);
	COPY(dx); COPY(cx); COPY(ip);

#ifdef CONFIG_X86_64
	COPY(r8);
	COPY(r9);
	COPY(r10);
	COPY(r11);
	COPY(r12);
	COPY(r13);
	COPY(r14);
	COPY(r15);
#endif /* CONFIG_X86_64 */

#ifdef CONFIG_X86_32
	COPY_SEG_STRICT(cs);
	COPY_SEG_STRICT(ss);
#else /* !CONFIG_X86_32 */
	/* Kernel saves and restores only the CS segment register on signals,
	 * which is the bare minimum needed to allow mixed 32/64-bit code.
	 * App's signal handler can save/restore other segments if needed. */
	COPY_SEG_STRICT(cs);
#endif /* CONFIG_X86_32 */

	err |= __get_user(tmpflags, &sc->flags);
	regs->flags = (regs->flags & ~FIX_EFLAGS) | (tmpflags & FIX_EFLAGS);
+15 −0
Original line number Diff line number Diff line
@@ -76,8 +76,17 @@ restore_sigcontext(struct pt_regs *regs, struct sigcontext __user *sc,
	/* Always make any pending restarted system calls return -EINTR */
	current_thread_info()->restart_block.fn = do_no_restart_syscall;

#ifdef CONFIG_X86_32
	GET_SEG(gs);
	COPY_SEG(fs);
	COPY_SEG(es);
	COPY_SEG(ds);
#endif /* CONFIG_X86_32 */

	COPY(di); COPY(si); COPY(bp); COPY(sp); COPY(bx);
	COPY(dx); COPY(cx); COPY(ip);

#ifdef CONFIG_X86_64
	COPY(r8);
	COPY(r9);
	COPY(r10);
@@ -86,11 +95,17 @@ restore_sigcontext(struct pt_regs *regs, struct sigcontext __user *sc,
	COPY(r13);
	COPY(r14);
	COPY(r15);
#endif /* CONFIG_X86_64 */

#ifdef CONFIG_X86_32
	COPY_SEG_STRICT(cs);
	COPY_SEG_STRICT(ss);
#else /* !CONFIG_X86_32 */
	/* Kernel saves and restores only the CS segment register on signals,
	 * which is the bare minimum needed to allow mixed 32/64-bit code.
	 * App's signal handler can save/restore other segments if needed. */
	COPY_SEG_STRICT(cs);
#endif /* CONFIG_X86_32 */

	err |= __get_user(tmpflags, &sc->flags);
	regs->flags = (regs->flags & ~FIX_EFLAGS) | (tmpflags & FIX_EFLAGS);