Message ID | 1455048108-5045-9-git-send-email-andrew.cooper3@citrix.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
>>> On 09.02.16 at 21:01, <andrew.cooper3@citrix.com> wrote: > Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com> > --- > CC: Jan Beulich <JBeulich@suse.com> > > What is the GCC version check supposed to be achieving here? GCC has > supported this syntax since 3.0 This is best answered by looking at where we've got these headers from - the gnu-efi package. It has ... > --- a/xen/include/asm-x86/x86_64/efibind.h > +++ b/xen/include/asm-x86/x86_64/efibind.h > @@ -274,7 +274,7 @@ typedef uint64_t UINTN; > #endif > #endif > > -#if __GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4) > +#if __GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4) || __clang__ > #define uefi_call_wrapper(func, va_num, ...) func(__VA_ARGS__) > #else > /* for x86_64, EFI_FUNCTION_WRAPPER must be defined */ /* for x86_64, EFI_FUNCTION_WRAPPER must be defined */ #if defined(HAVE_USE_MS_ABI) #define uefi_call_wrapper(func, va_num, ...) func(__VA_ARGS__) #else UINTN uefi_call_wrapper(void *func, unsigned long va_num, ...); #endif #define EFI_FUNCTION __attribute__((ms_abi)) I think this makes clear that the needed feature here is the attribute, which certainly wasn't available in older gcc. With that the question is whether the Clang case won't also need a version check, since I can't imagine them having supported this prior to gcc introducing it. Jan
On 10/02/16 13:31, Jan Beulich wrote: >>>> On 09.02.16 at 21:01, <andrew.cooper3@citrix.com> wrote: >> Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com> >> --- >> CC: Jan Beulich <JBeulich@suse.com> >> >> What is the GCC version check supposed to be achieving here? GCC has >> supported this syntax since 3.0 > This is best answered by looking at where we've got these headers > from - the gnu-efi package. It has ... > >> --- a/xen/include/asm-x86/x86_64/efibind.h >> +++ b/xen/include/asm-x86/x86_64/efibind.h >> @@ -274,7 +274,7 @@ typedef uint64_t UINTN; >> #endif >> #endif >> >> -#if __GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4) >> +#if __GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4) || __clang__ >> #define uefi_call_wrapper(func, va_num, ...) func(__VA_ARGS__) >> #else >> /* for x86_64, EFI_FUNCTION_WRAPPER must be defined */ > /* for x86_64, EFI_FUNCTION_WRAPPER must be defined */ > #if defined(HAVE_USE_MS_ABI) > #define uefi_call_wrapper(func, va_num, ...) func(__VA_ARGS__) > #else > UINTN uefi_call_wrapper(void *func, unsigned long va_num, ...); > #endif > #define EFI_FUNCTION __attribute__((ms_abi)) > > I think this makes clear that the needed feature here is the > attribute, which certainly wasn't available in older gcc. > > With that the question is whether the Clang case won't also need > a version check, since I can't imagine them having supported this > prior to gcc introducing it. Clang has an substantially more sane way than GCC of checking for individual features. I will introduce and use the __has_{attribute,feature}() infrastructure to tests like this. Experimentally, Clang 3.5 does have ms_abi support ~Andrew
diff --git a/xen/include/asm-x86/x86_64/efibind.h b/xen/include/asm-x86/x86_64/efibind.h index 2db3568..af5f424 100644 --- a/xen/include/asm-x86/x86_64/efibind.h +++ b/xen/include/asm-x86/x86_64/efibind.h @@ -274,7 +274,7 @@ typedef uint64_t UINTN; #endif #endif -#if __GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4) +#if __GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4) || __clang__ #define uefi_call_wrapper(func, va_num, ...) func(__VA_ARGS__) #else /* for x86_64, EFI_FUNCTION_WRAPPER must be defined */
Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com> --- CC: Jan Beulich <JBeulich@suse.com> What is the GCC version check supposed to be achieving here? GCC has supported this syntax since 3.0 --- xen/include/asm-x86/x86_64/efibind.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)