Add a helper returning whether a target support variable page sizes (only ARM targets so far).
Signed-off-by: Philippe Mathieu-Daudé <[email protected]> --- include/qemu/target-info-impl.h | 2 ++ include/qemu/target-info.h | 7 +++++++ configs/targets/aarch64-softmmu.c | 1 + configs/targets/arm-softmmu.c | 1 + target-info-stub.c | 5 +++++ target-info.c | 5 +++++ 6 files changed, 21 insertions(+) diff --git a/include/qemu/target-info-impl.h b/include/qemu/target-info-impl.h index e446585bf53..537aad04fa8 100644 --- a/include/qemu/target-info-impl.h +++ b/include/qemu/target-info-impl.h @@ -19,6 +19,8 @@ typedef struct TargetInfo { SysEmuTarget target_arch; /* runtime equivalent of TARGET_LONG_BITS definition */ unsigned long_bits; + /* runtime equivalent of TARGET_PAGE_BITS_VARY definition */ + bool page_bits_vary; /* runtime equivalent of CPU_RESOLVING_TYPE definition */ const char *cpu_type; /* QOM typename machines for this binary must implement */ diff --git a/include/qemu/target-info.h b/include/qemu/target-info.h index e3287334304..0d2269e0401 100644 --- a/include/qemu/target-info.h +++ b/include/qemu/target-info.h @@ -23,6 +23,13 @@ const char *target_name(void); */ unsigned target_long_bits(void); +/** + * target_page_bits_vary: + * + * Returns: whether the target support variable page sizes + */ +bool target_page_bits_vary(void); + /** * target_machine_typename: * diff --git a/configs/targets/aarch64-softmmu.c b/configs/targets/aarch64-softmmu.c index 4e1e2f64da1..f9fb73a41c6 100644 --- a/configs/targets/aarch64-softmmu.c +++ b/configs/targets/aarch64-softmmu.c @@ -15,6 +15,7 @@ static const TargetInfo target_info_aarch64_system = { .target_name = "aarch64", .target_arch = SYS_EMU_TARGET_AARCH64, .long_bits = 64, + .page_bits_vary = true, .cpu_type = TYPE_ARM_CPU, .machine_typename = TYPE_TARGET_AARCH64_MACHINE, .endianness = ENDIAN_MODE_LITTLE, diff --git a/configs/targets/arm-softmmu.c b/configs/targets/arm-softmmu.c index 9b3fdd2854a..a3bca3c9f0d 100644 --- a/configs/targets/arm-softmmu.c +++ b/configs/targets/arm-softmmu.c @@ -15,6 +15,7 @@ static const TargetInfo target_info_arm_system = { .target_name = "arm", .target_arch = SYS_EMU_TARGET_ARM, .long_bits = 32, + .page_bits_vary = true, .cpu_type = TYPE_ARM_CPU, .machine_typename = TYPE_TARGET_ARM_MACHINE, .endianness = ENDIAN_MODE_LITTLE, diff --git a/target-info-stub.c b/target-info-stub.c index 65220cc7820..a6a080295f0 100644 --- a/target-info-stub.c +++ b/target-info-stub.c @@ -20,6 +20,11 @@ static const TargetInfo target_info_stub = { .target_name = TARGET_NAME, .target_arch = glue(SYS_EMU_TARGET_, TARGET_ARCH), .long_bits = TARGET_LONG_BITS, +#ifdef TARGET_PAGE_BITS_VARY + .page_bits_vary = true, +#else + .page_bits_vary = false, +#endif .cpu_type = CPU_RESOLVING_TYPE, .machine_typename = TYPE_MACHINE, .endianness = TARGET_BIG_ENDIAN ? ENDIAN_MODE_BIG : ENDIAN_MODE_LITTLE, diff --git a/target-info.c b/target-info.c index a26532f660f..06bf329de72 100644 --- a/target-info.c +++ b/target-info.c @@ -22,6 +22,11 @@ unsigned target_long_bits(void) return target_info()->long_bits; } +bool target_page_bits_vary(void) +{ + return target_info()->page_bits_vary; +} + SysEmuTarget target_arch(void) { return target_info()->target_arch; -- 2.52.0
