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

Reply via email to