target_base_arch() returns the base architecture as in QEMU target/$arch/ path. For example, X86_64 is implemented in the target/i386/ so its QEMU base arch is 'i386'.
Signed-off-by: Philippe Mathieu-Daudé <phi...@linaro.org> --- include/qemu/target-info-impl.h | 2 ++ include/qemu/target-info-qapi.h | 7 +++++++ target-info-stub.c | 1 + target-info.c | 10 ++++++++++ 4 files changed, 20 insertions(+) diff --git a/include/qemu/target-info-impl.h b/include/qemu/target-info-impl.h index a8b34d150ab..c5aea6fa6d2 100644 --- a/include/qemu/target-info-impl.h +++ b/include/qemu/target-info-impl.h @@ -16,6 +16,8 @@ typedef struct TargetInfo { const char *target_name; /* related to TARGET_ARCH definition */ SysEmuTarget target_arch; + /* related to TARGET_BASE_ARCH definition (target/${base_arch}/ path) */ + SysEmuTarget target_base_arch; /* runtime equivalent of TARGET_LONG_BITS definition */ unsigned long_bits; /* runtime equivalent of CPU_RESOLVING_TYPE definition */ diff --git a/include/qemu/target-info-qapi.h b/include/qemu/target-info-qapi.h index dae92c47eb1..5d63fc4ab84 100644 --- a/include/qemu/target-info-qapi.h +++ b/include/qemu/target-info-qapi.h @@ -18,4 +18,11 @@ */ SysEmuTarget target_arch(void); +/** + * target_base_arch: + * + * Returns: QAPI SysEmuTarget enum (i.e. SYS_EMU_TARGET_I386). + */ +SysEmuTarget target_base_arch(void); + #endif diff --git a/target-info-stub.c b/target-info-stub.c index 2e4407ff04b..c0f438b45c4 100644 --- a/target-info-stub.c +++ b/target-info-stub.c @@ -15,6 +15,7 @@ static const TargetInfo target_info_stub = { .target_name = TARGET_NAME, .target_arch = SYS_EMU_TARGET__MAX, + .target_base_arch = SYS_EMU_TARGET__MAX, .long_bits = TARGET_LONG_BITS, .cpu_type = CPU_RESOLVING_TYPE, .machine_typename = TYPE_MACHINE, diff --git a/target-info.c b/target-info.c index 8e29553b4ef..46780ec5450 100644 --- a/target-info.c +++ b/target-info.c @@ -33,6 +33,16 @@ SysEmuTarget target_arch(void) return arch; } +SysEmuTarget target_base_arch(void) +{ + SysEmuTarget base_arch = target_info()->target_base_arch; + + if (base_arch == SYS_EMU_TARGET__MAX) { + base_arch = target_arch(); + } + return base_arch; +} + const char *target_cpu_type(void) { return target_info()->cpu_type; -- 2.49.0