Introduce legacy_binary_is_64bit() to check at runtime if a binary is compiled with TARGET_LONG_BITS == 64.
Signed-off-by: Philippe Mathieu-Daudé <phi...@linaro.org> --- include/qemu/legacy_binary_info.h | 3 +++ legacy_binary_info.c | 37 +++++++++++++++++++++++++++++++ 2 files changed, 40 insertions(+) diff --git a/include/qemu/legacy_binary_info.h b/include/qemu/legacy_binary_info.h index ae67399ebf2..2d42e852b7a 100644 --- a/include/qemu/legacy_binary_info.h +++ b/include/qemu/legacy_binary_info.h @@ -11,4 +11,7 @@ void legacy_binary_info_init(const char *argv0); +/* Return runtime equivalent of TARGET_LONG_BITS == 64 check */ +bool legacy_binary_is_64bit(void); + #endif diff --git a/legacy_binary_info.c b/legacy_binary_info.c index 0c50fc9248a..be50d3f50ea 100644 --- a/legacy_binary_info.c +++ b/legacy_binary_info.c @@ -13,6 +13,7 @@ typedef struct LegacyBinaryInfo { const char *binary_name; QemuArchBit arch_bit; + unsigned long_bits; } LegacyBinaryInfo; /* List alphabetically sorted by binary_name */ @@ -20,118 +21,147 @@ static const LegacyBinaryInfo legacy_binary_infos[] = { { .binary_name = "qemu-system-aarch64", .arch_bit = QEMU_ARCH_BIT_ARM, + .long_bits = 64, }, { .binary_name = "qemu-system-alpha", .arch_bit = QEMU_ARCH_BIT_ALPHA, + .long_bits = 64, }, { .binary_name = "qemu-system-arm", .arch_bit = QEMU_ARCH_BIT_ARM, + .long_bits = 32, }, { .binary_name = "qemu-system-avr", .arch_bit = QEMU_ARCH_BIT_AVR, + .long_bits = 32, }, { .binary_name = "qemu-system-hppa", .arch_bit = QEMU_ARCH_BIT_HPPA, + .long_bits = 64, }, { .binary_name = "qemu-system-i386", .arch_bit = QEMU_ARCH_BIT_I386, + .long_bits = 32, }, { .binary_name = "qemu-system-loongarch64", .arch_bit = QEMU_ARCH_BIT_LOONGARCH, + .long_bits = 64, }, { .binary_name = "qemu-system-m68k", .arch_bit = QEMU_ARCH_BIT_M68K, + .long_bits = 32, }, { .binary_name = "qemu-system-microblaze", .arch_bit = QEMU_ARCH_BIT_MICROBLAZE, + .long_bits = 64, }, { .binary_name = "qemu-system-microblazeel", .arch_bit = QEMU_ARCH_BIT_MICROBLAZE, + .long_bits = 64, }, { .binary_name = "qemu-system-mips", .arch_bit = QEMU_ARCH_BIT_MIPS, + .long_bits = 64, }, { .binary_name = "qemu-system-mips64", .arch_bit = QEMU_ARCH_BIT_MIPS, + .long_bits = 64, }, { .binary_name = "qemu-system-mips64el", .arch_bit = QEMU_ARCH_BIT_MIPS, + .long_bits = 64, }, { .binary_name = "qemu-system-mipsel", .arch_bit = QEMU_ARCH_BIT_MIPS, + .long_bits = 32, }, { .binary_name = "qemu-system-or1k", .arch_bit = QEMU_ARCH_BIT_OPENRISC, + .long_bits = 32, }, { .binary_name = "qemu-system-ppc", .arch_bit = QEMU_ARCH_BIT_PPC, + .long_bits = 32, }, { .binary_name = "qemu-system-ppc64", .arch_bit = QEMU_ARCH_BIT_PPC, + .long_bits = 64, }, { .binary_name = "qemu-system-riscv32", .arch_bit = QEMU_ARCH_BIT_RISCV, + .long_bits = 32, }, { .binary_name = "qemu-system-riscv64", .arch_bit = QEMU_ARCH_BIT_RISCV, + .long_bits = 64, }, { .binary_name = "qemu-system-rx", .arch_bit = QEMU_ARCH_BIT_RX, + .long_bits = 32, }, { .binary_name = "qemu-system-s390x", .arch_bit = QEMU_ARCH_BIT_S390X, + .long_bits = 64, }, { .binary_name = "qemu-system-sh4", .arch_bit = QEMU_ARCH_BIT_SH4, + .long_bits = 32, }, { .binary_name = "qemu-system-sh4eb", .arch_bit = QEMU_ARCH_BIT_SH4, + .long_bits = 32, }, { .binary_name = "qemu-system-sparc", .arch_bit = QEMU_ARCH_BIT_SPARC, + .long_bits = 32, }, { .binary_name = "qemu-system-sparc64", .arch_bit = QEMU_ARCH_BIT_SPARC, + .long_bits = 64, }, { .binary_name = "qemu-system-tricore", .arch_bit = QEMU_ARCH_BIT_TRICORE, + .long_bits = 32, }, { .binary_name = "qemu-system-x86_64", .arch_bit = QEMU_ARCH_BIT_I386, + .long_bits = 64, }, { .binary_name = "qemu-system-xtensa", .arch_bit = QEMU_ARCH_BIT_XTENSA, + .long_bits = 32, }, { .binary_name = "qemu-system-xtensaeb", .arch_bit = QEMU_ARCH_BIT_XTENSA, + .long_bits = 32, }, }; @@ -151,6 +181,7 @@ void legacy_binary_info_init(const char *argv0) for (size_t i = 0; i < ARRAY_SIZE(legacy_binary_infos); i++) { if (!strcmp(legacy_binary_infos[i].binary_name, binary_name)) { + assert(legacy_binary_infos[i].long_bits); current_index = i; return; } @@ -158,3 +189,9 @@ void legacy_binary_info_init(const char *argv0) fprintf(stderr, "Missing legacy info for '%s' binary.\n", binary_name); abort(); } + +bool legacy_binary_is_64bit(void) +{ + assert(current_index != -1); + return legacy_binary_infos[current_index].long_bits == 64; +} -- 2.47.1