u-boot-brain/arch
Bin Meng a139cc1865 x86: Specify -march=core2 to build 64-bit U-Boot proper
With newer kernel.org GCC (7.3.0 or 8.1.0), the u-boot.rom image
built for qemu-x86_64 target does not boot. It keeps resetting
soon after the 32-bit SPL jumps to 64-bit proper. Debugging shows
that the reset happens inside env_callback_init().

000000000113dd85 <env_callback_init>:
 113dd85:       41 54                   push   %r12
 113dd87:       55                      push   %rbp
 113dd88:       31 c0                   xor    %eax,%eax
 113dd8a:       53                      push   %rbx
 113dd8b:       0f 57 c0                xorps  %xmm0,%xmm0

Executing "xorps %xmm0,%xmm0" causes CPU to immediately reset.
However older GCC like 5.4.0 (the one shipped by Ubuntu 16.04)
does not generate such instructions that utilizes SSE for this
function - env_callback_init() and U-Boot boots without any issue.
Explicitly specifying -march=core2 for newer GCC allows U-Boot
proper to boot again. Examine assembly codes of env_callback_init
and there is no SSE instruction in that function hence U-Boot
continues to boot.

core2 seems to be the oldest arch in GCC that supports 64-bit.
Like 32-bit U-Boot build we use -march=i386 which is the most
conservative cpu type so that the image can run on any x86
processor, let's do the same for the 64-bit U-Boot build.

Signed-off-by: Bin Meng <bmeng.cn@gmail.com>
Reviewed-by: Heinrich Schuchardt <xypron.glpk@gmx.de>
Reviewed-by: Simon Glass <sjg@chromium.org>
2018-10-22 17:51:45 +08:00
..
arc ARC: Don't use COMMON section for global not-initialized variables 2018-10-15 13:35:17 +03:00
arm Convert CONFIG_FLASH_CFI_DRIVER et al to Kconfig 2018-10-19 19:19:50 -04:00
m68k m68k: ColdFire mcf5441x, add eSDHC support 2018-09-16 00:01:13 +02:00
microblaze arch: types.h: factor out fixed width typedefs to int-ll64.h 2018-09-10 20:48:16 -04:00
mips mips: use asm-generic/atomic.h 2018-09-25 21:49:18 -04:00
nds32 config.mk: Remove duplicated -fno-strict-aliasing 2018-09-25 21:50:34 -04:00
nios2 .gitignore: move *.dtb and *.dtb.S patterns to the top-level .gitignore 2018-06-18 14:43:12 -04:00
powerpc powerpc: dts: Enable device tree support for T2080QDS 2018-09-27 10:14:14 -07:00
riscv riscv: allow native compilation 2018-10-03 17:49:44 +08:00
sandbox test: Add PCI device entry without compat string and with DT node 2018-10-20 15:23:38 -04:00
sh sh: tmu: Zap get_tbclk and timer_read_counter 2018-09-15 03:19:07 +02:00
x86 x86: Specify -march=core2 to build 64-bit U-Boot proper 2018-10-22 17:51:45 +08:00
xtensa xtensa: use asm-generic/atomic.h 2018-09-25 21:49:18 -04:00
.gitignore
Kconfig Kconfig: sandbox: enable cmd_avb and dependencies 2018-10-07 13:34:19 -04:00