]> git.proxmox.com Git - mirror_edk2.git/commitdiff
EdkCompatabilityPkg: Fix build issues with X64 clang
authorandrewfish <andrewfish@6f19259b-4bc3-4df7-8a09-765794883524>
Tue, 12 Jul 2011 02:57:30 +0000 (02:57 +0000)
committerandrewfish <andrewfish@6f19259b-4bc3-4df7-8a09-765794883524>
Tue, 12 Jul 2011 02:57:30 +0000 (02:57 +0000)
Removed passing VA_LIST and some assembly language compatability issues. Did not fix ReportStatusCode passing VA_LIST (non-ANSI C Code), and some of the assembler was not not ported and int 3 was inserted, as it likely is not needed.

signed-off-by: andrewfish
reviewed-by: lgao4

git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@12006 6f19259b-4bc3-4df7-8a09-765794883524

15 files changed:
EdkCompatibilityPkg/Compatibility/BootScriptSaveOnS3SaveStateThunk/X64/AsmDispatchExecute.S
EdkCompatibilityPkg/Compatibility/MpServicesOnFrameworkMpServicesThunk/X64/MpFuncs.S
EdkCompatibilityPkg/Compatibility/SmmBaseHelper/X64/PageFaultHandler.S
EdkCompatibilityPkg/Foundation/Library/Dxe/Graphics/Print.c
EdkCompatibilityPkg/Foundation/Library/Dxe/Print/Print.c
EdkCompatibilityPkg/Foundation/Library/EdkIIGlueLib/Library/BaseLib/X64/Mwait.S
EdkCompatibilityPkg/Foundation/Library/EdkIIGlueLib/Library/BaseLib/X64/SetJump.S
EdkCompatibilityPkg/Foundation/Library/EdkIIGlueLib/Library/BaseLib/X64/Thunk16.S
EdkCompatibilityPkg/Foundation/Library/EdkIIGlueLib/Library/DxeReportStatusCodeLib/ReportStatusCodeLib.c
EdkCompatibilityPkg/Foundation/Library/EdkIIGlueLib/Library/PeiReportStatusCodeLib/ReportStatusCodeLib.c
EdkCompatibilityPkg/Foundation/Library/EdkIIGlueLib/Library/SmmRuntimeDxeReportStatusCodeLib/ReportStatusCodeLib.c
EdkCompatibilityPkg/Foundation/Library/EfiCommonLib/ReportStatusCode.c
EdkCompatibilityPkg/Foundation/Library/Pei/PeiLib/Print/Print.c
EdkCompatibilityPkg/Foundation/Library/Pei/PeiLib/X64/ProcessorAsms.S
EdkCompatibilityPkg/Foundation/Library/Thunk16/X64/Thunk16.S

index 167e7d4cc1edb0b5b927fbc950a9b574717c080b..36f5fd57757404c5de4cfb63d3d616e26a7ed9b6 100644 (file)
@@ -45,9 +45,9 @@ ASM_PFX(AsmExecute32BitCode):
     #\r
     # save orignal GDTR and CS\r
     #\r
-    movq    %ds, %rax\r
+    movl    %ds, %eax\r
     push    %rax\r
-    movq    %cs, %rax\r
+    movl    %cs, %eax\r
     push    %rax\r
     subq    $0x10, %rsp\r
     sgdt    (%rsp)\r
@@ -209,8 +209,8 @@ ReturnToLongMode:
     # Reload original DS/ES/SS\r
     #\r
     pop     %rcx\r
-    movq    %rcx, %ds\r
-    movq    %rcx, %es\r
-    movq    %rcx, %ss\r
+    movl    %ecx, %ds\r
+    movl    %ecx, %es\r
+    movl    %ecx, %ss\r
     ret\r
 \r
index 5ec90bdaac54db7f49576cbed8374c120b09f278..6ea0f3e690fb2342ca1ea72e93353194e377e647 100644 (file)
 #------------------------------------------------------------------------------\r
 \r
 \r
