// return Result\r
// }\r
//\r
+#if defined(__GNUC__)\r
+//\r
+// In GCC compiler, its behavior for statically linked varargs is different with MSFT tool chain.\r
+// Should use __builtin_* intrinsic functions provided by GCC compiler to access varargs.\r
+//\r
+typedef __builtin_va_list VA_LIST;\r
+\r
+#define VA_START(Marker, Parameter) __builtin_va_start(Marker, Parameter)\r
+\r
+#define VA_ARG(Marker, TYPE) __builtin_va_arg(Marker, TYPE)\r
\r
+#define VA_END(Marker) __builtin_va_end(Marker)\r
+\r
+#else\r
/**\r
Return the size of argument that has been aligned to sizeof (UINTN).\r
\r
**/\r
#define VA_END(Marker) (Marker = (VA_LIST) 0)\r
\r
+#endif\r
+\r
/**\r
Macro that returns the byte offset of a field in a data structure. \r
\r