]> git.proxmox.com Git - mirror_edk2.git/blobdiff - EdkCompatibilityPkg/Foundation/Include/EfiStdArg.h
Fixes for ARM build in the EdkCompatibilityPkg and a couple of Xcode fixes for MdePkg.
[mirror_edk2.git] / EdkCompatibilityPkg / Foundation / Include / EfiStdArg.h
index 989b87326b1e78bf542de7d8f9e3a717baabb0dc..97100e95dc92d7c0e0187e0de2235d414a81d8b5 100644 (file)
@@ -60,7 +60,32 @@ Abstract:
 \r
 #define _EFI_INT_SIZE_OF(n) ((sizeof (n) + sizeof (UINTN) - 1) &~(sizeof (UINTN) - 1))\r
 \r
-#if defined(__GNUC__)\r
+#if defined(__CC_ARM)\r
+//\r
+// RVCT ARM variable argument list support.\r
+//\r
+\r
+///\r
+/// Variable used to traverse the list of arguments. This type can vary by \r
+/// implementation and could be an array or structure. \r
+///\r
+#ifdef __APCS_ADSABI\r
+  typedef int         *va_list[1];\r
+  #define VA_LIST     va_list\r
+#else\r
+  typedef struct __va_list { void *__ap; } va_list;\r
+  #define VA_LIST                          va_list\r
+#endif\r
+\r
+#define VA_START(Marker, Parameter)   __va_start(Marker, Parameter)\r
+\r
+#define VA_ARG(Marker, TYPE)          __va_arg(Marker, TYPE)\r
+\r
+#define VA_END(Marker)                ((void)0)\r
+\r
+#define VA_COPY(Dest, Start)          __va_copy (Dest, Start)\r
+\r
+#elif defined(__GNUC__)\r
 //\r
 // Use GCC built-in macros for variable argument lists.\r
 //\r
@@ -77,6 +102,8 @@ typedef __builtin_va_list VA_LIST;
 \r
 #define VA_END(Marker)               __builtin_va_end (Marker)\r
 \r
+#define VA_COPY(Dest, Start)         __builtin_va_copy (Dest, Start)\r
+\r
 #else\r
 \r
 //\r
@@ -88,6 +115,7 @@ typedef CHAR8 *VA_LIST;
 #define VA_START(ap, v) (ap = (VA_LIST) & (v) + _EFI_INT_SIZE_OF (v))\r
 #define VA_ARG(ap, t)   (*(t *) ((ap += _EFI_INT_SIZE_OF (t)) - _EFI_INT_SIZE_OF (t)))\r
 #define VA_END(ap)      (ap = (VA_LIST) 0)\r
+#define VA_COPY(dest, src) ((void)((dest) = (src)))\r
 \r
 #endif\r
 \r