]> git.proxmox.com Git - mirror_edk2.git/blobdiff - EdkCompatibilityPkg/Foundation/Include/Ia32/EfiBind.h
Fixed issues compiling for Apple gcc on IA-32
[mirror_edk2.git] / EdkCompatibilityPkg / Foundation / Include / Ia32 / EfiBind.h
index ae60a28e2738d1c3d0df65173f4634f39c9c2d43..12d7154d0baef7754124cbf5290523d41869fb3d 100644 (file)
@@ -1,6 +1,6 @@
 /*++\r
 \r
-Copyright (c) 2004 - 2006, Intel Corporation                                                         \r
+Copyright (c) 2004 - 2008, Intel Corporation                                                         \r
 All rights reserved. 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
@@ -49,12 +49,12 @@ Abstract:
               return 1;                                       \\r
           }                                                   \\r
                                                               \\r
-          EFI_STATUS                                                 \\r
+          EFI_STATUS                                          \\r
           __declspec( dllexport  )                            \\r
           __cdecl                                             \\r
           InitializeDriver (                                  \\r
-              VOID *ImageHandle,                              \\r
-              VOID *SystemTable                               \\r
+              EFI_HANDLE       ImageHandle,                   \\r
+              EFI_SYSTEM_TABLE *SystemTable                   \\r
               )                                               \\r
           {                                                   \\r
               return InitFunction(ImageHandle, SystemTable);  \\r
@@ -83,7 +83,47 @@ Abstract:
 //\r
 // Make sure we are useing the correct packing rules per EFI specification\r
 //\r
+#ifndef __GNUC__\r
 #pragma pack()\r
+#endif\r
+\r
+#if __INTEL_COMPILER\r
+//\r
+// Disable ICC's warning: trailing comma is nonstandard\r
+//\r
+//#pragma warning ( disable : 271 )\r
+\r
+//\r
+// Disable ICC's warning: extra ";" ignored\r
+//\r
+#pragma warning ( disable : 424 )\r
+\r
+//\r
+// Disable ICC's warning: : variable "foo" was set but never used\r
+//\r
+#pragma warning ( disable : 593 )\r
+\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
+//\r
+// Disable ICC's remark #869: "Parameter" was never referenced warning.\r
+// This is legal ANSI C code so we disable the remark that is turned on with -Wall\r
+//\r
+#pragma warning ( disable : 869 )\r
+\r
+#endif\r
+\r
 \r
 #if _MSC_EXTENSIONS\r
 \r
@@ -133,7 +173,7 @@ Abstract:
 #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
@@ -203,7 +243,12 @@ typedef int32_t   intn_t;
 // compiler will optimize away the rest of the function following, so that you run out in\r
 // the weeds if you skip over it with a debugger.\r
 //\r
+#ifdef _MSC_EXTENSIONS\r
 #define EFI_BREAKPOINT()  __asm { int 3 }\r
+#elif __GNUC__\r
+#define EFI_BREAKPOINT() asm("   int $3");\r
+#endif\r
+\r
 #define EFI_DEADLOOP()    { volatile UINTN __iii; __iii = 1; while (__iii); }\r
 \r
 //\r
@@ -263,7 +308,23 @@ typedef int32_t   intn_t;
 \r
 #endif\r
 \r
+//\r
+// For symbol name in GNU assembly code, an extra "_" is necessary\r
+//\r
+#if defined(__GNUC__)\r
+  ///\r
+  /// Private worker functions for ASM_PFX()\r
+  ///\r
+  #define _CONCATENATE(a, b)  __CONCATENATE(a, b)\r
+  #define __CONCATENATE(a, b) a ## b\r
+\r
+  ///\r
+  /// The __USER_LABEL_PREFIX__ macro predefined by GNUC represents the prefix\r
+  /// on symbols in assembly language.\r
+  ///\r
+  #define ASM_PFX(name) _CONCATENATE (__USER_LABEL_PREFIX__, name)\r
 \r
+#endif\r
 \r
 #endif\r
 \r