-.equ                   VacantFlag,       0x0\r
-.equ                   NotVacantFlag,    0xff\r
-\r
-.equ                   LockLocation,              RendezvousFunnelProcEnd - RendezvousFunnelProcStart\r
-.equ                   StackStartAddressLocation, RendezvousFunnelProcEnd - RendezvousFunnelProcStart + 0x08\r
-.equ                   StackSizeLocation,         RendezvousFunnelProcEnd - RendezvousFunnelProcStart + 0x10\r
-.equ                   CProcedureLocation,        RendezvousFunnelProcEnd - RendezvousFunnelProcStart + 0x18\r
-.equ                   GdtrLocation,              RendezvousFunnelProcEnd - RendezvousFunnelProcStart + 0x20\r
-.equ                   IdtrLocation,              RendezvousFunnelProcEnd - RendezvousFunnelProcStart + 0x2A\r
-.equ                   BufferStartLocation,       RendezvousFunnelProcEnd - RendezvousFunnelProcStart + 0x34\r
-.equ                   Cr3OffsetLocation,         RendezvousFunnelProcEnd - RendezvousFunnelProcStart + 0x38\r
-.equ                   ProcessorNumberLocation,   RendezvousFunnelProcEnd - RendezvousFunnelProcStart + 0x38\r
+.set                   VacantFlag,       0x0\r
+.set                   NotVacantFlag,    0xff\r
+\r
+.set                   LockLocation,              RendezvousFunnelProcEnd - RendezvousFunnelProcStart\r
+.set                   StackStartAddressLocation, RendezvousFunnelProcEnd - RendezvousFunnelProcStart + 0x08\r
+.set                   StackSizeLocation,         RendezvousFunnelProcEnd - RendezvousFunnelProcStart + 0x10\r
+.set                   CProcedureLocation,        RendezvousFunnelProcEnd - RendezvousFunnelProcStart + 0x18\r
+.set                   GdtrLocation,              RendezvousFunnelProcEnd - RendezvousFunnelProcStart + 0x20\r
+.set                   IdtrLocation,              RendezvousFunnelProcEnd - RendezvousFunnelProcStart + 0x2A\r
+.set                   BufferStartLocation,       RendezvousFunnelProcEnd - RendezvousFunnelProcStart + 0x34\r
+.set                   Cr3OffsetLocation,         RendezvousFunnelProcEnd - RendezvousFunnelProcStart + 0x38\r
+.set                   ProcessorNumberLocation,   RendezvousFunnelProcEnd - RendezvousFunnelProcStart + 0x38\r
 \r
 #-------------------------------------------------------------------------------------\r
 \r
@@ -186,7 +186,9 @@ RendezvousFunnelProcEnd:
 # comments here for definition of address map\r
 ASM_GLOBAL ASM_PFX(AsmGetAddressMap)\r
 ASM_PFX(AsmGetAddressMap):\r
-\r
+#ifdef __APPLE__\r
+        int          $3\r
+#else\r
         movq         $RendezvousFunnelProcStart, %rax\r
         movq         %rax, (%rcx)\r
         movq         $(ProtectedModeStart - RendezvousFunnelProcStart), 0x08(%rcx)\r
@@ -194,5 +196,5 @@ ASM_PFX(AsmGetAddressMap):
         movq         $(LongModeStart - RendezvousFunnelProcStart), 0x18(%rcx)\r
         movq         $(LONG_JUMP - RendezvousFunnelProcStart), 0x20(%rcx)\r
         movq         $(RendezvousFunnelProcEnd - RendezvousFunnelProcStart), 0x28(%rcx)\r
-\r
+#endif\r
         ret\r
index 5a50507353b55ba29940672e5878f494142d7b69..ae26a4b30abb08a9a9fcf61dd8fcaf2a7a138382 100644 (file)
@@ -40,7 +40,11 @@ ASM_PFX(PageFaultHandlerHook):
     popq     %rcx\r
     popq     %rax                         # restore all volatile registers\r
     jnz      L1\r
+#ifdef __APPLE__\r
+    int      $3\r
+#else\r
     jmpq     *ASM_PFX(mOriginalHandler)\r
+#endif\r
 L1:\r
     addq     $0x08, %rsp                  # skip error code for PF\r
     iretq\r
index 91f3aaffb5a9ab44c8999c7cfa3f626ab9f7db03..2c8dc73ae6b6ee31efe1be662961a16a47058fe5 100644 (file)
@@ -65,14 +65,6 @@ Abstract:
 #include EFI_PROTOCOL_DEFINITION (Hii)\r
 #endif\r
 \r
-STATIC\r
-CHAR_W                *\r
-GetFlagsAndWidth (\r
-  IN  CHAR_W      *Format,\r
-  OUT UINTN       *Flags,\r
-  OUT UINTN       *Width,\r
-  IN OUT  VA_LIST *Marker\r
-  );\r
 \r
 STATIC\r
 UINTN\r
@@ -552,6 +544,7 @@ Returns:
   UINTN     BufferLeft;\r
   UINT64    Value;\r
   EFI_GUID  *TmpGUID;\r
+  BOOLEAN   Done;\r
 \r
   //\r
   // Process the format string. Stop if Buffer is over run.\r
@@ -578,7 +571,64 @@ Returns:
       //\r
       // Now it's time to parse what follows after %\r
       //\r
