1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20#ifndef I386_TARGET_CPU_H
21#define I386_TARGET_CPU_H
22
23static inline void cpu_clone_regs(CPUX86State *env, target_ulong newsp)
24{
25 if (newsp) {
26 env->regs[R_ESP] = newsp;
27 }
28 env->regs[R_EAX] = 0;
29}
30
31#if defined(TARGET_ABI32)
32abi_long do_set_thread_area(CPUX86State *env, abi_ulong ptr);
33
34static inline void cpu_set_tls(CPUX86State *env, target_ulong newtls)
35{
36 do_set_thread_area(env, newtls);
37 cpu_x86_load_seg(env, R_GS, env->segs[R_GS].selector);
38}
39#else
40abi_long do_arch_prctl(CPUX86State *env, int code, abi_ulong addr);
41
42static inline void cpu_set_tls(CPUX86State *env, target_ulong newtls)
43{
44 do_arch_prctl(env, TARGET_ARCH_SET_FS, newtls);
45}
46#endif
47
48static inline abi_ulong get_sp_from_cpustate(CPUX86State *state)
49{
50 return state->regs[R_ESP];
51}
52#endif
53