]> git.proxmox.com Git - mirror_edk2.git/blobdiff - EdkModulePkg/Universal/DebugSupport/Dxe/Ia32/AsmFuncs.S
Fixes for Linux builds.
[mirror_edk2.git] / EdkModulePkg / Universal / DebugSupport / Dxe / Ia32 / AsmFuncs.S
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..131464a
--- /dev/null
@@ -0,0 +1,270 @@
+#******************************************************************************
+#*
+#* 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   _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 _InterruptEntryStubEnd
+_InterruptEntryStubEnd:
+
+.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