Add gcc assembly file.
authorbbahnsen <bbahnsen@6f19259b-4bc3-4df7-8a09-765794883524>
Thu, 13 Jul 2006 05:58:24 +0000 (05:58 +0000)
committerbbahnsen <bbahnsen@6f19259b-4bc3-4df7-8a09-765794883524>
Thu, 13 Jul 2006 05:58:24 +0000 (05:58 +0000)
git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@953 6f19259b-4bc3-4df7-8a09-765794883524

EdkModulePkg/Universal/DebugSupport/Dxe/DebugSupport.msa
EdkModulePkg/Universal/DebugSupport/Dxe/ia32/AsmFuncs.S [new file with mode: 0644]

index 8ea5fa7..81f19f3 100644 (file)
@@ -50,6 +50,7 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.-->
     <Filename>DebugSupport.c</Filename>\r
     <Filename>DebugSupport.dxs</Filename>\r
     <Filename SupArchList="IA32">Ia32/AsmFuncs.asm</Filename>\r
+    <Filename SupArchList="IA32">Ia32/AsmFuncs.S</Filename>\r
     <Filename SupArchList="IA32">Ia32/plDebugSupport.h</Filename>\r
     <Filename SupArchList="IA32">Ia32/plDebugSupport.c</Filename>\r
     <Filename SupArchList="IPF">ipf/AsmFuncs.s</Filename>\r
@@ -76,4 +77,4 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.-->
       <ModuleEntryPoint>InitializeDebugSupportDriver</ModuleEntryPoint>\r
     </Extern>\r
   </Externs>\r
