-\r
/** @file\r
Processor or Compiler specific defines and types for ARM.\r
\r
- Copyright (c) 2006 - 2009, Intel Corporation<BR> \r
- Portions copyright (c) 2008-2009 Apple Inc. All rights reserved.<BR>\r
- All rights reserved. This program and the accompanying materials \r
+ Copyright (c) 2006 - 2013, Intel Corporation. All rights reserved.<BR>\r
+ Portions copyright (c) 2008 - 2009, Apple Inc. All rights reserved.<BR>\r
+ This program and the accompanying materials \r
are licensed and made available under the terms and conditions of the BSD License \r
which accompanies this distribution. The full text of the license may be found at \r
http://opensource.org/licenses/bsd-license.php \r
\r
#if _MSC_EXTENSIONS \r
//\r
- // use Microsoft* C complier dependent interger width types \r
+ // use Microsoft* C complier dependent integer width types \r
//\r
typedef unsigned __int64 UINT64;\r
typedef __int64 INT64;\r
typedef unsigned char BOOLEAN;\r
typedef unsigned char UINT8;\r
typedef char CHAR8;\r
- typedef char INT8;\r
+ typedef signed char INT8;\r
#else\r
//\r
// Assume standard ARM alignment. \r
typedef unsigned char BOOLEAN;\r
typedef unsigned char UINT8;\r
typedef char CHAR8;\r
- typedef char INT8;\r
+ typedef signed char INT8;\r
#endif\r
\r
///\r
///\r
#define MAX_ADDRESS 0xFFFFFFFF\r
\r
+///\r
+/// Maximum legal ARM INTN and UINTN values.\r
+///\r
+#define MAX_INTN ((INTN)0x7FFFFFFF)\r
+#define MAX_UINTN ((UINTN)0xFFFFFFFF)\r
+\r
///\r
/// The stack alignment required for ARM\r
///\r
//\r
#define EFIAPI \r
\r
-#if defined(__GNUC__)\r
+// When compiling with Clang, we still use GNU as for the assembler, so we still\r
+// need to define the GCC_ASM* macros.\r
+#if defined(__GNUC__) || defined(__clang__)\r
///\r
/// For GNU assembly code, .global or .globl can declare global symbols.\r
/// Define this macro to unify the usage.\r
///\r
#define ASM_GLOBAL .globl\r
+\r
+ #if !defined(__APPLE__)\r
+ ///\r
+ /// ARM EABI defines that the linker should not manipulate call relocations\r
+ /// (do bl/blx conversion) unless the target symbol has function type.\r
+ /// CodeSourcery 2010.09 started requiring the .type to function properly\r
+ ///\r
+ #define INTERWORK_FUNC(func__) .type ASM_PFX(func__), %function\r
+\r
+ #define GCC_ASM_EXPORT(func__) \\r
+ .global _CONCATENATE (__USER_LABEL_PREFIX__, func__) ;\\r
+ .type ASM_PFX(func__), %function \r
+\r
+ #define GCC_ASM_IMPORT(func__) \\r
+ .extern _CONCATENATE (__USER_LABEL_PREFIX__, func__)\r
+ \r
+ #else\r
+ //\r
+ // .type not supported by Apple Xcode tools \r
+ //\r
+ #define INTERWORK_FUNC(func__) \r
+\r
+ #define GCC_ASM_EXPORT(func__) \\r
+ .globl _CONCATENATE (__USER_LABEL_PREFIX__, func__) \\r
+ \r
+ #define GCC_ASM_IMPORT(name) \r
+\r
+ #endif\r
#endif\r
\r
/**\r
@return The pointer to the first instruction of a function given a function pointer.\r
\r
**/\r
-#define FUNCTION_ENTRY_POINT(FunctionPointer) (FunctionPointer)\r
+#define FUNCTION_ENTRY_POINT(FunctionPointer) (VOID *)(UINTN)(FunctionPointer)\r
+\r
+#ifndef __USER_LABEL_PREFIX__\r
+#define __USER_LABEL_PREFIX__\r
+#endif\r
\r
#endif\r
+\r
+\r