Deleted x64\SwitchStack.c Ipf/SwitchStack.c.
authorvanjeff <vanjeff@6f19259b-4bc3-4df7-8a09-765794883524>
Fri, 2 Jun 2006 07:58:31 +0000 (07:58 +0000)
committervanjeff <vanjeff@6f19259b-4bc3-4df7-8a09-765794883524>
Fri, 2 Jun 2006 07:58:31 +0000 (07:58 +0000)
Added SwitchStack.c in Baselib\
Rename Ia32/SwitchStack.c to Ia32/InternalSwitchStack.c
Changed _SwitchStack() into InternalSwitchStack() in SwitchStack.asm and SwitchStack.s
Fixed one bug in LinkedList.c, that List length couldn't up to PcdMaximumLinkedListLength.

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

MdePkg/Library/BaseLib/BaseLib-Gcc.msa
MdePkg/Library/BaseLib/BaseLib.msa
MdePkg/Library/BaseLib/BaseLibInternals.h
MdePkg/Library/BaseLib/Ia32/InternalSwitchStack.c [new file with mode: 0644]
MdePkg/Library/BaseLib/Ipf/SwitchStack.s
MdePkg/Library/BaseLib/LinkedList.c
MdePkg/Library/BaseLib/SwitchStack.c [new file with mode: 0644]
MdePkg/Library/BaseLib/X64/SwitchStack.asm

index 8246375b0541ceed0751af601d73f544ee6b5b4c..19573125018a76ceb409ad4ff14c597783b59c45 100644 (file)
@@ -73,6 +73,7 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
       <Filename>x86Thunk.c</Filename>\r
       <Filename>Unaligned.c</Filename>\r
       <Filename>LongJump.c</Filename>\r
+      <Filename>SwitchStack.c</Filename>\r
       <Filename>Ia32/Non-existing.c</Filename>\r
       <Filename FileType="GCC_Assembly_Code">Ia32/LShiftU64.s</Filename>\r
       <Filename FileType="GCC_Assembly_Code">Ia32/RShiftU64.s</Filename>\r
@@ -89,7 +90,7 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
       <Filename FileType="GCC_Assembly_Code">Ia32/SwapBytes64.s</Filename>\r
       <Filename FileType="GCC_Assembly_Code">Ia32/SetJump.s</Filename>\r
       <Filename FileType="GCC_Assembly_Code">Ia32/LongJump.s</Filename>\r
-      <Filename>Ia32/SwitchStack.c</Filename>\r
+      <Filename>Ia32/InternalSwitchStack.c</Filename>\r
       <Filename FileType="GCC_Assembly_Code">Ia32/CpuId.s</Filename>\r
       <Filename FileType="GCC_Assembly_Code">Ia32/ReadEflags.s</Filename>\r
       <Filename FileType="GCC_Assembly_Code">Ia32/ReadMsr64.s</Filename>\r
@@ -179,8 +180,8 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
       <Filename>Unaligned.c</Filename>\r
       <Filename>Math64.c</Filename>\r
       <Filename>LongJump.c</Filename>\r
+      <Filename>SwitchStack.c</Filename>\r
       <Filename>x64/Non-existing.c</Filename>\r
-      <Filename>x64/SwitchStack.c</Filename>\r
       <Filename>x64/SwitchStack.asm</Filename>\r
       <Filename>x64/SetJump.asm</Filename>\r
       <Filename>x64/LongJump.asm</Filename>\r
@@ -269,9 +270,9 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
     <Arch ArchType="IPF">\r
       <Filename>Math64.c</Filename>\r
       <Filename>LongJump.c</Filename>\r
+      <Filename>SwitchStack.c</Filename>\r
       <Filename>Ipf/setjmp.s</Filename>\r
       <Filename>Ipf/SwitchStack.s</Filename>\r
-      <Filename>x64/SwitchStack.c</Filename>\r
       <Filename>Ipf/Unaligned.c</Filename>\r
       <Filename>Ipf/CpuBreakpoint.c</Filename>\r
       <Filename>Ipf/InterlockedCompareExchange32.s</Filename>\r
index afcfa754f3ebba4d5c2b05177440ebaf55474284..4f501695503dba442636365629a8bcdb8cf86b3f 100644 (file)
@@ -73,7 +73,9 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
       <Filename>x86Thunk.c</Filename>\r
       <Filename>Unaligned.c</Filename>\r
       <Filename>LongJump.c</Filename>\r
+      <Filename>SwitchStack.c</Filename>\r
       <Filename>Ia32/Non-existing.c</Filename>\r
+      <Filename>Ia32/InternalSwitchStack.c</Filename>\r
       <Filename>Ia32/LShiftU64.asm</Filename>\r
       <Filename>Ia32/RShiftU64.asm</Filename>\r
       <Filename>Ia32/ARShiftU64.asm</Filename>\r
