Hi Cran,
This issue is just fixed in GCC main trunk. I tried below latest GCC trunk 
version and it can pass build the edk2 with GCC5 toolset. FYI.

$ gcc --version
gcc (GCC) 7.0.0 20160828 (experimental)


Steven Shi
Intel\SSG\STO\UEFI Firmware

Tel: +86 021-61166522
iNet: 821-6522

From: Shi, Steven
Sent: Tuesday, August 23, 2016 6:49 PM
To: 'Bruce Cran' <[email protected]>; 'Michael Zimmermann' 
<[email protected]>
Cc: 'edk2-devel-01' <[email protected]>; Lu, Hongjiu 
<[email protected]>
Subject: RE: [edk2] OVMF not booting when built with GCC5 toolset?

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]<mailto:[email protected]>>; 'Michael 
Zimmermann' <[email protected]<mailto:[email protected]>>
Cc: 'edk2-devel-01' <[email protected]<mailto:[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

Reply via email to