-</ModuleSurfaceArea>
\ No newline at end of file
+</ModuleSurfaceArea>
diff --git a/EdkModulePkg/Universal/DebugSupport/Dxe/ia32/AsmFuncs.S b/EdkModulePkg/Universal/DebugSupport/Dxe/ia32/AsmFuncs.S
new file mode 100644 (file)
index 0000000..286ac05
--- /dev/null
@@ -0,0 +1,269 @@
+;******************************************************************************
+;*
+;* Copyright (c) 2006, Intel Corporation                                                         
+;* All rights reserved. This program and the accompanying materials                          
+;* are licensed and made available under the terms and conditions of the BSD License         
+;* which accompanies this distribution.  The full text of the license may be found at        
+;* http://opensource.org/licenses/bsd-license.php                                            
+;*                                                                                           
+;* THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,                     
+;* WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.             
+;*
+;******************************************************************************
+
+.global _OrigVector
+.global _InterruptEntryStub
+.global _StubSize
+.global _CommonIdtEntry
+.global _FxStorSupport
+
+_AppEsp:         .long   0x11111111 # ?
+_DebugEsp:       .long   0x22222222 # ?
+_ExtraPush:      .long   0x33333333 # ?
+_ExceptData:     .long   0x44444444 # ?
+_Eflags:         .long   0x55555555 # ?
+_OrigVector:     .long   0x66666666 # ?
+_StubSize:       .long   0x0
+# StubSize:       .long   InterruptEntryStubEnd - InterruptEntryStub
+
+.global _FxStorSupport
+_FxStorSupport:
+        push   %ebx
+        mov    $0x1,%eax
+        cpuid  
+        mov    %edx,%eax
+        and    $0x1000000,%eax
+        shr    $0x18,%eax
+        pop    %ebx
+        ret    
+
+.global _GetIdtr
+_GetIdtr:
+        push   %ebp
+        mov    %esp,%ebp
+        add    $0xfffffff8,%esp
+        sidtl  0xfffffffa(%ebp)
+        mov    0xfffffffc(%ebp),%eax
+        leave  
+        ret    
+
+.global _WriteInterruptFlag
+_WriteInterruptFlag:
+        push   %ebp
+        mov    %esp,%ebp
+        pushf  
+        pop    %eax
+        and    $0x200,%eax
+        shr    $0x9,%eax
+        mov    0x8(%ebp),%ecx
+        or     %ecx,%ecx
+        jne    _WriteInterruptFlag+0x17
+        cli    
+        jmp    _WriteInterruptFlag+0x18
+        sti    
+        leave  
+        ret    
+
+.global _Vect2Desc
+_Vect2Desc:
+        push   %ebp
+        mov    %esp,%ebp
+        mov    0xc(%ebp),%eax
+        mov    0x8(%ebp),%ecx
+        mov    %ax,(%ecx)
+        movw   $0x20,0x2(%ecx)
+        movw   $0x8e00,0x4(%ecx)
+        shr    $0x10,%eax
+        mov    %ax,0x6(%ecx)
+        leave  
+        ret    
+
+.global _InterruptEntryStub
+_InterruptEntryStub:
+        mov    %esp,0x0
+        mov    $0x0,%esp
+        push   $0x0
+        jmp    _CommonIdtEntry
+
+.global _CommonIdtEntry
+_CommonIdtEntry:
+        pusha  
+        pushf  
+        pop    %eax
+        mov    %eax,0x0
+        cmpl   $0x8,0x0
+        jne    _CommonIdtEntry+0x20
+        movl   $0x1,0x0
+        jmp    _CommonIdtEntry+0xa8
+        cmpl   $0xa,0x0
+        jne    _CommonIdtEntry+0x35
+        movl   $0x1,0x0
+        jmp    _CommonIdtEntry+0xa8
+        cmpl   $0xb,0x0
+        jne    _CommonIdtEntry+0x4a
+        movl   $0x1,0x0
+        jmp    _CommonIdtEntry+0xa8
+        cmpl   $0xc,0x0
+        jne    _CommonIdtEntry+0x5f
+        movl   $0x1,0x0
+        jmp    _CommonIdtEntry+0xa8
+        cmpl   $0xd,0x0
+        jne    _CommonIdtEntry+0x74
+        movl   $0x1,0x0
+        jmp    _CommonIdtEntry+0xa8
+        cmpl   $0xe,0x0
+        jne    _CommonIdtEntry+0x89
+        movl   $0x1,0x0
+        jmp    _CommonIdtEntry+0xa8
+        cmpl   $0x11,0x0
+        jne    _CommonIdtEntry+0x9e
+        movl   $0x1,0x0
+        jmp    _CommonIdtEntry+0xa8
+        movl   $0x0,0x0
+        cmpl   $0x1,0x0
+        jne    _CommonIdtEntry+0xc8
+        mov    0x0,%eax
+        mov    (%eax),%ebx
+        mov    %ebx,0x0
+        add    $0x4,%eax
+        mov    %eax,0x0
+        jmp    _CommonIdtEntry+0xd2
+        movl   $0x0,0x0
+        mov    0xc(%esp),%eax
+        mov    %eax,0x0
+        mov    0x0,%eax
+        add    $0xc,%eax
+        mov    %eax,0xc(%esp)
+        mov    %ss,%eax
+        push   %eax
+        mov    0x0,%eax
+        movzwl 0x4(%eax),%eax
+        push   %eax
+        mov    %ds,%eax
+        push   %eax
+        mov    %es,%eax
+        push   %eax
+        mov    %fs,%eax
+        push   %eax
+        mov    %gs,%eax
+        push   %eax
+        mov    0x0,%eax
+        pushl  (%eax)
+        push   $0x0
+        push   $0x0
+        sidtl  (%esp)
+        push   $0x0
+        push   $0x0
+        sgdtl  (%esp)
+        xor    %eax,%eax
+        str    %eax
+        push   %eax
+        sldt   %eax
+        push   %eax
+        mov    0x0,%eax
+        pushl  0x8(%eax)
+        mov    %cr4,%eax
+        or     $0x208,%eax
+        mov    %eax,%cr4
+        push   %eax
+        mov    %cr3,%eax
+        push   %eax
+        mov    %cr2,%eax
+        push   %eax
+        push   $0x0
+        mov    %cr0,%eax
+        push   %eax
+        mov    %db7,%eax
+        push   %eax
+        xor    %eax,%eax
+        mov    %eax,%db7
+        mov    %db6,%eax
+        push   %eax
+        xor    %eax,%eax
+        mov    %eax,%db6
+        mov    %db3,%eax
+        push   %eax
+        mov    %db2,%eax
+        push   %eax
+        mov    %db1,%eax
+        push   %eax
+        mov    %db0,%eax
+        push   %eax
+        sub    $0x200,%esp
+        mov    %esp,%edi
+        fxsave (%edi)
+        mov    0x0,%eax
+        push   %eax
+        mov    %esp,%eax
+        push   %eax
+        mov    0x0,%eax
+        push   %eax
+        call   _CommonIdtEntry+0x184
+        add    $0x8,%esp
+        add    $0x4,%esp
+        mov    %esp,%esi
+        fxrstor (%esi)
+        add    $0x200,%esp
+        pop    %eax
+        mov    %eax,%db0
+        pop    %eax
+        mov    %eax,%db1
+        pop    %eax
+        mov    %eax,%db2
+        pop    %eax
+        mov    %eax,%db3
+        add    $0x4,%esp
+        pop    %eax
+        mov    %eax,%db7
+        pop    %eax
+        mov    %eax,%cr0
+        add    $0x4,%esp
+        pop    %eax
+        mov    %eax,%cr2
+        pop    %eax
+        mov    %eax,%cr3
+        pop    %eax
+        mov    %eax,%cr4
+        mov    0x0,%eax
+        popl   0x8(%eax)
+        add    $0x18,%esp
+        popl   (%eax)
+        pop    %gs
+        pop    %fs
+        pop    %es
+        pop    %ds
+        popl   0x4(%eax)
+        pop    %ss
+        mov    0xc(%esp),%ebx
+        mov    0x0,%eax
+        add    $0xc,%eax
+        cmp    %eax,%ebx
+        je     _CommonIdtEntry+0x202
+        mov    0x0,%eax
+        mov    (%eax),%ecx
+        mov    %ecx,(%ebx)
+        mov    0x4(%eax),%ecx
+        mov    %ecx,0x4(%ebx)
+        mov    0x8(%eax),%ecx
+        mov    %ecx,0x8(%ebx)
+        mov    %ebx,%eax
+        mov    %eax,0x0
+        mov    0x0,%eax
+        mov    %eax,0xc(%esp)
+        cmpl   $0x68,0x0
+        jne    PhonyIretd+0xd
+        mov    0x0,%eax
+        mov    0x8(%eax),%ebx
+        and    $0xfffffcff,%ebx
+        push   %ebx
+        push   %cs
+        push   $0x0
+        iret   
+
+PhonyIretd:
+        popa   
+        mov    0x0,%esp
+        jmp    *0x0
+        popa   
+        mov    0x0,%esp
+        iret