@@ -89,7 +91,6 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
       <Filename>Ia32/SwapBytes64.asm</Filename>\r
       <Filename>Ia32/SetJump.asm</Filename>\r
       <Filename>Ia32/LongJump.asm</Filename>\r
-      <Filename>Ia32/SwitchStack.c</Filename>\r
       <Filename>Ia32/CpuId.asm</Filename>\r
       <Filename>Ia32/ReadEflags.asm</Filename>\r
       <Filename>Ia32/ReadMsr64.asm</Filename>\r
@@ -179,8 +180,8 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
       <Filename>Unaligned.c</Filename>\r
       <Filename>Math64.c</Filename>\r
       <Filename>LongJump.c</Filename>\r
+      <Filename>SwitchStack.c</Filename>\r
       <Filename>x64/Non-existing.c</Filename>\r
-      <Filename>x64/SwitchStack.c</Filename>\r
       <Filename>x64/SwitchStack.asm</Filename>\r
       <Filename>x64/SetJump.asm</Filename>\r
       <Filename>x64/LongJump.asm</Filename>\r
@@ -269,9 +270,9 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
     <Arch ArchType="IPF">\r
       <Filename>Math64.c</Filename>\r
       <Filename>LongJump.c</Filename>\r
+      <Filename>SwitchStack.c</Filename>\r
       <Filename>Ipf/PalCallStatic.s</Filename>\r
       <Filename>Ipf/setjmp.s</Filename>\r
-      <Filename>x64/SwitchStack.c</Filename>\r
       <Filename>Ipf/SwitchStack.s</Filename>\r
       <Filename>Ipf/Unaligned.c</Filename>\r
       <Filename>Ipf/CpuBreakpoint.c</Filename>\r
index 4cccdae528ddbb2338dea932d81e87c675bc30a6..0c32e1bd2c46b74cbf2620bf298f4c30e7a8ab26 100644 (file)
@@ -114,6 +114,15 @@ InternalMathDivRemS64x64 (
   OUT     INT64                     *Remainder\r
   );\r
 \r
+VOID\r
+EFIAPI\r
+InternalSwitchStack (\r
+  IN      SWITCH_STACK_ENTRY_POINT  EntryPoint,\r
+  IN      VOID                      *Context1,\r
+  IN      VOID                      *Context2,\r
+  IN      VOID                      *NewStack\r
+  );\r
+\r
 //\r
 // Ia32 and x64 specific functions\r
 //\r
diff --git a/MdePkg/Library/BaseLib/Ia32/InternalSwitchStack.c b/MdePkg/Library/BaseLib/Ia32/InternalSwitchStack.c
new file mode 100644 (file)
index 0000000..ab8116b
--- /dev/null
@@ -0,0 +1,52 @@
+/** @file\r
+  SwitchStack() function for IA-32.\r
+\r
+  Copyright (c) 2006, Intel Corporation<BR>\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
+  http://opensource.org/licenses/bsd-license.php\r
+\r
+  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:  InternalSwitchStack.c\r
+\r
+**/\r
+\r
+/**\r
+  Transfers control to a function starting with a new stack.\r
+\r
+  Transfers control to the function specified by EntryPoint using the new stack\r
+  specified by NewStack and passing in the parameters specified by Context1 and\r
+  Context2. Context1 and Context2 are optional and may be NULL. The function\r
+  EntryPoint must never return.\r
+\r
+  @param  EntryPoint  A pointer to function to call with the new stack.\r
+  @param  Context1    A pointer to the context to pass into the EntryPoint\r
+                      function.\r
+  @param  Context2    A pointer to the context to pass into the EntryPoint\r
+                      function.\r
+  @param  NewStack    A pointer to the new stack to use for the EntryPoint\r
+                      function.\r
+\r
+**/\r
+VOID\r
+EFIAPI\r
+InternalSwitchStack (\r
+  IN      SWITCH_STACK_ENTRY_POINT  EntryPoint,\r
+  IN      VOID                      *Context1,\r
+  IN      VOID                      *Context2,\r
+  IN      VOID                      *NewStack\r
+  )\r
+{\r
+  BASE_LIBRARY_JUMP_BUFFER  JumpBuffer;\r
+\r
+  JumpBuffer.Eip = (UINTN)EntryPoint;\r
+  JumpBuffer.Esp = (UINTN)NewStack - sizeof (VOID*);\r
+  JumpBuffer.Esp -= sizeof (Context1) + sizeof (Context2);\r
+  ((VOID**)JumpBuffer.Esp)[1] = Context1;\r
+  ((VOID**)JumpBuffer.Esp)[2] = Context2;\r
+\r
+  LongJump (&JumpBuffer, (UINTN)-1);\r
+}\r
index 16358add22bbf07580afb41ce8b858e5e85ca0df..58fe43d87f23c5deb44f6daae27a2ac4c91d3288 100644 (file)
@@ -66,7 +66,7 @@
 \r
 \r
 //VOID\r
