Line data Source code
1 0 : /*
2 : * Copyright (c) 2025 Intel
3 : * SPDX-License-Identifier: Apache-2.0
4 : */
5 :
6 : #ifndef ZEPHYR_INCLUDE_X86_STRUCTS_H_
7 : #define ZEPHYR_INCLUDE_X86_STRUCTS_H_
8 :
9 : #include <stdint.h>
10 :
11 : struct k_thread;
12 :
13 : /* Per CPU architecture specifics (empty) */
14 : struct _cpu_arch {
15 :
16 : #if defined(CONFIG_FPU_SHARING)
17 : /*
18 : * A 'sse_owner' field does not exist in addition to the 'fpu_owner'
19 : * field since it's not possible to divide the IA-32 non-integer
20 : * registers into 2 distinct blocks owned by differing threads. In
21 : * other words, given that the 'fxnsave/fxrstor' instructions
22 : * save/restore both the X87 FPU and XMM registers, it's not possible
23 : * for a thread to only "own" the XMM registers.
24 : */
25 :
26 : struct k_thread *fpu_owner;
27 : #endif
28 : #if defined(CONFIG_HW_SHADOW_STACK)
29 : long *shstk_addr; /* Latest top of shadow stack */
30 : long *shstk_base; /* Base of shadow stack */
31 : size_t shstk_size;
32 : #endif
33 : #if defined(__cplusplus) && !defined(CONFIG_FPU_SHARING) && \
34 : !defined(CONFIG_HW_SHADOW_STACK)
35 : /* Ensure this struct does not have a size of 0 which is not allowed in C++. */
36 : uint8_t dummy;
37 : #endif
38 : };
39 :
40 : #endif /* ZEPHYR_INCLUDE_X86_STRUCTS_H_ */
|