12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455 |
- /*
- * Copyright (c) 2015 Wind River Systems, Inc.
- *
- * SPDX-License-Identifier: Apache-2.0
- */
- /** @file
- *
- * @brief Per-thread errno accessor function
- *
- * Allow accessing the errno for the current thread without involving the
- * context switching.
- */
- #include <kernel.h>
- #include <syscall_handler.h>
- /*
- * Define _k_neg_eagain for use in assembly files as errno.h is
- * not assembly language safe.
- * FIXME: wastes 4 bytes
- */
- const int _k_neg_eagain = -EAGAIN;
- #ifdef CONFIG_ERRNO
- #ifdef CONFIG_ERRNO_IN_TLS
- __thread int z_errno_var;
- #else
- #ifdef CONFIG_USERSPACE
- int *z_impl_z_errno(void)
- {
- /* Initialized to the lowest address in the stack so the thread can
- * directly read/write it
- */
- return &_current->userspace_local_data->errno_var;
- }
- static inline int *z_vrfy_z_errno(void)
- {
- return z_impl_z_errno();
- }
- #include <syscalls/z_errno_mrsh.c>
- #else
- int *z_impl_z_errno(void)
- {
- return &_current->errno_var;
- }
- #endif /* CONFIG_USERSPACE */
- #endif /* CONFIG_ERRNO_IN_TLS */
- #endif /* CONFIG_ERRNO */
|