-//_SwitchStack (\r
+//InternalSwitchStack (\r
 //    VOID    *ContinuationFunction,\r
 //    UINTN   Parameter,\r
 //    UINTN   NewTopOfStack,\r
@@ -85,7 +85,7 @@
 //\r
 //--*/\r
 \r
-PROCEDURE_ENTRY(_SwitchStack)\r
+PROCEDURE_ENTRY(InternalSwitchStack)\r
 \r
         mov        r16 = -0x10;;\r
         and        r16 = r34, r16;;             // get new stack value in R16, 0 the last nibble.\r
@@ -117,6 +117,6 @@ PROCEDURE_ENTRY(_SwitchStack)
         ;;\r
         br.call.sptk.few b0=b6;;                // Call the continuation function\r
         ;;\r
-PROCEDURE_EXIT(_SwitchStack)\r
+PROCEDURE_EXIT(InternalSwitchStack)\r
 \r
 \r
index 0f42749775c1b76a94dd2296ed74290ee0157dfb..9ad1b0875b0ecc3d1280a610e98144235c9449e4 100644 (file)
@@ -34,6 +34,10 @@ IsNodeInList (
   ASSERT (Node != NULL);\r
 \r
   Count = FixedPcdGet32 (PcdMaximumLinkedListLength);\r
+  if (Count != 0) {\r
+    Count++;\r
+  }\r
+\r
   Ptr = List;\r
   do {\r
     Ptr = Ptr->ForwardLink;\r
@@ -44,6 +48,7 @@ IsNodeInList (
   if (FixedPcdGet32 (PcdMaximumLinkedListLength) > 0) {\r
     while ((Count > 0) && (Ptr != List)) {\r
       Ptr = Ptr->ForwardLink;\r
+      Count--;\r
     }\r
     ASSERT (Count > 0);\r
   }\r
diff --git a/MdePkg/Library/BaseLib/SwitchStack.c b/MdePkg/Library/BaseLib/SwitchStack.c
new file mode 100644 (file)
index 0000000..fec3cfa
--- /dev/null
@@ -0,0 +1,51 @@
+/** @file\r
+  Switch Stack functions.\r
+\r
+  Copyright (c) 2006, Intel Corporation<BR>\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
+  http://opensource.org/licenses/bsd-license.php\r
+\r
+  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:  SwitchStack.c\r
+\r
+**/\r
+\r
+#include <BaseLibInternals.h>\r
+\r
+/**\r
+  Transfers control to a function starting with a new stack.\r
+\r
+  Transfers control to the function specified by EntryPoint using the new stack\r
+  specified by NewStack and passing in the parameters specified by Context1 and\r
+  Context2. Context1 and Context2 are optional and may be NULL. The function\r
+  EntryPoint must never return.\r
+\r
+  If EntryPoint is NULL, then ASSERT().\r
+  If NewStack is NULL, then ASSERT().\r
+\r
+  @param  EntryPoint  A pointer to function to call with the new stack.\r
+  @param  Context1    A pointer to the context to pass into the EntryPoint\r
+                      function.\r
+  @param  Context2    A pointer to the context to pass into the EntryPoint\r
+                      function.\r
+  @param  NewStack    A pointer to the new stack to use for the EntryPoint\r
+                      function.\r
+\r
+**/\r
+VOID\r
+EFIAPI\r
+SwitchStack (\r
+  IN      SWITCH_STACK_ENTRY_POINT  EntryPoint,\r
+  IN      VOID                      *Context1,\r
+  IN      VOID                      *Context2,\r
+  IN      VOID                      *NewStack\r
+  )\r
+{\r
+  ASSERT (EntryPoint != NULL && NewStack != NULL);\r
+\r
+  InternalSwitchStack (EntryPoint, Context1, Context2, NewStack);\r
+}\r
index a1304ca29545bd3525e9e16e1b850ccf534d552c..53d1417f0b42636b68a7482b5987809407228581 100644 (file)
 ;   None\r
 ;\r
 ;------------------------------------------------------------------------------\r
-_SwitchStack PROC\r
+InternalSwitchStack PROC\r
     mov     rax, rcx\r
     mov     rcx, rdx\r
     mov     rdx, r8\r
     lea     rsp, [r9 - 20h]\r
     call    rax\r
-_SwitchStack ENDP\r
+InternalSwitchStack ENDP\r
 \r
     END\r