diff --git a/Kernel/Arch/i386/CPU.cpp b/Kernel/Arch/i386/CPU.cpp index 7a3a4f5159..99ff67a368 100644 --- a/Kernel/Arch/i386/CPU.cpp +++ b/Kernel/Arch/i386/CPU.cpp @@ -1190,10 +1190,6 @@ extern "C" void context_first_init(Thread* from_thread, Thread* to_thread, TrapF Scheduler::enter_current(*from_thread); - if (to_thread->process().wait_for_tracer_at_next_execve()) { - to_thread->send_urgent_signal_to_self(SIGSTOP); - } - // Since we got here and don't have Scheduler::context_switch in the // call stack (because this is the first time we switched into this // context), we need to notify the scheduler so that it can release diff --git a/Kernel/Syscalls/execve.cpp b/Kernel/Syscalls/execve.cpp index 93f56ee73a..1f910795f7 100644 --- a/Kernel/Syscalls/execve.cpp +++ b/Kernel/Syscalls/execve.cpp @@ -269,6 +269,9 @@ int Process::do_exec(NonnullRefPtr main_program_description, Ve // and we don't want to deal with faults after this point. u32 new_userspace_esp = new_main_thread->make_userspace_stack_for_main_thread(move(arguments), move(environment), move(auxv)); + if (wait_for_tracer_at_next_execve()) + Thread::current()->send_urgent_signal_to_self(SIGSTOP); + // We enter a critical section here because we don't want to get interrupted between do_exec() // and Processor::assume_context() or the next context switch. // If we used an InterruptDisabler that sti()'d on exit, we might timer tick'd too soon in exec(). @@ -557,7 +560,7 @@ int Process::sys$execve(Userspace user_params) if (params.arguments.length > ARG_MAX || params.environment.length > ARG_MAX) return -E2BIG; - if (m_wait_for_tracer_at_next_execve) + if (wait_for_tracer_at_next_execve()) Thread::current()->send_urgent_signal_to_self(SIGSTOP); String path; @@ -597,5 +600,4 @@ int Process::sys$execve(Userspace user_params) ASSERT(rc < 0); // We should never continue after a successful exec! return rc; } - }