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


Reply via email to