mirror of https://github.com/acidanthera/audk.git
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
This commit is contained in:
parent
392d56cf4e
commit
57069be8fb
|
@ -21,6 +21,14 @@
|
||||||
|
|
||||||
#include <Library/BaseLib.h>
|
#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
|
# define the structure of IA32_REGS
|
||||||
.equ _EDI, 0 #size 4
|
.equ _EDI, 0 #size 4
|
||||||
.equ _ESI, 4 #size 4
|
.equ _ESI, 4 #size 4
|
||||||
|
@ -42,15 +50,15 @@
|
||||||
|
|
||||||
.data
|
.data
|
||||||
|
|
||||||
m16Size: .word _InternalAsmThunk16 - m16Start
|
ASM_PFX(m16Size): .word ASM_PFX(InternalAsmThunk16) - ASM_PFX(m16Start)
|
||||||
mThunk16Attr: .word _ThunkAttr - m16Start
|
ASM_PFX(mThunk16Attr): .word _ThunkAttr - ASM_PFX(m16Start)
|
||||||
m16Gdt: .word _NullSeg - m16Start
|
ASM_PFX(m16Gdt): .word _NullSeg - ASM_PFX(m16Start)
|
||||||
m16GdtrBase: .word _16GdtrBase - m16Start
|
ASM_PFX(m16GdtrBase): .word _16GdtrBase - ASM_PFX(m16Start)
|
||||||
mTransition: .word _EntryPoint - m16Start
|
ASM_PFX(mTransition): .word _EntryPoint - ASM_PFX(m16Start)
|
||||||
|
|
||||||
.text
|
.text
|
||||||
|
|
||||||
m16Start:
|
ASM_PFX(m16Start):
|
||||||
|
|
||||||
SavedGdt: .space 10
|
SavedGdt: .space 10
|
||||||
|
|
||||||
|
@ -134,10 +142,10 @@ SavedCs: .space 2
|
||||||
movq %r8, %rsp
|
movq %r8, %rsp
|
||||||
ret
|
ret
|
||||||
|
|
||||||
_EntryPoint: .long ASM_PFX(ToUserCode) - m16Start
|
_EntryPoint: .long ASM_PFX(ToUserCode) - ASM_PFX(m16Start)
|
||||||
.word CODE16
|
.word CODE16
|
||||||
_16Gdtr: .word GDT_SIZE - 1
|
_16Gdtr: .word GDT_SIZE - 1
|
||||||
_16GdtrBase: .quad $_NullSeg
|
_16GdtrBase: .quad _NullSeg
|
||||||
_16Idtr: .word 0x3ff
|
_16Idtr: .word 0x3ff
|
||||||
.long 0
|
.long 0
|
||||||
|
|
||||||
|
@ -244,11 +252,11 @@ ASM_PFX(InternalAsmThunk16):
|
||||||
popq %rcx
|
popq %rcx
|
||||||
rep
|
rep
|
||||||
movsl # copy RegSet
|
movsl # copy RegSet
|
||||||
lea (SavedCr4 - m16Start)(%rdx), %ecx
|
lea (SavedCr4 - ASM_PFX(m16Start))(%rdx), %ecx
|
||||||
movl %edx,%eax # eax <- transition code address
|
movl %edx,%eax # eax <- transition code address
|
||||||
andl $0xf,%edx
|
andl $0xf,%edx
|
||||||
shll $12,%eax # segment address in high order 16 bits
|
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
|
stosl # [edi] <- return address of user code
|
||||||
sgdt (SavedGdt - SavedCr4)(%rcx)
|
sgdt (SavedGdt - SavedCr4)(%rcx)
|
||||||
sidt 0x38(%rsp)
|
sidt 0x38(%rsp)
|
||||||
|
|
Loading…
Reference in New Issue