diff options
author | Pete Batard <pete@akeo.ie> | 2018-01-12 21:33:30 +0800 |
---|---|---|
committer | Liming Gao <liming.gao@intel.com> | 2018-02-07 09:49:23 +0800 |
commit | 79195517f8242ccda491a89f551c6838fafe17ac (patch) | |
tree | 268251d34d967ee6086842e79b6da694da6564fd /MdePkg/Include | |
parent | e58427e3964e50caf274d4ba84a984f0cdfcd90d (diff) | |
download | edk2-79195517f8242ccda491a89f551c6838fafe17ac.tar.gz edk2-79195517f8242ccda491a89f551c6838fafe17ac.tar.bz2 edk2-79195517f8242ccda491a89f551c6838fafe17ac.zip |
MdePkg/Include: Add VA list support for VS2017/ARM
VA_START, VA_END and VA_COPY are the same as the generic macros.
VA_ARG was reverse engineered from MS ARM assembly output.
Contributed-under: TianoCore Contribution Agreement 1.1
Signed-off-by: Pete Batard <pete@akeo.ie>
Reviewed-by: Liming Gao <liming.gao@intel.com>
Diffstat (limited to 'MdePkg/Include')
-rw-r--r-- | MdePkg/Include/Base.h | 13 |
1 files changed, 13 insertions, 0 deletions
diff --git a/MdePkg/Include/Base.h b/MdePkg/Include/Base.h index b01e03a03b..a94182f088 100644 --- a/MdePkg/Include/Base.h +++ b/MdePkg/Include/Base.h @@ -668,6 +668,19 @@ struct _LIST_ENTRY { #define VA_COPY(Dest, Start) __va_copy (Dest, Start)
+#elif defined(_M_ARM)
+//
+// MSFT ARM variable argument list support.
+// Same as the generic macros below, except for VA_ARG that needs extra adjustment.
+//
+
+typedef char* VA_LIST;
+
+#define VA_START(Marker, Parameter) (Marker = (VA_LIST) ((UINTN) & (Parameter) + _INT_SIZE_OF(Parameter)))
+#define VA_ARG(Marker, TYPE) (*(TYPE *) ((Marker += _INT_SIZE_OF(TYPE) + ((-(INTN)Marker) & (sizeof(TYPE) - 1))) - _INT_SIZE_OF (TYPE)))
+#define VA_END(Marker) (Marker = (VA_LIST) 0)
+#define VA_COPY(Dest, Start) ((void)((Dest) = (Start)))
+
#elif defined(__GNUC__)
#if defined(MDE_CPU_X64) && !defined(NO_MSABI_VA_FUNCS)
|