/** @file\r
- The header <stdarg.h> declares a type and defines three macros, for advancing\r
- through a list of arguments whose number and types are not known to the\r
- called function when it is translated.\r
-\r
- A function may be called with a variable number of arguments of varying types.\r
- Its parameter list contains one or more parameters. The rightmost parameter\r
- plays a special role in the access mechanism, and will be designated paramN\r
- in this description.\r
-\r
- The type va_list is a type suitable for holding information needed by the\r
- macros va_start, va_arg, and va_end. If access to the varying arguments\r
- is desired, the called function shall declare an object (referred to as ap\r
- in these descriptions) having type va_list. The object ap may be passed as\r
- an argument to another function; if that function invokes the va_arg macro\r
- with parameter ap, the value of ap in the calling function is indeterminate\r
- and shall be passed to the va_end macro prior to any further reference to ap.\r
-\r
- The va_start and va_arg macros shall be implemented as macros, not as actual\r
- functions. It is unspecified, by the C library standards, whether va_end\r
- is a macro or an identifier declared with external linkage. If a macro\r
- definition is suppressed in order to access an actual function, or a\r
- program defines an external identifier with the name va_end, the behavior\r
- is undefined. The va_start and va_end macros shall be invoked in the\r
- function accepting a varying number of arguments, if access to the varying\r
- arguments is desired.\r
-\r
-Copyright (c) 2010, Intel Corporation. All rights reserved.<BR>\r
-This program and the accompanying materials are licensed and made available under\r
-the terms and conditions of the BSD License that accompanies this distribution.\r
-The full text of the license may be found at\r
-http://opensource.org/licenses/bsd-license.php.\r
-\r
-THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
-WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
-\r
+ This header, <stdarg.h>, declares type va_list and defines macros: va_start, va_arg, va_end;\r
+ for advancing through a list of arguments whose number and types are not known to the\r
+ called function when it is translated.\r
+\r
+ A function may be called with a variable number of arguments of varying types.\r
+ The rightmost argument plays a special role in the access mechanism, and will\r
+ be designated paramN in this and subsequent descriptions.\r
+\r
+ The type va_list is a type suitable for holding information needed by the\r
+ macros va_start, va_arg, and va_end. If access to the varying arguments\r
+ is desired, the called function shall declare an object (referred to as ap\r
+ in these descriptions) having type va_list. The object ap may be passed as\r
+ an argument to another function; if the receiving function invokes the va_arg macro\r
+ with parameter ap, the value of ap in the calling function becomes indeterminate\r
+ and must be passed to the va_end macro prior to any further reference to ap.\r
+\r
+ The va_start and va_arg macros must be implemented as macros, not as actual\r
+ functions. The va_start and va_end macros must be invoked in the\r
+ function accepting a varying number of arguments, if access to the varying\r
+ arguments is desired.\r
+\r
+ Copyright (c) 2010 - 2011, Intel Corporation. All rights reserved.<BR>\r
+ This program and the accompanying materials are licensed and made available under\r
+ the terms and conditions of the BSD License that accompanies this distribution.\r
+ The full text of the license may be found at\r
+ http://opensource.org/licenses/bsd-license.\r
+\r
+ THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
+ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
**/\r
#ifndef _STDARG_H\r
#define _STDARG_H\r
#include <sys/EfiCdefs.h>\r
\r
-/** The type va_list is a type suitable for holding information needed by the\r
+/** @{\r
+ The type va_list is a type suitable for holding information needed by the\r
macros va_start, va_arg, and va_end.\r
+\r
+ Depending upon compiler or CPU architecture, different definitions are required.\r
**/\r
#if defined(__GNUC__)\r
typedef __builtin_va_list va_list;\r
#else\r
#define va_list VA_LIST\r
#endif\r
+/*@}*/\r
\r
-/** The va_start macro shall be invoked before any access to the unnamed arguments.\r
+/** @{\r
+ The va_start macro must be invoked before any access to the unnamed arguments.\r
The va_start macro initializes ap for subsequent use by va_arg and va_end.\r
\r
Synopsys: void va_start(va_list ap, paramN);\r
#else\r
#define va_start VA_START\r
#endif\r
+/*@}*/\r
\r
-/** The va_arg macro expands to an expression that has the type and value of\r
+/** @{\r
+ The va_arg macro expands to an expression that has the type and value of\r
the next argument in the call. The parameter ap shall be the same as the\r
va_list ap initialized by va_start. Each invocation of va_arg modifies ap\r
so that the values of successive arguments are returned in turn. The\r
#else\r
#define va_arg VA_ARG\r
#endif\r
+/*@}*/\r
\r
-/** The va_end macro facillitates a normal return from the function whose\r
+/** @{\r
+ The va_end macro facillitates a normal return from the function whose\r
variable argument list was referred to by the expansion of va_start that\r
initialized the va_list ap.\r
\r
#else\r
#define va_end VA_END\r
#endif\r
+/*@}*/\r
\r
-/** For BSD compatibility. **/\r
+/** @{\r
+ For BSD compatibility.\r
+**/\r
#if defined(__GNUC__)\r
#define va_copy __builtin_va_copy\r
#else\r
#define va_copy(s,d) (s) = (d)\r
#endif\r
+/*@}*/\r
\r
#endif /* _STDARG_H */\r