Line data Source code
1 0 : /*
2 : * Copyright (c) 2018 Intel Corporation.
3 : *
4 : * SPDX-License-Identifier: Apache-2.0
5 : */
6 :
7 : #ifndef ZEPHYR_INCLUDE_SYS_ERRNO_PRIVATE_H_
8 : #define ZEPHYR_INCLUDE_SYS_ERRNO_PRIVATE_H_
9 :
10 : #include <zephyr/toolchain.h>
11 : #include <zephyr/types.h> /* For Z_THREAD_LOCAL */
12 :
13 : #ifdef __cplusplus
14 : extern "C" {
15 : #endif
16 :
17 : /* NOTE: located here to avoid include dependency loops between errno.h
18 : * and kernel.h
19 : */
20 :
21 : #ifdef CONFIG_LIBC_ERRNO
22 : #include <errno.h>
23 :
24 : static inline int *z_errno(void)
25 : {
26 : return &errno;
27 : }
28 :
29 : #elif defined(CONFIG_ERRNO_IN_TLS)
30 : extern Z_THREAD_LOCAL int z_errno_var;
31 :
32 : static inline int *z_errno(void)
33 : {
34 : return &z_errno_var;
35 : }
36 : #else
37 : /**
38 : * return a pointer to a memory location containing errno
39 : *
40 : * errno is thread-specific, and can't just be a global. This pointer
41 : * is guaranteed to be read/writable from user mode.
42 : *
43 : * @return Memory location of errno data for current thread
44 : */
45 : __syscall int *z_errno(void);
46 :
47 : #endif /* CONFIG_ERRNO_IN_TLS */
48 :
49 : #ifdef __cplusplus
50 : }
51 : #endif
52 :
53 : #if !defined(CONFIG_ERRNO_IN_TLS) && !defined(CONFIG_LIBC_ERRNO)
54 : #include <zephyr/syscalls/errno_private.h>
55 : #endif /* CONFIG_ERRNO_IN_TLS */
56 :
57 : #endif /* ZEPHYR_INCLUDE_SYS_ERRNO_PRIVATE_H_ */
|