+#if defined(_MSC_EXTENSIONS) && !defined (MDE_CPU_EBC)\r
+ #pragma intrinsic(_ReturnAddress)\r
+ /**\r
+ Get the return address of the calling funcation.\r
+\r
+ Based on intrinsic function _ReturnAddress that provides the address of\r
+ the instruction in the calling function that will be executed after\r
+ control returns to the caller.\r
+\r
+ @param L Return Level.\r
+\r
+ @return The return address of the calling funcation or 0 if L != 0.\r
+\r
+ **/\r
+ #define RETURN_ADDRESS(L) ((L == 0) ? _ReturnAddress() : (VOID *) 0)\r
+#elif defined(__GNUC__)\r
+ void * __builtin_return_address (unsigned int level);\r
+ /**\r
+ Get the return address of the calling funcation.\r
+\r
+ Based on built-in Function __builtin_return_address that returns\r
+ the return address of the current function, or of one of its callers.\r
+\r
+ @param L Return Level.\r
+\r
+ @return The return address of the calling funcation.\r
+\r
+ **/\r
+ #define RETURN_ADDRESS(L) __builtin_return_address (L)\r
+#else\r
+ /**\r
+ Get the return address of the calling funcation.\r
+\r
+ @param L Return Level.\r
+\r
+ @return 0 as compilers don't support this feature.\r
+\r
+ **/\r
+ #define RETURN_ADDRESS(L) ((VOID *) 0)\r
+#endif\r
+\r