diff options
author | Richard Henderson <richard.henderson@linaro.org> | 2025-02-02 15:09:23 -0800 |
---|---|---|
committer | Richard Henderson <richard.henderson@linaro.org> | 2025-02-08 12:41:33 -0800 |
commit | acce728cbc6c154b215dfc8d05c12d8fcc2483d5 (patch) | |
tree | 1b3531dc21fae32163c4f7d873f9759fd8491a7d | |
parent | 175646f64178ba5bfebd6312ac2acd4e1a0e9451 (diff) | |
download | qemu-acce728cbc6c154b215dfc8d05c12d8fcc2483d5.zip qemu-acce728cbc6c154b215dfc8d05c12d8fcc2483d5.tar.gz qemu-acce728cbc6c154b215dfc8d05c12d8fcc2483d5.tar.bz2 |
meson: Disallow 64-bit on 32-bit emulation
For system mode, we can rarely support the amount of RAM that
the guest requires. TCG emulation is restricted to round-robin
mode, which solves many of the atomicity issues, but not those
associated with virtio. In any case, round-robin does nothing
to help the speed of emulation.
For user mode, most emulation does not succeed at all. Most
of the time we cannot even load 64-bit non-PIE binaries due
to lack of a 64-bit address space. Threads are run in
parallel, not round-robin, which means that atomicity
is not handled.
Reviewed-by: Thomas Huth <thuth@redhat.com>
Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
-rw-r--r-- | meson.build | 13 |
1 files changed, 10 insertions, 3 deletions
diff --git a/meson.build b/meson.build index 85317cd..ec51827 100644 --- a/meson.build +++ b/meson.build @@ -3185,6 +3185,9 @@ if host_os == 'windows' endif endif +# Detect host pointer size for the target configuration loop. +host_long_bits = cc.sizeof('void *') * 8 + ######################## # Target configuration # ######################## @@ -3277,8 +3280,14 @@ foreach target : target_dirs } endif + config_target += keyval.load('configs/targets' / target + '.mak') + target_kconfig = [] foreach sym: accelerators + # Disallow 64-bit on 32-bit emulation and virtualization + if host_long_bits < config_target['TARGET_LONG_BITS'].to_int() + continue + endif if sym == 'CONFIG_TCG' or target in accelerator_targets.get(sym, []) config_target += { sym: 'y' } config_all_accel += { sym: 'y' } @@ -3292,9 +3301,6 @@ foreach target : target_dirs error('No accelerator available for target @0@'.format(target)) endif - config_target += keyval.load('configs/targets' / target + '.mak') - config_target += { 'TARGET_' + config_target['TARGET_ARCH'].to_upper(): 'y' } - if 'TARGET_NEED_FDT' in config_target and not fdt.found() if default_targets warning('Disabling ' + target + ' due to missing libfdt') @@ -3307,6 +3313,7 @@ foreach target : target_dirs actual_target_dirs += target # Add default keys + config_target += { 'TARGET_' + config_target['TARGET_ARCH'].to_upper(): 'y' } if 'TARGET_BASE_ARCH' not in config_target config_target += {'TARGET_BASE_ARCH': config_target['TARGET_ARCH']} endif |