]> git.proxmox.com Git - mirror_edk2.git/blobdiff - MdePkg/Include/x64/ProcessorBind.h
Add FUNCTION_ENTRY_POINT macro
[mirror_edk2.git] / MdePkg / Include / x64 / ProcessorBind.h
index 785d4d98f07f35aa37467f72af794f38bfb7a7f0..bc240000a444e9863d1fdf30e44093553b7937fc 100644 (file)
@@ -10,8 +10,6 @@
   THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,                     \r
   WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.             \r
 \r
-  Module Name:  ProcessorBind.h\r
-\r
 **/\r
 \r
 #ifndef __PROCESSOR_BIND_H__\r
 //\r
 // Make sure we are useing the correct packing rules per EFI specification\r
 //\r
+#ifndef __GNUC__\r
 #pragma pack()\r
+#endif\r
+\r
+\r
+#if __INTEL_COMPILER\r
+//\r
+// Disable ICC's remark #1418: external function definition with no prior declaration.\r
+// This is legal ANSI C code so we disable the remark that is turned on with /W4\r
+//\r
+#pragma warning ( disable : 1418 )\r
+\r
+\r
+//\r
+// Disable ICC's remark #1419: external declaration in primary source file\r
+// This is legal ANSI C code so we disable the remark that is turned on with /W4\r
+//\r
+#pragma warning ( disable : 1419 )\r
+\r
+#endif\r
 \r
 \r
 #if _MSC_EXTENSIONS \r
@@ -70,7 +87,7 @@
 #endif\r
 \r
 \r
-#if (__STDC_VERSION__ < 199901L)\r
+#if !defined(__GNUC__) && (__STDC_VERSION__ < 199901L)\r
   //\r
   // No ANSI C 2000 stdint.h integer width declarations, so define equivalents\r
   //\r
@@ -155,13 +172,18 @@ typedef INT64   INTN;
 //\r
 // Processor specific defines\r
 //\r
-#define MAX_BIT     0x8000000000000000\r
-#define MAX_2_BITS  0xC000000000000000\r
+#define MAX_BIT     0x8000000000000000ULL\r
+#define MAX_2_BITS  0xC000000000000000ULL\r
+\r
+//\r
+// Maximum legal X64 address\r
+//\r
+#define MAX_ADDRESS   0xFFFFFFFFFFFFFFFFULL\r
 \r
 //\r
-// Maximum legal Itanium-based address\r
+// The stack alignment required for X64\r
 //\r
-#define MAX_ADDRESS   0xFFFFFFFFFFFFFFFF\r
+#define CPU_STACK_ALIGNMENT   16\r
 \r
 //\r
 // Modifier to ensure that all protocol member functions and EFI intrinsics\r
@@ -177,13 +199,18 @@ typedef INT64   INTN;
 #elif __GNUC__\r
   ///\r
   /// Define the standard calling convention reguardless of optimization level.\r
-  /// efidecl is an extension to GCC that supports the differnece between x64\r
-  /// GCC ABI and x64 Microsoft* ABI. EFI is closer to the Microsoft* ABI and\r
-  /// EFIAPI makes sure the right ABI is used for public interfaces. \r
-  /// eficecl is a work in progress and we do not yet have the compiler\r
+  /// The GCC support assumes a GCC compiler that supports the EFI ABI. The EFI\r
+  /// ABI is much closer to the x64 Microsoft* ABI than standard x64 (x86-64) \r
+  /// GCC ABI. Thus a standard x64 (x86-64) GCC compiler can not be used for \r
+  /// x64. Warning the assembly code in the MDE x64 does not follow the correct \r
+  /// ABI for the standard x64 (x86-64) GCC.\r
   ///\r
-  #define EFIAPI __attribute__((efidecl))    \r
+  #define EFIAPI \r
 #else\r
+  ///\r
+  /// The default for a non Microsoft* or GCC compiler is to assume the EFI ABI\r
+  /// is the standard. \r
+  ///\r
   #define EFIAPI       \r
 #endif\r
 \r
@@ -198,5 +225,14 @@ typedef INT64   INTN;
   #define GLOBAL_REMOVE_IF_UNREFERENCED\r
 #endif\r
 \r
+//\r
+// For symbol name in GNU assembly code, an extra "_" is necessary\r
+//\r
+#if __GNUC__\r
+  #define ASM_PFX(name) _##name    \r
+#endif\r
+\r
+#define FUNCTION_ENTRY_POINT(p) (p)\r
+\r
 #endif\r
 \r