mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-07-31 14:23:53 -06:00

TB compile flags, tb_page_addr_t type, tb_cflags() and few other methods are defined in "exec/translation-block.h". All these files don't include "exec/translation-block.h" but include "exec/exec-all.h" which include it. Explicitly include "exec/translation-block.h" to be able to remove it from "exec/exec-all.h" later when it won't be necessary. Otherwise we'd get errors such: accel/tcg/internal-target.h:59:20: error: a parameter list without types is only allowed in a function definition 59 | void tb_lock_page0(tb_page_addr_t); | ^ accel/tcg/tb-hash.h:64:23: error: unknown type name 'tb_page_addr_t' 64 | uint32_t tb_hash_func(tb_page_addr_t phys_pc, vaddr pc, | ^ accel/tcg/tcg-accel-ops.c:62:36: error: use of undeclared identifier 'CF_CLUSTER_SHIFT' 62 | cflags = cpu->cluster_index << CF_CLUSTER_SHIFT; | ^ accel/tcg/watchpoint.c:102:47: error: use of undeclared identifier 'CF_NOIRQ' 102 | cpu->cflags_next_tb = 1 | CF_NOIRQ | curr_cflags(cpu); | ^ target/i386/helper.c:536:28: error: use of undeclared identifier 'CF_PCREL' 536 | if (tcg_cflags_has(cs, CF_PCREL)) { | ^ target/rx/cpu.c:51:21: error: incomplete definition of type 'struct TranslationBlock' 51 | cpu->env.pc = tb->pc; | ~~^ system/physmem.c:2977:9: error: call to undeclared function 'tb_invalidate_phys_range'; ISO C99 and later do not support implicit function declarations [-Wimplicit-function-declaration] 2977 | tb_invalidate_phys_range(addr, addr + length - 1); | ^ plugins/api.c:96:12: error: call to undeclared function 'tb_cflags'; ISO C99 and later do not support implicit function declarations [-Wimplicit-function-declaration] 96 | return tb_cflags(tcg_ctx->gen_tb) & CF_MEMI_ONLY; | ^ Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org> Reviewed-by: Pierrick Bouvier <pierrick.bouvier@linaro.org> Reviewed-by: Richard Henderson <richard.henderson@linaro.org> Message-Id: <20241114011310.3615-5-philmd@linaro.org>
78 lines
2 KiB
C
78 lines
2 KiB
C
/*
|
|
* Internal execution defines for qemu (target specific)
|
|
*
|
|
* Copyright (c) 2003 Fabrice Bellard
|
|
*
|
|
* SPDX-License-Identifier: LGPL-2.1-or-later
|
|
*/
|
|
|
|
#ifndef ACCEL_TCG_INTERNAL_TARGET_H
|
|
#define ACCEL_TCG_INTERNAL_TARGET_H
|
|
|
|
#include "exec/exec-all.h"
|
|
#include "exec/translation-block.h"
|
|
#include "tb-internal.h"
|
|
|
|
/*
|
|
* Access to the various translations structures need to be serialised
|
|
* via locks for consistency. In user-mode emulation access to the
|
|
* memory related structures are protected with mmap_lock.
|
|
* In !user-mode we use per-page locks.
|
|
*/
|
|
#ifdef CONFIG_USER_ONLY
|
|
#define assert_memory_lock() tcg_debug_assert(have_mmap_lock())
|
|
#else
|
|
#define assert_memory_lock()
|
|
#endif
|
|
|
|
#if defined(CONFIG_SOFTMMU) && defined(CONFIG_DEBUG_TCG)
|
|
void assert_no_pages_locked(void);
|
|
#else
|
|
static inline void assert_no_pages_locked(void) { }
|
|
#endif
|
|
|
|
#ifdef CONFIG_USER_ONLY
|
|
static inline void page_table_config_init(void) { }
|
|
#else
|
|
void page_table_config_init(void);
|
|
#endif
|
|
|
|
#ifndef CONFIG_USER_ONLY
|
|
G_NORETURN void cpu_io_recompile(CPUState *cpu, uintptr_t retaddr);
|
|
#endif /* CONFIG_USER_ONLY */
|
|
|
|
/**
|
|
* tcg_req_mo:
|
|
* @type: TCGBar
|
|
*
|
|
* Filter @type to the barrier that is required for the guest
|
|
* memory ordering vs the host memory ordering. A non-zero
|
|
* result indicates that some barrier is required.
|
|
*
|
|
* If TCG_GUEST_DEFAULT_MO is not defined, assume that the
|
|
* guest requires strict ordering.
|
|
*
|
|
* This is a macro so that it's constant even without optimization.
|
|
*/
|
|
#ifdef TCG_GUEST_DEFAULT_MO
|
|
# define tcg_req_mo(type) \
|
|
((type) & TCG_GUEST_DEFAULT_MO & ~TCG_TARGET_DEFAULT_MO)
|
|
#else
|
|
# define tcg_req_mo(type) ((type) & ~TCG_TARGET_DEFAULT_MO)
|
|
#endif
|
|
|
|
/**
|
|
* cpu_req_mo:
|
|
* @type: TCGBar
|
|
*
|
|
* If tcg_req_mo indicates a barrier for @type is required
|
|
* for the guest memory model, issue a host memory barrier.
|
|
*/
|
|
#define cpu_req_mo(type) \
|
|
do { \
|
|
if (tcg_req_mo(type)) { \
|
|
smp_mb(); \
|
|
} \
|
|
} while (0)
|
|
|
|
#endif /* ACCEL_TCG_INTERNAL_H */
|