-      Format = GetFlagsAndWidth (Format, &Flags, &Width, &Marker);\r
+      Flags  = 0;\r
+      Width  = 0;\r
+      for (Done = FALSE; !Done;) {\r
+        Format++;\r
+    \r
+        switch (*Format) {\r
+    \r
+        case '-':\r
+          Flags |= LEFT_JUSTIFY;\r
+          break;\r
+    \r
+        case '+':\r
+          Flags |= PREFIX_SIGN;\r
+          break;\r
+    \r
+        case ' ':\r
+          Flags |= PREFIX_BLANK;\r
+          break;\r
+    \r
+        case ',':\r
+          Flags |= COMMA_TYPE;\r
+          break;\r
+    \r
+        case 'L':\r
+        case 'l':\r
+          Flags |= LONG_TYPE;\r
+          break;\r
+    \r
+        case '*':\r
+          Width = VA_ARG (Marker, UINTN);\r
+          break;\r
+    \r
+        case '0':\r
+          Flags |= PREFIX_ZERO;\r
+    \r
+        case '1':\r
+        case '2':\r
+        case '3':\r
+        case '4':\r
+        case '5':\r
+        case '6':\r
+        case '7':\r
+        case '8':\r
+        case '9':\r
+          Count = 0;\r
+          do {\r
+            Count = (Count * 10) +*Format - '0';\r
+            Format++;\r
+          } while ((*Format >= '0') && (*Format <= '9'));\r
+          Format--;\r
+          Width = Count;\r
+          break;\r
+    \r
+        default:\r
+          Done = TRUE;\r
+        }\r
+      }\r
+\r
       switch (*Format) {\r
       case 'p':\r
         //\r
@@ -725,103 +775,6 @@ Returns:
   return &Buffer[Index] - StartOfBuffer;\r
 }\r
 \r
