It's confirmed it is a GCC6 regression bug: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=70955
Steven Shi Intel\SSG\STO\UEFI Firmware Tel: +86 021-61166522 iNet: 821-6522 From: Shi, Steven Sent: Tuesday, August 23, 2016 4:10 PM To: 'Bruce Cran' <[email protected]>; 'Michael Zimmermann' <[email protected]> Cc: 'edk2-devel-01' <[email protected]> Subject: RE: [edk2] OVMF not booting when built with GCC5 toolset? Hi Cran, This issue might be a GCC6 LTO regression bug, and I've filed a bug to GCC community as below. Please don't use the GCC6 with edk2 GCC5 toolchain for now, the GCC5 (gcc-5) should works. https://gcc.gnu.org/bugzilla/show_bug.cgi?id=77341 https://gcc.gnu.org/bugzilla/show_bug.cgi?id=50818 GCC6.10 lto fails to support below MS ABI buildin of va list, but GCC5 works. This is a regression bug for GCC6. I suspect current GCC trunk also has this regression bug. __builtin_ms_va_list ap; __builtin_ms_va_start (ap, n); __builtin_ms_va_end (ap); Below is my testcase: $cat test2.c #include <stdio.h> int __attribute__((ms_abi)) foo (int n, ...) { __builtin_ms_va_list ap; int sum = 0; __builtin_ms_va_start (ap, n); while (n--) { sum += __builtin_va_arg (ap, int); printf("sum = %d\n", sum); } __builtin_ms_va_end (ap); return sum; } int main () { int res = foo (10, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10); if (res != 55) __builtin_abort (); return 0; } $ gcc --version gcc (GCC) 6.1.0 $ gcc -flto -Os test2.c $ ./a.out Segmentation fault (core dumped) $ gcc-5 -flto -Os test2.c $ ./a.out sum = 1 sum = 3 sum = 6 sum = 10 sum = 15 sum = 21 sum = 28 sum = 36 sum = 45 sum = 55 Steven Shi Intel\SSG\STO\UEFI Firmware Tel: +86 021-61166522 iNet: 821-6522 _______________________________________________ edk2-devel mailing list [email protected] https://lists.01.org/mailman/listinfo/edk2-devel

