#define VA_END(Marker) (Marker = (VA_LIST) 0)\r
#define VA_COPY(Dest, Start) ((void)((Dest) = (Start)))\r
\r
-#elif defined(__GNUC__)\r
+#elif defined(__GNUC__) || defined(__clang__)\r
\r
-#if defined(MDE_CPU_X64) && !defined(NO_MSABI_VA_FUNCS)\r
+#if defined(MDE_CPU_X64) && !defined(NO_MSABI_VA_FUNCS) && !defined(__clang__)\r
//\r
// X64 only. Use MS ABI version of GCC built-in macros for variable argument lists.\r
//\r
\r
**/\r
#define RETURN_ADDRESS(L) ((L == 0) ? _ReturnAddress() : (VOID *) 0)\r
-#elif defined(__GNUC__)\r
+#elif defined (__GNUC__) || defined (__clang__)\r
void * __builtin_return_address (unsigned int level);\r
/**\r
Get the return address of the calling function.\r
/// Microsoft* compiler specific method for EFIAPI calling convention.\r
///\r
#define EFIAPI __cdecl\r
-#elif defined(__GNUC__)\r
+#elif defined(__GNUC__) || defined(__clang__)\r
///\r
/// GCC specific method for EFIAPI calling convention.\r
///\r
#define EFIAPI\r
#endif\r
\r
-#if defined(__GNUC__)\r
+#if defined(__GNUC__) || defined(__clang__)\r
///\r
/// For GNU assembly code, .global or .globl can declare global symbols.\r
/// Define this macro to unify the usage.\r
#define EFIAPI\r
#endif\r
\r
-#if defined(__GNUC__)\r
+#if defined(__GNUC__) || defined(__clang__)\r
///\r
/// For GNU assembly code, .global or .globl can declare global symbols.\r
/// Define this macro to unify the usage.\r