Loading arch/um/include/asm/thread_info.h +1 −1 Original line number Diff line number Diff line Loading @@ -71,6 +71,7 @@ static inline struct thread_info *current_thread_info(void) #define TIF_MEMDIE 5 /* is terminating due to OOM killer */ #define TIF_SYSCALL_AUDIT 6 #define TIF_RESTORE_SIGMASK 7 #define TIF_NOTIFY_RESUME 8 #define _TIF_SYSCALL_TRACE (1 << TIF_SYSCALL_TRACE) #define _TIF_SIGPENDING (1 << TIF_SIGPENDING) Loading @@ -78,6 +79,5 @@ static inline struct thread_info *current_thread_info(void) #define _TIF_POLLING_NRFLAG (1 << TIF_POLLING_NRFLAG) #define _TIF_MEMDIE (1 << TIF_MEMDIE) #define _TIF_SYSCALL_AUDIT (1 << TIF_SYSCALL_AUDIT) #define _TIF_RESTORE_SIGMASK (1 << TIF_RESTORE_SIGMASK) #endif arch/um/kernel/process.c +8 −2 Original line number Diff line number Diff line Loading @@ -18,6 +18,7 @@ #include <linux/seq_file.h> #include <linux/tick.h> #include <linux/threads.h> #include <linux/tracehook.h> #include <asm/current.h> #include <asm/pgtable.h> #include <asm/mmu_context.h> Loading Loading @@ -114,8 +115,13 @@ void interrupt_end(void) { if (need_resched()) schedule(); if (test_tsk_thread_flag(current, TIF_SIGPENDING)) if (test_thread_flag(TIF_SIGPENDING)) do_signal(); if (test_and_clear_thread_flag(TIF_NOTIFY_RESUME)) { tracehook_notify_resume(¤t->thread.regs); if (current->replacement_session_keyring) key_replace_session_keyring(); } } void exit_thread(void) Loading Loading @@ -190,7 +196,7 @@ int copy_thread(unsigned long clone_flags, unsigned long sp, if (current->thread.forking) { memcpy(&p->thread.regs.regs, ®s->regs, sizeof(p->thread.regs.regs)); REGS_SET_SYSCALL_RETURN(p->thread.regs.regs.gp, 0); UPT_SET_SYSCALL_RETURN(&p->thread.regs.regs, 0); if (sp != 0) REGS_SP(p->thread.regs.regs.gp) = sp; Loading arch/um/kernel/signal.c +5 −9 Original line number Diff line number Diff line Loading @@ -29,9 +29,6 @@ static int handle_signal(struct pt_regs *regs, unsigned long signr, unsigned long sp; int err; /* Always make any pending restarted system calls return -EINTR */ current_thread_info()->restart_block.fn = do_no_restart_syscall; /* Did we come from a system call? */ if (PT_REGS_SYSCALL_NR(regs) >= 0) { /* If so, check system call restarting.. */ Loading Loading @@ -77,15 +74,14 @@ static int kern_do_signal(struct pt_regs *regs) { struct k_sigaction ka_copy; siginfo_t info; sigset_t *oldset; int sig, handled_sig = 0; while ((sig = get_signal_to_deliver(&info, &ka_copy, regs, NULL)) > 0) { sigset_t *oldset; if (test_thread_flag(TIF_RESTORE_SIGMASK)) oldset = ¤t->saved_sigmask; else oldset = ¤t->blocked; while ((sig = get_signal_to_deliver(&info, &ka_copy, regs, NULL)) > 0) { handled_sig = 1; /* Whee! Actually deliver the signal. */ if (!handle_signal(regs, sig, &ka_copy, &info, oldset)) { Loading arch/um/kernel/skas/syscall.c +1 −1 Original line number Diff line number Diff line Loading @@ -34,7 +34,7 @@ void handle_syscall(struct uml_pt_regs *r) result = -ENOSYS; else result = EXECUTE_SYSCALL(syscall, regs); REGS_SET_SYSCALL_RETURN(r->gp, result); UPT_SET_SYSCALL_RETURN(r, result); syscall_trace(r, 1); } arch/x86/um/asm/elf.h +21 −21 Original line number Diff line number Diff line Loading @@ -34,25 +34,25 @@ #define ELF_ARCH EM_386 #define ELF_PLAT_INIT(regs, load_addr) do { \ PT_REGS_EBX(regs) = 0; \ PT_REGS_ECX(regs) = 0; \ PT_REGS_EDX(regs) = 0; \ PT_REGS_ESI(regs) = 0; \ PT_REGS_EDI(regs) = 0; \ PT_REGS_EBP(regs) = 0; \ PT_REGS_EAX(regs) = 0; \ PT_REGS_BX(regs) = 0; \ PT_REGS_CX(regs) = 0; \ PT_REGS_DX(regs) = 0; \ PT_REGS_SI(regs) = 0; \ PT_REGS_DI(regs) = 0; \ PT_REGS_BP(regs) = 0; \ PT_REGS_AX(regs) = 0; \ } while (0) /* Shamelessly stolen from include/asm-i386/elf.h */ #define ELF_CORE_COPY_REGS(pr_reg, regs) do { \ pr_reg[0] = PT_REGS_EBX(regs); \ pr_reg[1] = PT_REGS_ECX(regs); \ pr_reg[2] = PT_REGS_EDX(regs); \ pr_reg[3] = PT_REGS_ESI(regs); \ pr_reg[4] = PT_REGS_EDI(regs); \ pr_reg[5] = PT_REGS_EBP(regs); \ pr_reg[6] = PT_REGS_EAX(regs); \ pr_reg[0] = PT_REGS_BX(regs); \ pr_reg[1] = PT_REGS_CX(regs); \ pr_reg[2] = PT_REGS_DX(regs); \ pr_reg[3] = PT_REGS_SI(regs); \ pr_reg[4] = PT_REGS_DI(regs); \ pr_reg[5] = PT_REGS_BP(regs); \ pr_reg[6] = PT_REGS_AX(regs); \ pr_reg[7] = PT_REGS_DS(regs); \ pr_reg[8] = PT_REGS_ES(regs); \ /* fake once used fs and gs selectors? */ \ Loading Loading @@ -130,13 +130,13 @@ do { \ #define ELF_ARCH EM_X86_64 #define ELF_PLAT_INIT(regs, load_addr) do { \ PT_REGS_RBX(regs) = 0; \ PT_REGS_RCX(regs) = 0; \ PT_REGS_RDX(regs) = 0; \ PT_REGS_RSI(regs) = 0; \ PT_REGS_RDI(regs) = 0; \ PT_REGS_RBP(regs) = 0; \ PT_REGS_RAX(regs) = 0; \ PT_REGS_BX(regs) = 0; \ PT_REGS_CX(regs) = 0; \ PT_REGS_DX(regs) = 0; \ PT_REGS_SI(regs) = 0; \ PT_REGS_DI(regs) = 0; \ PT_REGS_BP(regs) = 0; \ PT_REGS_AX(regs) = 0; \ PT_REGS_R8(regs) = 0; \ PT_REGS_R9(regs) = 0; \ PT_REGS_R10(regs) = 0; \ Loading Loading
arch/um/include/asm/thread_info.h +1 −1 Original line number Diff line number Diff line Loading @@ -71,6 +71,7 @@ static inline struct thread_info *current_thread_info(void) #define TIF_MEMDIE 5 /* is terminating due to OOM killer */ #define TIF_SYSCALL_AUDIT 6 #define TIF_RESTORE_SIGMASK 7 #define TIF_NOTIFY_RESUME 8 #define _TIF_SYSCALL_TRACE (1 << TIF_SYSCALL_TRACE) #define _TIF_SIGPENDING (1 << TIF_SIGPENDING) Loading @@ -78,6 +79,5 @@ static inline struct thread_info *current_thread_info(void) #define _TIF_POLLING_NRFLAG (1 << TIF_POLLING_NRFLAG) #define _TIF_MEMDIE (1 << TIF_MEMDIE) #define _TIF_SYSCALL_AUDIT (1 << TIF_SYSCALL_AUDIT) #define _TIF_RESTORE_SIGMASK (1 << TIF_RESTORE_SIGMASK) #endif
arch/um/kernel/process.c +8 −2 Original line number Diff line number Diff line Loading @@ -18,6 +18,7 @@ #include <linux/seq_file.h> #include <linux/tick.h> #include <linux/threads.h> #include <linux/tracehook.h> #include <asm/current.h> #include <asm/pgtable.h> #include <asm/mmu_context.h> Loading Loading @@ -114,8 +115,13 @@ void interrupt_end(void) { if (need_resched()) schedule(); if (test_tsk_thread_flag(current, TIF_SIGPENDING)) if (test_thread_flag(TIF_SIGPENDING)) do_signal(); if (test_and_clear_thread_flag(TIF_NOTIFY_RESUME)) { tracehook_notify_resume(¤t->thread.regs); if (current->replacement_session_keyring) key_replace_session_keyring(); } } void exit_thread(void) Loading Loading @@ -190,7 +196,7 @@ int copy_thread(unsigned long clone_flags, unsigned long sp, if (current->thread.forking) { memcpy(&p->thread.regs.regs, ®s->regs, sizeof(p->thread.regs.regs)); REGS_SET_SYSCALL_RETURN(p->thread.regs.regs.gp, 0); UPT_SET_SYSCALL_RETURN(&p->thread.regs.regs, 0); if (sp != 0) REGS_SP(p->thread.regs.regs.gp) = sp; Loading
arch/um/kernel/signal.c +5 −9 Original line number Diff line number Diff line Loading @@ -29,9 +29,6 @@ static int handle_signal(struct pt_regs *regs, unsigned long signr, unsigned long sp; int err; /* Always make any pending restarted system calls return -EINTR */ current_thread_info()->restart_block.fn = do_no_restart_syscall; /* Did we come from a system call? */ if (PT_REGS_SYSCALL_NR(regs) >= 0) { /* If so, check system call restarting.. */ Loading Loading @@ -77,15 +74,14 @@ static int kern_do_signal(struct pt_regs *regs) { struct k_sigaction ka_copy; siginfo_t info; sigset_t *oldset; int sig, handled_sig = 0; while ((sig = get_signal_to_deliver(&info, &ka_copy, regs, NULL)) > 0) { sigset_t *oldset; if (test_thread_flag(TIF_RESTORE_SIGMASK)) oldset = ¤t->saved_sigmask; else oldset = ¤t->blocked; while ((sig = get_signal_to_deliver(&info, &ka_copy, regs, NULL)) > 0) { handled_sig = 1; /* Whee! Actually deliver the signal. */ if (!handle_signal(regs, sig, &ka_copy, &info, oldset)) { Loading
arch/um/kernel/skas/syscall.c +1 −1 Original line number Diff line number Diff line Loading @@ -34,7 +34,7 @@ void handle_syscall(struct uml_pt_regs *r) result = -ENOSYS; else result = EXECUTE_SYSCALL(syscall, regs); REGS_SET_SYSCALL_RETURN(r->gp, result); UPT_SET_SYSCALL_RETURN(r, result); syscall_trace(r, 1); }
arch/x86/um/asm/elf.h +21 −21 Original line number Diff line number Diff line Loading @@ -34,25 +34,25 @@ #define ELF_ARCH EM_386 #define ELF_PLAT_INIT(regs, load_addr) do { \ PT_REGS_EBX(regs) = 0; \ PT_REGS_ECX(regs) = 0; \ PT_REGS_EDX(regs) = 0; \ PT_REGS_ESI(regs) = 0; \ PT_REGS_EDI(regs) = 0; \ PT_REGS_EBP(regs) = 0; \ PT_REGS_EAX(regs) = 0; \ PT_REGS_BX(regs) = 0; \ PT_REGS_CX(regs) = 0; \ PT_REGS_DX(regs) = 0; \ PT_REGS_SI(regs) = 0; \ PT_REGS_DI(regs) = 0; \ PT_REGS_BP(regs) = 0; \ PT_REGS_AX(regs) = 0; \ } while (0) /* Shamelessly stolen from include/asm-i386/elf.h */ #define ELF_CORE_COPY_REGS(pr_reg, regs) do { \ pr_reg[0] = PT_REGS_EBX(regs); \ pr_reg[1] = PT_REGS_ECX(regs); \ pr_reg[2] = PT_REGS_EDX(regs); \ pr_reg[3] = PT_REGS_ESI(regs); \ pr_reg[4] = PT_REGS_EDI(regs); \ pr_reg[5] = PT_REGS_EBP(regs); \ pr_reg[6] = PT_REGS_EAX(regs); \ pr_reg[0] = PT_REGS_BX(regs); \ pr_reg[1] = PT_REGS_CX(regs); \ pr_reg[2] = PT_REGS_DX(regs); \ pr_reg[3] = PT_REGS_SI(regs); \ pr_reg[4] = PT_REGS_DI(regs); \ pr_reg[5] = PT_REGS_BP(regs); \ pr_reg[6] = PT_REGS_AX(regs); \ pr_reg[7] = PT_REGS_DS(regs); \ pr_reg[8] = PT_REGS_ES(regs); \ /* fake once used fs and gs selectors? */ \ Loading Loading @@ -130,13 +130,13 @@ do { \ #define ELF_ARCH EM_X86_64 #define ELF_PLAT_INIT(regs, load_addr) do { \ PT_REGS_RBX(regs) = 0; \ PT_REGS_RCX(regs) = 0; \ PT_REGS_RDX(regs) = 0; \ PT_REGS_RSI(regs) = 0; \ PT_REGS_RDI(regs) = 0; \ PT_REGS_RBP(regs) = 0; \ PT_REGS_RAX(regs) = 0; \ PT_REGS_BX(regs) = 0; \ PT_REGS_CX(regs) = 0; \ PT_REGS_DX(regs) = 0; \ PT_REGS_SI(regs) = 0; \ PT_REGS_DI(regs) = 0; \ PT_REGS_BP(regs) = 0; \ PT_REGS_AX(regs) = 0; \ PT_REGS_R8(regs) = 0; \ PT_REGS_R9(regs) = 0; \ PT_REGS_R10(regs) = 0; \ Loading