-STATIC\r
-CHAR_W *\r
-GetFlagsAndWidth (\r
-  IN  CHAR_W      *Format,\r
-  OUT UINTN       *Flags,\r
-  OUT UINTN       *Width,\r
-  IN OUT  VA_LIST *Marker\r
-  )\r
-/*++\r
-\r
-Routine Description:\r
-\r
-  VSPrint worker function that parses flag and width information from the \r
-  Format string and returns the next index into the Format string that needs\r
-  to be parsed. See file headed for details of Flag and Width.\r
-\r
-Arguments:\r
-\r
-  Format - Current location in the VSPrint format string.\r
-\r
-  Flags  - Returns flags\r
-\r
-  Width  - Returns width of element\r
-\r
-  Marker - Vararg list that may be paritally consumed and returned.\r
-\r
-Returns: \r
-\r
-  Pointer indexed into the Format string for all the information parsed\r
-  by this routine.\r
-\r
---*/\r
-{\r
-  UINTN   Count;\r
-  BOOLEAN Done;\r
-\r
-  *Flags  = 0;\r
-  *Width  = 0;\r
-  for (Done = FALSE; !Done;) {\r
-    Format++;\r
-\r
-    switch (*Format) {\r
-\r
-    case '-':\r
-      *Flags |= LEFT_JUSTIFY;\r
-      break;\r
-\r
-    case '+':\r
-      *Flags |= PREFIX_SIGN;\r
-      break;\r
-\r
-    case ' ':\r
-      *Flags |= PREFIX_BLANK;\r
-      break;\r
-\r
-    case ',':\r
-      *Flags |= COMMA_TYPE;\r
-      break;\r
-\r
-    case 'L':\r
-    case 'l':\r
-      *Flags |= LONG_TYPE;\r
-      break;\r
-\r
-    case '*':\r
-      *Width = VA_ARG (*Marker, UINTN);\r
-      break;\r
-\r
-    case '0':\r
-      *Flags |= PREFIX_ZERO;\r
-\r
-    case '1':\r
-    case '2':\r
-    case '3':\r
-    case '4':\r
-    case '5':\r
-    case '6':\r
-    case '7':\r
-    case '8':\r
-    case '9':\r
-      Count = 0;\r
-      do {\r
-        Count = (Count * 10) +*Format - '0';\r
-        Format++;\r
-      } while ((*Format >= '0') && (*Format <= '9'));\r
-      Format--;\r
-      *Width = Count;\r
-      break;\r
-\r
-    default:\r
-      Done = TRUE;\r
-    }\r
-  }\r
-\r
-  return Format;\r
-}\r
-\r
 STATIC\r
 UINTN\r
 GuidToString (\r
index c07b7473809830d29bfe6f869d8facde26b6e315..6585726d277887026669f5b65e54e59804c24711 100644 (file)
@@ -60,15 +60,6 @@ Abstract:
 #include "Print.h"\r
 \r
 \r
-STATIC\r
-CHAR_W *\r
-GetFlagsAndWidth (\r
-  IN  CHAR_W      *Format, \r
-  OUT UINTN       *Flags, \r
-  OUT UINTN       *Width,\r
-  IN OUT  VA_LIST *Marker\r
-  );\r
-\r
 STATIC\r
 UINTN\r
 GuidToString (\r
@@ -180,6 +171,7 @@ Returns:
   UINTN     BufferLeft;\r
   UINT64    Value;\r
   EFI_GUID  *TmpGUID;\r
+  BOOLEAN   Done;\r
 \r
   //\r
   // Process the format string. Stop if Buffer is over run.\r
@@ -204,8 +196,50 @@ Returns:
       \r
       //\r
       // Now it's time to parse what follows after %\r
-      //\r
-      Format = GetFlagsAndWidth (Format, &Flags, &Width, &Marker);\r
+      //    \r
+      Flags = 0;\r
+      Width = 0;\r
+      for (Done = FALSE; !Done; ) {\r
+        Format++;\r
+    \r
+        switch (*Format) {\r
+    \r
+        case '-': Flags |= LEFT_JUSTIFY; break;\r
+        case '+': Flags |= PREFIX_SIGN;  break;\r
+        case ' ': Flags |= PREFIX_BLANK; break;\r
+        case ',': Flags |= COMMA_TYPE;   break;\r
+        case 'L':\r
+        case 'l': Flags |= LONG_TYPE;    break;\r
+    \r
+        case '*':\r
+          Width = VA_ARG (Marker, UINTN);\r
+          break;\r
+    \r
+        case '0':\r
+          Flags |= PREFIX_ZERO;\r
+        case '1':\r
+        case '2':\r
+        case '3':\r
+        case '4':\r
+        case '5':\r
+        case '6':\r
+        case '7':\r
+        case '8':\r
+        case '9':\r
+          Count = 0;\r
+          do {\r
+            Count = (Count * 10) + *Format - '0';\r
+            Format++;\r
+          } while ((*Format >= '0')  &&  (*Format <= '9'));\r
+          Format--;\r
+          Width = Count;\r
+          break;\r
+    \r
+        default:\r
+          Done = TRUE;\r
+        }\r
+      }\r
+\r
       switch (*Format) {\r
       case 'p':\r
         //\r
@@ -347,89 +381,6 @@ Returns:
   return &Buffer[Index] - StartOfBuffer;\r
 }\r
 \r
-\r
-\r
-STATIC\r
-CHAR_W *\r
-GetFlagsAndWidth (\r
-  IN  CHAR_W      *Format, \r
-  OUT UINTN       *Flags, \r
-  OUT UINTN       *Width,\r
-  IN OUT  VA_LIST *Marker\r
-  )\r
-/*++\r
-\r
-Routine Description:\r
-\r
-  VSPrint worker function that parses flag and width information from the \r
-  Format string and returns the next index into the Format string that needs\r
-  to be parsed. See file headed for details of Flag and Width.\r
-\r
-Arguments:\r
-\r
-  Format - Current location in the VSPrint format string.\r
-\r
-  Flags  - Returns flags\r
-\r
-  Width  - Returns width of element\r
-\r
-  Marker - Vararg list that may be paritally consumed and returned.\r
-\r
-Returns: \r
-\r
-  Pointer indexed into the Format string for all the information parsed\r
-  by this routine.\r
-\r
---*/\r
-{\r
-  UINTN   Count;\r
-  BOOLEAN Done;\r
-\r
-  *Flags = 0;\r
-  *Width = 0;\r
-  for (Done = FALSE; !Done; ) {\r
-    Format++;\r
-\r
-    switch (*Format) {\r
-\r
-    case '-': *Flags |= LEFT_JUSTIFY; break;\r
-    case '+': *Flags |= PREFIX_SIGN;  break;\r
-    case ' ': *Flags |= PREFIX_BLANK; break;\r
-    case ',': *Flags |= COMMA_TYPE;   break;\r
-    case 'L':\r
-    case 'l': *Flags |= LONG_TYPE;    break;\r
-\r
-    case '*':\r
-      *Width = VA_ARG (*Marker, UINTN);\r
-      break;\r
-\r
-    case '0':\r
-      *Flags |= PREFIX_ZERO;\r
-    case '1':\r
-    case '2':\r
-    case '3':\r
-    case '4':\r
-    case '5':\r
-    case '6':\r
-    case '7':\r
-    case '8':\r
-    case '9':\r
-      Count = 0;\r
-      do {\r
-        Count = (Count * 10) + *Format - '0';\r
-        Format++;\r
-      } while ((*Format >= '0')  &&  (*Format <= '9'));\r
-      Format--;\r
-      *Width = Count;\r
-      break;\r
-\r
-    default:\r
-      Done = TRUE;\r
-    }\r
-  }\r
-  return Format;\r
-}\r
-\r
 STATIC\r
 UINTN\r
 GuidToString (\r
index 2f2f18da7ba2ee9dbbedc97684c05267f0c8b75b..ea684e01de2ee82e6733103218c368e53d2048b9 100644 (file)
@@ -34,5 +34,5 @@
 ASM_PFX(AsmMwait):\r
     mov    %ecx,%eax\r
     mov    %edx,%ecx\r
-    mwait  %rax,%rcx\r
+    mwait  \r
     ret\r
index 59b180d4f357e206ae0524ff646de9517aad7331..ba66f9a49092d0735e672cdd7e695193daa9d02c 100644 (file)
 #
 #------------------------------------------------------------------------------
 #include <EdkIIGlueBase.h>
-.extern InternalAssertJumpBuffer;
+
 .globl ASM_PFX(SetJump)
 ASM_PFX(SetJump):
     push   %rcx
     add    $0xffffffffffffffe0,%rsp
-    call   _InternalAssertJumpBuffer
+    call   ASM_PFX(InternalAssertJumpBuffer)
     add    $0x20,%rsp
     pop    %rcx
     pop    %rdx
index da626ad47cce7932f12d589ba6899496b769e729..1de788a1847ecaccdaf80ad1a2c086ccc4aadf40 100644 (file)
 .globl ASM_PFX(InternalAsmThunk16)\r
 \r
 # define the structure of IA32_REGS\r
-.equ  _EDI, 0       #size 4\r
-.equ  _ESI, 4       #size 4\r
-.equ  _EBP, 8       #size 4\r
-.equ  _ESP, 12      #size 4\r
-.equ  _EBX, 16      #size 4\r
-.equ  _EDX, 20      #size 4\r
-.equ  _ECX, 24      #size 4\r
-.equ  _EAX, 28      #size 4\r
-.equ  _DS,  32      #size 2\r
-.equ  _ES,  34      #size 2\r
-.equ  _FS,  36      #size 2\r
-.equ  _GS,  38      #size 2\r
-.equ  _EFLAGS, 40   #size 8\r
-.equ  _EIP, 48      #size 4\r
-.equ  _CS, 52       #size 2\r
-.equ  _SS, 54       #size 2\r
-.equ  IA32_REGS_SIZE, 56\r
+.set  _EDI, 0       #size 4\r
+.set  _ESI, 4       #size 4\r
+.set  _EBP, 8       #size 4\r
+.set  _ESP, 12      #size 4\r
+.set  _EBX, 16      #size 4\r
+.set  _EDX, 20      #size 4\r
+.set  _ECX, 24      #size 4\r
+.set  _EAX, 28      #size 4\r
+.set  _DS,  32      #size 2\r
+.set  _ES,  34      #size 2\r
+.set  _FS,  36      #size 2\r
+.set  _GS,  38      #size 2\r
+.set  _EFLAGS, 40   #size 8\r
+.set  _EIP, 48      #size 4\r
+.set  _CS, 52       #size 2\r
+.set  _SS, 54       #size 2\r
+.set  IA32_REGS_SIZE, 56\r
 \r
     .data\r
-\r
+    \r
+#ifndef __APPLE__\r
 ASM_PFX(m16Size):         .word      ASM_PFX(InternalAsmThunk16) - ASM_PFX(m16Start)\r
 ASM_PFX(mThunk16Attr):    .word      _ThunkAttr - ASM_PFX(m16Start)\r
 ASM_PFX(m16Gdt):          .word      ASM_PFX(NullSeg) - ASM_PFX(m16Start)\r
 ASM_PFX(m16GdtrBase):     .word      _16GdtrBase - ASM_PFX(m16Start)\r
 ASM_PFX(mTransition):     .word      _EntryPoint - ASM_PFX(m16Start)\r
+#endif\r
 \r
     .text\r
 \r
@@ -68,6 +70,9 @@ SavedGdt:    .space 10
 #------------------------------------------------------------------------------\r
 .globl ASM_PFX(BackFromUserCode)\r
 ASM_PFX(BackFromUserCode):\r
+#ifdef __APPLE__\r
+    int $3\r
+#else\r
     #\r
     # The order of saved registers on the stack matches the order they appears\r
     # in IA32_REGS structure. This facilitates wrapper function to extract them\r
@@ -143,14 +148,17 @@ L_64BitCode:
     .byte   0x67,0xbc                  # mov esp, imm32\r
 SavedSp:    .space 4                   # restore stack\r
     nop\r
+#endif\r
     ret\r
 \r
+#ifndef __APPLE__\r
 _EntryPoint: .long      ASM_PFX(ToUserCode) - ASM_PFX(m16Start)\r
              .word      CODE16\r
 _16Gdtr:     .word      GDT_SIZE - 1\r
 _16GdtrBase: .quad      ASM_PFX(NullSeg)\r
 _16Idtr:     .word      0x3ff\r
              .long      0\r
+#endif\r
 \r
 #------------------------------------------------------------------------------\r
 # _ToUserCode() takes control in real mode before passing control to user code.\r
@@ -158,6 +166,9 @@ _16Idtr:     .word      0x3ff
 #------------------------------------------------------------------------------\r
 .globl ASM_PFX(ToUserCode)\r
 ASM_PFX(ToUserCode):\r
+#ifdef __APPLE__\r
+    int $3\r
+#else\r
     movl    %edx,%ss                    # set new segment selectors\r
     movl    %edx,%ds\r
     movl    %edx,%es\r
@@ -191,11 +202,12 @@ L_RealMode:
     .byte 0x66, 0x9d                    # popfd\r
     leaw    4(%esp),%sp                 # skip high order 32 bits of EFlags\r
     .byte 0x66                          # make the following retf 32-bit\r
-    lret                                # transfer control to user code\r
+#endif\r
+     lret                                # transfer control to user code\r
 \r
-.equ  CODE16,  ASM_PFX(_16Code) - .\r
-.equ  DATA16,  ASM_PFX(_16Data) - .\r
-.equ  DATA32,  ASM_PFX(_32Data) - .\r
+.set  CODE16,  ASM_PFX(_16Code) - .\r
+.set  DATA16,  ASM_PFX(_16Data) - .\r
+.set  DATA32,  ASM_PFX(_32Data) - .\r
 \r
 ASM_PFX(NullSeg):   .quad      0\r
 ASM_PFX(_16Code):\r
@@ -220,7 +232,7 @@ ASM_PFX(_32Data):
             .byte 0xcf                  # 16-bit segment, 4GB limit\r
             .byte 0\r
 \r
-.equ  GDT_SIZE, . - ASM_PFX(NullSeg)\r
+.set  GDT_SIZE, . - ASM_PFX(NullSeg)\r
 \r
 #------------------------------------------------------------------------------\r
 # IA32_REGISTER_SET *\r
@@ -233,6 +245,9 @@ ASM_PFX(_32Data):
 \r
 .globl ASM_PFX(InternalAsmThunk16)\r
 ASM_PFX(InternalAsmThunk16):\r
+#ifdef __APPLE__\r
+    int $3\r
+#else\r
     pushq   %rbp\r
     pushq   %rbx\r
     pushq   %rsi\r
@@ -304,5 +319,5 @@ L_RetFromRealMode:
     popq    %rsi\r
     popq    %rbx\r
     popq    %rbp\r
-\r
+#endif\r
     ret\r
index 35417810fdfbb14b9ab0c1203a238bb9c6add0b5..a1c232dea04300500202b86532e70e408a314db2 100644 (file)
@@ -296,11 +296,16 @@ GlueReportStatusCodeExtractDebugInfo (
 \r
   *ErrorLevel = DebugInfo->ErrorLevel;\r
 \r
+#ifdef __APPLE__\r
+  // This is non portable C code you can't assume VA_LIST is pointer\r
+  return FALSE;\r
+#else\r
   //\r
   // The first 12 * UINTN bytes of the string are really an \r
   // argument stack to support varargs on the Format string.\r
   //\r
   *Marker = (VA_LIST) (DebugInfo + 1);\r
+#endif\r
   *Format = (CHAR8 *)(((UINT64 *)*Marker) + 12);\r
 \r
   return TRUE;\r
index 05c42cdd5698ff09e26195a709d1cff6129e04e5..29207e0f5b1e2a4f5916cdca9504edcedb3c7932 100644 (file)
@@ -248,7 +248,12 @@ GlueReportStatusCodeExtractDebugInfo (
   // The first 12 * UINTN bytes of the string are really an \r
   // argument stack to support varargs on the Format string.\r
   //\r
+#ifdef __APPLE__\r
+  // This is non portable C code you can't assume VA_LIST is pointer\r
+  return FALSE;\r
+#else\r
   *Marker = (VA_LIST) (DebugInfo + 1);\r
+#endif\r
   *Format = (CHAR8 *)(((UINT64 *)*Marker) + 12);\r
 \r
   return TRUE;\r
index fa919c768cb545dc2ffab8e81bc0102452b672db..ef16d4010d8d1260844d54e3f693906d8f58ca51 100644 (file)
@@ -280,7 +280,12 @@ GlueReportStatusCodeExtractDebugInfo (
   // The first 12 * UINTN bytes of the string are really an\r
   // argument stack to support varargs on the Format string.\r
   //\r
+#ifdef __APPLE__\r
+  // This is non portable C code you can't assume VA_LIST is pointer\r
+  return FALSE;\r
+#else\r
   *Marker = (VA_LIST) (DebugInfo + 1);\r
+#endif\r
   *Format = (CHAR8 *)(((UINT64 *)*Marker) + 12);\r
 \r
   return TRUE;\r
index 023eda0b0e770a06641c42f026f56a352b3e49a4..ce56fcf36899929ddaf1240ac832c6af13357c1b 100644 (file)
@@ -332,9 +332,10 @@ Returns:
   // The first 12 * UINTN bytes of the string are really an \r
   // arguement stack to support varargs on the Format string.\r
   //\r
-#ifdef EFIARM\r
+#if (defined (EFIARM) || defined(__APPLE__))\r
   // It is not legal C code to case VA_LIST to a pointer. VA_LIST can \r
   // be a structure. \r
+  return FALSE;\r
 #else\r
   *Marker = (VA_LIST) (DebugInfo + 1);\r
   *Format = (CHAR8 *)(((UINT64 *)*Marker) + 12);\r
index a1aaaba095d25ff51bcb92c10dfce9a7494e2a94..b854cbe34e0a7750565e8177f42b6faadaa91070 100644 (file)
@@ -58,14 +58,6 @@ Abstract:
 #include "PeiLib.h"\r
 #include "Print.h"\r
 \r
-STATIC\r
-CHAR8 *\r
-GetFlagsAndWidth (\r
-  IN  CHAR8       *Format, \r
-  OUT UINTN       *Flags, \r
-  OUT UINTN       *Width,\r
-  IN OUT  VA_LIST *Marker\r
-  );\r
 \r
 STATIC\r
 UINTN\r
@@ -195,7 +187,8 @@ Returns:
   UINTN     BufferLeft;\r
   UINT64    Value;\r
   EFI_GUID  *TmpGUID;\r
-\r
+  BOOLEAN   Done;\r
\r
   //\r
   // Process the format string. Stop if Buffer is over run.\r
   //\r
@@ -218,8 +211,50 @@ Returns:
       \r
       //\r
       // Now it's time to parse what follows after %\r
-      //\r
-      Format = GetFlagsAndWidth (Format, &Flags, &Width, &Marker);\r
+      //   \r
+      Flags = 0;\r
+      Width = 0;\r
+      for (Done = FALSE; !Done; ) {\r
+        Format++;\r
+    \r
+        switch (*Format) {\r
+    \r
+        case '-': Flags |= LEFT_JUSTIFY; break;\r
+        case '+': Flags |= PREFIX_SIGN;  break;\r
+        case ' ': Flags |= PREFIX_BLANK; break;\r
+        case ',': Flags |= COMMA_TYPE;   break;\r
+        case 'L':\r
+        case 'l': Flags |= LONG_TYPE;    break;\r
+    \r
+        case '*':\r
+          Width = VA_ARG (Marker, UINTN);\r
+          break;\r
+    \r
+        case '0':\r
+          Flags |= PREFIX_ZERO;\r
+        case '1':\r
+        case '2':\r
+        case '3':\r
+        case '4':\r
+        case '5':\r
+        case '6':\r
+        case '7':\r
+        case '8':\r
+        case '9':\r
+          Count = 0;\r
+          do {\r
+            Count = (Count * 10) + *Format - '0';\r
+            Format++;\r
+          } while ((*Format >= '0')  &&  (*Format <= '9'));\r
+          Format--;\r
+          Width = Count;\r
+          break;\r
+    \r
+        default:\r
+          Done = TRUE;\r
+        }\r
+      }\r
+\r
       switch (*Format) {\r
       case 'p':\r
         //\r
@@ -367,87 +402,6 @@ Returns:
 \r
 \r
 \r
-STATIC\r
-CHAR8 *\r
-GetFlagsAndWidth (\r
-  IN  CHAR8       *Format, \r
-  OUT UINTN       *Flags, \r
-  OUT UINTN       *Width,\r
-  IN OUT  VA_LIST *Marker\r
-  )\r
-/*++\r
-\r
-Routine Description:\r
-\r
-  AvSPrint worker function that parses flag and width information from the \r
-  Format string and returns the next index into the Format string that needs\r
-  to be parsed. See file headed for details of Flag and Width.\r
-\r
-Arguments:\r
-\r
-  Format - Current location in the AvSPrint format string.\r
-\r
-  Flags  - Returns flags\r
-\r
-  Width  - Returns width of element\r
-\r
-  Marker - Vararg list that may be paritally consumed and returned.\r
-\r
-Returns: \r
-\r
-  Pointer indexed into the Format string for all the information parsed\r
-  by this routine.\r
-\r
---*/\r
-{\r
-  UINTN   Count;\r
-  BOOLEAN Done;\r
-\r
-  *Flags = 0;\r
-  *Width = 0;\r
-  for (Done = FALSE; !Done; ) {\r
-    Format++;\r
-\r
-    switch (*Format) {\r
-\r
-    case '-': *Flags |= LEFT_JUSTIFY; break;\r
-    case '+': *Flags |= PREFIX_SIGN;  break;\r
-    case ' ': *Flags |= PREFIX_BLANK; break;\r
-    case ',': *Flags |= COMMA_TYPE;   break;\r
-    case 'L':\r
-    case 'l': *Flags |= LONG_TYPE;    break;\r
-\r
-    case '*':\r
-      *Width = VA_ARG (*Marker, UINTN);\r
-      break;\r
-\r
-    case '0':\r
-      *Flags |= PREFIX_ZERO;\r
-    case '1':\r
-    case '2':\r
-    case '3':\r
-    case '4':\r
-    case '5':\r
-    case '6':\r
-    case '7':\r
-    case '8':\r
-    case '9':\r
-      Count = 0;\r
-      do {\r
-        Count = (Count * 10) + *Format - '0';\r
-        Format++;\r
-      } while ((*Format >= '0')  &&  (*Format <= '9'));\r
-      Format--;\r
-      *Width = Count;\r
-      break;\r
-\r
-    default:\r
-      Done = TRUE;\r
-    }\r
-  }\r
-  return Format;\r
-}\r
-\r
 static CHAR8 mHexStr[] = { '0','1','2','3','4','5','6','7',\r
                           '8','9','A','B','C','D','E','F' };\r
 \r
index 2d464488cc2fea7593cf0a140752a0425f99a650..6987b4191c3e7d8154ee35c2cd22845d71d1286d 100644 (file)
@@ -59,8 +59,8 @@ ASM_PFX(SwitchStacks):
 #SwitchStacks ENDP
 
 
-.equ                            EFI_SUCCESS, 0
-.equ                            EFI_WARN_RETURN_FROM_LONG_JUMP, 5
+.set                            EFI_SUCCESS, 0
+.set                            EFI_WARN_RETURN_FROM_LONG_JUMP, 5
 
 #
 #Routine Description:
@@ -99,19 +99,19 @@ ASM_PFX(TransferControlSetJump):
       mov    %r13,0x40(%rdx)
       mov    %r14,0x48(%rdx)
       mov    %r15,0x50(%rdx)
-      #; save non-volatile fp registers\r
-      stmxcsr 0x60(%rdx)\r
-      lea     0x68(%rdx), %rax\r
-      movdqu  %xmm6, (%rax) \r
-      movdqu  %xmm7, 0x10(%rax)\r
-      movdqu  %xmm8, 0x20(%rax)\r
-      movdqu  %xmm9, 0x30(%rax)\r
-      movdqu  %xmm10, 0x40(%rax)\r
-      movdqu  %xmm11, 0x50(%rax)\r
-      movdqu  %xmm12, 0x60(%rax)\r
-      movdqu  %xmm13, 0x70(%rax)\r
-      movdqu  %xmm14, 0x80(%rax)\r
-      movdqu  %xmm15, 0x90(%rax)\r
+      #; save non-volatile fp registers
+      stmxcsr 0x60(%rdx)
+      lea     0x68(%rdx), %rax
+      movdqu  %xmm6, (%rax) 
+      movdqu  %xmm7, 0x10(%rax)
+      movdqu  %xmm8, 0x20(%rax)
+      movdqu  %xmm9, 0x30(%rax)
+      movdqu  %xmm10, 0x40(%rax)
+      movdqu  %xmm11, 0x50(%rax)
+      movdqu  %xmm12, 0x60(%rax)
+      movdqu  %xmm13, 0x70(%rax)
+      movdqu  %xmm14, 0x80(%rax)
+      movdqu  %xmm15, 0x90(%rax)
       mov    (%rsp),%rax
       mov    %rax,0x58(%rdx)
       mov    $0x0,%rax
@@ -129,19 +129,19 @@ ASM_PFX(TransferControlSetJump):
 #
 ASM_PFX(TransferControlLongJump):
       # set return from SetJump to EFI_WARN_RETURN_FROM_LONG_JUMP
-      #; load non-volatile fp registers\r
-      ldmxcsr 0x60(%rdx)\r
-      lea     0x68(%rdx), %rax\r
-      movdqu  (%rax), %xmm6\r
-      movdqu  0x10(%rax), %xmm7\r
-      movdqu  0x20(%rax), %xmm8\r
-      movdqu  0x30(%rax), %xmm9\r
-      movdqu  0x40(%rax), %xmm10\r
-      movdqu  0x50(%rax), %xmm11\r
-      movdqu  0x60(%rax), %xmm12\r
-      movdqu  0x70(%rax), %xmm13\r
-      movdqu  0x80(%rax), %xmm14\r
-      movdqu  0x90(%rax), %xmm15\r
+      #; load non-volatile fp registers
+      ldmxcsr 0x60(%rdx)
+      lea     0x68(%rdx), %rax
+      movdqu  (%rax), %xmm6
+      movdqu  0x10(%rax), %xmm7
+      movdqu  0x20(%rax), %xmm8
+      movdqu  0x30(%rax), %xmm9
+      movdqu  0x40(%rax), %xmm10
+      movdqu  0x50(%rax), %xmm11
+      movdqu  0x60(%rax), %xmm12
+      movdqu  0x70(%rax), %xmm13
+      movdqu  0x80(%rax), %xmm14
+      movdqu  0x90(%rax), %xmm15
       mov    $0x5,%rax
       mov    (%rdx),%rbx
       mov    0x8(%rdx),%rsp
index 10f3a34c1920d2a1e96853cb72025480ecceea5c..7328ab764d99b53cde18bde4d2f8b4d1991fc407 100644 (file)
@@ -20,7 +20,7 @@
 #*****************************************************************************\r
 #include <EfiBind.h>\r
 \r
-\r
+#ifndef __APPLE__\r
 \r
     .data\r
 \r
@@ -240,3 +240,5 @@ FarCallRet:
 _16Idtr:\r
    .word 0x3ff                          #FWORD   (1 SHL 10) - 1\r
    .byte 0x00\r
+\r
+#endif\r