summaryrefslogtreecommitdiff
path: root/MdePkg
diff options
context:
space:
mode:
authorxli24 <xli24@6f19259b-4bc3-4df7-8a09-765794883524>2008-01-24 02:59:28 +0000
committerxli24 <xli24@6f19259b-4bc3-4df7-8a09-765794883524>2008-01-24 02:59:28 +0000
commit57069be8fba60f26e1ca5f056e995e348e2ad2f8 (patch)
treea549a2e93d29f8130f78c366059d1c164ff04a6c /MdePkg
parent392d56cf4ed3295e0d673e47b7f2adc0464a661d (diff)
downloadedk2-platforms-57069be8fba60f26e1ca5f056e995e348e2ad2f8.tar.xz
Update Thunk16.S of X64 for BaseLib.
git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@4620 6f19259b-4bc3-4df7-8a09-765794883524
Diffstat (limited to 'MdePkg')
-rw-r--r--MdePkg/Library/BaseLib/X64/Thunk16.S28
1 files changed, 18 insertions, 10 deletions
diff --git a/MdePkg/Library/BaseLib/X64/Thunk16.S b/MdePkg/Library/BaseLib/X64/Thunk16.S
index 1ff8c800a2..3200a09282 100644
--- a/MdePkg/Library/BaseLib/X64/Thunk16.S
+++ b/MdePkg/Library/BaseLib/X64/Thunk16.S
@@ -21,6 +21,14 @@
#include <Library/BaseLib.h>
+.globl ASM_PFX(m16Start)
+.globl ASM_PFX(m16Size)
+.globl ASM_PFX(mThunk16Attr)
+.globl ASM_PFX(m16Gdt)
+.globl ASM_PFX(m16GdtrBase)
+.globl ASM_PFX(mTransition)
+.globl ASM_PFX(InternalAsmThunk16)
+
# define the structure of IA32_REGS
.equ _EDI, 0 #size 4
.equ _ESI, 4 #size 4
@@ -42,15 +50,15 @@
.data
-m16Size: .word _InternalAsmThunk16 - m16Start
-mThunk16Attr: .word _ThunkAttr - m16Start
-m16Gdt: .word _NullSeg - m16Start
-m16GdtrBase: .word _16GdtrBase - m16Start
-mTransition: .word _EntryPoint - m16Start
+ASM_PFX(m16Size): .word ASM_PFX(InternalAsmThunk16) - ASM_PFX(m16Start)
+ASM_PFX(mThunk16Attr): .word _ThunkAttr - ASM_PFX(m16Start)
+ASM_PFX(m16Gdt): .word _NullSeg - ASM_PFX(m16Start)
+ASM_PFX(m16GdtrBase): .word _16GdtrBase - ASM_PFX(m16Start)
+ASM_PFX(mTransition): .word _EntryPoint - ASM_PFX(m16Start)
.text
-m16Start:
+ASM_PFX(m16Start):
SavedGdt: .space 10
@@ -134,10 +142,10 @@ SavedCs: .space 2
movq %r8, %rsp
ret
-_EntryPoint: .long ASM_PFX(ToUserCode) - m16Start
+_EntryPoint: .long ASM_PFX(ToUserCode) - ASM_PFX(m16Start)
.word CODE16
_16Gdtr: .word GDT_SIZE - 1
-_16GdtrBase: .quad $_NullSeg
+_16GdtrBase: .quad _NullSeg
_16Idtr: .word 0x3ff
.long 0
@@ -244,11 +252,11 @@ ASM_PFX(InternalAsmThunk16):
popq %rcx
rep
movsl # copy RegSet
- lea (SavedCr4 - m16Start)(%rdx), %ecx
+ lea (SavedCr4 - ASM_PFX(m16Start))(%rdx), %ecx
movl %edx,%eax # eax <- transition code address
andl $0xf,%edx
shll $12,%eax # segment address in high order 16 bits
- lea (_BackFromUserCode - m16Start)(%rdx), %ax
+ lea (_BackFromUserCode - ASM_PFX(m16Start))(%rdx), %ax
stosl # [edi] <- return address of user code
sgdt (SavedGdt - SavedCr4)(%rcx)
sidt 0x38(%rsp)