Revision: 16704
http://sourceforge.net/p/edk2/code/16704
Author: vanjeff
Date: 2015-02-03 07:27:25 +0000 (Tue, 03 Feb 2015)
Log Message:
-----------
MdePkg: Add RETURN_ADDRESS macro into Base.h.
(Sync patch r16334 from main trunk.)
Based on compiler intrinsic function.
MSVC: _ReturnAddress
GCC: __builtin_return_address
Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Star Zeng <[email protected]>
Reviewed-by: Jiewen Yao <[email protected]>
Revision Links:
--------------
http://sourceforge.net/p/edk2/code/16334
Modified Paths:
--------------
branches/UDK2014.SP1/MdePkg/Include/Base.h
Modified: branches/UDK2014.SP1/MdePkg/Include/Base.h
===================================================================
--- branches/UDK2014.SP1/MdePkg/Include/Base.h 2015-02-03 07:12:39 UTC (rev
16703)
+++ branches/UDK2014.SP1/MdePkg/Include/Base.h 2015-02-03 07:27:25 UTC (rev
16704)
@@ -6,7 +6,7 @@
environment. There are a set of base libraries in the Mde Package that can
be used to implement base modules.
-Copyright (c) 2006 - 2013, Intel Corporation. All rights reserved.<BR>
+Copyright (c) 2006 - 2014, Intel Corporation. All rights reserved.<BR>
Portions copyright (c) 2008 - 2009, Apple Inc. All rights reserved.<BR>
This program and the accompanying materials
are licensed and made available under the terms and conditions of the BSD
License
@@ -1016,5 +1016,26 @@
#define SIGNATURE_64(A, B, C, D, E, F, G, H) \
(SIGNATURE_32 (A, B, C, D) | ((UINT64) (SIGNATURE_32 (E, F, G, H)) << 32))
+#if defined(_MSC_EXTENSIONS)
+ //
+ // Intrinsic function provides the address of the instruction in the calling
+ // function that will be executed after control returns to the caller.
+ //
+ #pragma intrinsic(_ReturnAddress)
+ #define RETURN_ADDRESS(L) ((L == 0) ? _ReturnAddress() : (VOID *) 0)
+#elif defined(__GNUC__)
+ //
+ // Built-in Function returns the return address of the current function,
+ // or of one of its callers.
+ //
+ void * __builtin_return_address (unsigned int level);
+ #define RETURN_ADDRESS(L) __builtin_return_address (L)
+#else
+ //
+ // Compilers don't support this feature.
+ //
+ #define RETURN_ADDRESS(L) ((VOID *) 0)
#endif
+#endif
+
------------------------------------------------------------------------------
Dive into the World of Parallel Programming. The Go Parallel Website,
sponsored by Intel and developed in partnership with Slashdot Media, is your
hub for all things parallel software development, from weekly thought
leadership blogs to news, videos, case studies, tutorials and more. Take a
look and join the conversation now. http://goparallel.sourceforge.net/
_______________________________________________
edk2-commits mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/edk2-commits