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