summaryrefslogtreecommitdiff
path: root/EdkModulePkg/Universal
diff options
context:
space:
mode:
authorbbahnsen <bbahnsen@6f19259b-4bc3-4df7-8a09-765794883524>2006-07-13 05:58:24 +0000
committerbbahnsen <bbahnsen@6f19259b-4bc3-4df7-8a09-765794883524>2006-07-13 05:58:24 +0000
commitb6454bcb782fe9ac5b129ae95eaa397d88071b1d (patch)
treece7e685bc17bb8793adfac180f22f1db059f22ec /EdkModulePkg/Universal
parentf23c214dca7068e1b38bbf864a2c08065b20f915 (diff)
downloadedk2-platforms-b6454bcb782fe9ac5b129ae95eaa397d88071b1d.tar.xz
Add gcc assembly file.
git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@953 6f19259b-4bc3-4df7-8a09-765794883524
Diffstat (limited to 'EdkModulePkg/Universal')
-rw-r--r--EdkModulePkg/Universal/DebugSupport/Dxe/DebugSupport.msa3
-rw-r--r--EdkModulePkg/Universal/DebugSupport/Dxe/ia32/AsmFuncs.S269
2 files changed, 271 insertions, 1 deletions
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.-->
<Filename>DebugSupport.c</Filename>
<Filename>DebugSupport.dxs</Filename>
<Filename SupArchList="IA32">Ia32/AsmFuncs.asm</Filename>
+ <Filename SupArchList="IA32">Ia32/AsmFuncs.S</Filename>
<Filename SupArchList="IA32">Ia32/plDebugSupport.h</Filename>
<Filename SupArchList="IA32">Ia32/plDebugSupport.c</Filename>
<Filename SupArchList="IPF">ipf/AsmFuncs.s</Filename>
@@ -76,4 +77,4 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.-->
<ModuleEntryPoint>InitializeDebugSupportDriver</ModuleEntryPoint>
</Extern>
</Externs>
-</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
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