xref: /qemu/include/accel/tcg/getpc.h (revision b73f58496dc7e14b56521c9eeec7aa1225861fc2)
1*b73f5849SRichard Henderson /*
2*b73f5849SRichard Henderson  * Get host pc for helper unwinding.
3*b73f5849SRichard Henderson  *
4*b73f5849SRichard Henderson  * Copyright (c) 2003 Fabrice Bellard
5*b73f5849SRichard Henderson  * SPDX-License-Identifier: LGPL-2.1-or-later
6*b73f5849SRichard Henderson  */
7*b73f5849SRichard Henderson 
8*b73f5849SRichard Henderson #ifndef ACCEL_TCG_GETPC_H
9*b73f5849SRichard Henderson #define ACCEL_TCG_GETPC_H
10*b73f5849SRichard Henderson 
11*b73f5849SRichard Henderson #ifndef CONFIG_TCG
12*b73f5849SRichard Henderson #error Can only include this header with TCG
13*b73f5849SRichard Henderson #endif
14*b73f5849SRichard Henderson 
15*b73f5849SRichard Henderson /* GETPC is the true target of the return instruction that we'll execute.  */
16*b73f5849SRichard Henderson #ifdef CONFIG_TCG_INTERPRETER
17*b73f5849SRichard Henderson extern __thread uintptr_t tci_tb_ptr;
18*b73f5849SRichard Henderson # define GETPC() tci_tb_ptr
19*b73f5849SRichard Henderson #else
20*b73f5849SRichard Henderson # define GETPC() \
21*b73f5849SRichard Henderson     ((uintptr_t)__builtin_extract_return_addr(__builtin_return_address(0)))
22*b73f5849SRichard Henderson #endif
23*b73f5849SRichard Henderson 
24*b73f5849SRichard Henderson #endif /* ACCEL_TCG_GETPC_H */
25