With x86 we can execute an option ROM either natively or using the x86 emulator (if enabled with CONFIG_BIOSEMU). Both of these share the _X86EMU_env variable, with the native code using it to hold register state during interrupt processing.
At present, in 32-bit U-Boot, the variable is declared twice, once in common code and once in code only compiled with CONFIG_BIOSEMU. With gcc-10 this causes a 'multiple definitions' error on boards with CONFIG_BIOSEMU. Drop the emulator definition, except for 64-bit builds. Also drop inclusion of the emulator in 64-bit U-Boot since this does not work at present, and generally isn't needed if 32-bit code has already set up the option ROMs. Reported-by: Heinrich Schuchardt <xypron.g...@gmx.de> Signed-off-by: Simon Glass <s...@chromium.org> --- drivers/bios_emulator/x86emu/sys.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/drivers/bios_emulator/x86emu/sys.c b/drivers/bios_emulator/x86emu/sys.c index c2db1213fe6..146586b3ceb 100644 --- a/drivers/bios_emulator/x86emu/sys.c +++ b/drivers/bios_emulator/x86emu/sys.c @@ -44,7 +44,11 @@ /*------------------------- Global Variables ------------------------------*/ +/* Definite this here since the emulator is not present on 64-bit */ +#ifdef CONFIG_X86_64 X86EMU_sysEnv _X86EMU_env; /* Global emulator machine state */ +#endif + X86EMU_intrFuncs _X86EMU_intrTab[256]; int debug_intr; -- 2.28.0.526.ge36021eeef-goog