From: bbahnsen Date: Thu, 13 Jul 2006 05:58:24 +0000 (+0000) Subject: Add gcc assembly file. X-Git-Tag: edk2-stable201903~24907 X-Git-Url: https://git.proxmox.com/?p=mirror_edk2.git;a=commitdiff_plain;h=b6454bcb782fe9ac5b129ae95eaa397d88071b1d Add gcc assembly file. git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@953 6f19259b-4bc3-4df7-8a09-765794883524 --- diff --git a/EdkModulePkg/Universal/DebugSupport/Dxe/DebugSupport.msa b/EdkModulePkg/Universal/DebugSupport/Dxe/DebugSupport.msa index 8ea5fa78c9..81f19f39fa 100644 --- a/EdkModulePkg/Universal/DebugSupport/Dxe/DebugSupport.msa +++ b/EdkModulePkg/Universal/DebugSupport/Dxe/DebugSupport.msa @@ -50,6 +50,7 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.--> DebugSupport.c DebugSupport.dxs Ia32/AsmFuncs.asm + Ia32/AsmFuncs.S Ia32/plDebugSupport.h Ia32/plDebugSupport.c ipf/AsmFuncs.s @@ -76,4 +77,4 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.--> InitializeDebugSupportDriver - \ No newline at end of file + diff --git a/EdkModulePkg/Universal/DebugSupport/Dxe/ia32/AsmFuncs.S b/EdkModulePkg/Universal/DebugSupport/Dxe/ia32/AsmFuncs.S new file mode 100644 index 0000000000..286ac059a7 --- /dev/null +++ b/EdkModulePkg/Universal/DebugSupport/Dxe/ia32/AsmFuncs.S @@ -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