Add a helper returning whether a target support variable
page sizes (only ARM targets so far).
Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
---
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