zx_thread_start

NAME

thread_start - start execution on a thread

SYNOPSIS

#include <zircon/syscalls.h>

zx_status_t zx_thread_start(zx_handle_t handle, zx_vaddr_t entry, zx_vaddr_t stack,
                            uintptr_t arg1, uintptr_t arg2);

DESCRIPTION

thread_start() causes a thread to begin execution at the program counter specified by entry and with the stack pointer set to stack. The arguments arg1 and arg2 are arranged to be in the architecture specific registers used for the first two arguments of a function call before the thread is started. All other registers are zero upon start.

When the last handle to a thread is closed, the thread is destroyed.

Thread handles may be waited on and will assert the signal ZX_THREAD_TERMINATED when the thread stops executing (due to thread_exit*() being called.

entry shall point to a function that must call thread_exit() or futex_wake_handle_close_thread_exit() or vmar_unmap_handle_close_thread_exit() before reaching the last instruction. Below is an example:

void thread_entry(uintptr_t arg1, uintptr_t arg2) __attribute__((noreturn)) {
	// do work here.

	zx_thread_exit();
}

Failing to call one of the exit functions before reaching the end of the function will cause an architecture / toolchain specific exception.

RETURN VALUE

thread_start() returns ZX_OK on success. In the event of failure, a negative error value is returned.

ERRORS

ZX_ERR_BAD_HANDLE thread is not a valid handle.

ZX_ERR_WRONG_TYPE thread is not a thread handle.

ZX_ERR_ACCESS_DENIED The handle thread lacks ZX_RIGHT_WRITE.

ZX_ERR_BAD_STATE thread is not ready to run or the process thread is part of is no longer alive.

SEE ALSO

handle_close, handle_duplicate, object_wait_one, object_wait_many, thread_create, thread_exit, futex_wake_handle_close_thread_exit, vmar_unmap_handle_close_thread_exit.