mirror of https://github.com/acidanthera/audk.git
UefiCpuPkg/PiSmmCpuDxeSmm: patch "gSmbase" with PatchInstructionX86()
Rename the variable to "gPatchSmbase" so that its association with PatchInstructionX86() is clear from the declaration, change its type to X86_ASSEMBLY_PATCH_LABEL, and patch it with PatchInstructionX86(). This lets us remove the binary (DB) encoding of some instructions in "SmiEntry.nasm". Cc: Eric Dong <eric.dong@intel.com> Cc: Michael D Kinney <michael.d.kinney@intel.com> Ref: https://bugzilla.tianocore.org/show_bug.cgi?id=866 Contributed-under: TianoCore Contribution Agreement 1.1 Signed-off-by: Laszlo Ersek <lersek@redhat.com> Reviewed-by: Liming Gao <liming.gao@intel.com>
This commit is contained in:
parent
38a5df04ef
commit
5a1bfda4bd
|
@ -46,7 +46,7 @@ global ASM_PFX(gcSmiHandlerTemplate)
|
|||
global ASM_PFX(gcSmiHandlerSize)
|
||||
global ASM_PFX(gSmiCr3)
|
||||
global ASM_PFX(gSmiStack)
|
||||
global ASM_PFX(gSmbase)
|
||||
global ASM_PFX(gPatchSmbase)
|
||||
global ASM_PFX(mXdSupported)
|
||||
extern ASM_PFX(gSmiHandlerIdtr)
|
||||
|
||||
|
@ -65,8 +65,8 @@ _SmiEntryPoint:
|
|||
o32 lgdt [cs:bx] ; lgdt fword ptr cs:[bx]
|
||||
mov ax, PROTECT_MODE_CS
|
||||
mov [cs:bx-0x2],ax
|
||||
DB 0x66, 0xbf ; mov edi, SMBASE
|
||||
ASM_PFX(gSmbase): DD 0
|
||||
mov edi, strict dword 0 ; source operand will be patched
|
||||
ASM_PFX(gPatchSmbase):
|
||||
lea eax, [edi + (@32bit - _SmiEntryPoint) + 0x8000]
|
||||
mov [cs:bx-0x6],eax
|
||||
mov ebx, cr0
|
||||
|
|
|
@ -105,7 +105,7 @@ typedef struct {
|
|||
///
|
||||
/// Variables from SMI Handler
|
||||
///
|
||||
extern UINT32 gSmbase;
|
||||
X86_ASSEMBLY_PATCH_LABEL gPatchSmbase;
|
||||
extern volatile UINT32 gSmiStack;
|
||||
extern UINT32 gSmiCr3;
|
||||
extern volatile UINT8 gcSmiHandlerTemplate[];
|
||||
|
@ -718,7 +718,7 @@ InstallSmiHandler (
|
|||
//
|
||||
gSmiStack = (UINT32)((UINTN)SmiStack + StackSize - sizeof (UINTN));
|
||||
gSmiCr3 = Cr3;
|
||||
gSmbase = SmBase;
|
||||
PatchInstructionX86 (gPatchSmbase, SmBase, 4);
|
||||
gSmiHandlerIdtr.Base = IdtBase;
|
||||
gSmiHandlerIdtr.Limit = (UINT16)(IdtSize - 1);
|
||||
|
||||
|
|
|
@ -53,7 +53,7 @@ extern ASM_PFX(gSmiHandlerIdtr)
|
|||
extern ASM_PFX(CpuSmmDebugEntry)
|
||||
extern ASM_PFX(CpuSmmDebugExit)
|
||||
|
||||
global ASM_PFX(gSmbase)
|
||||
global ASM_PFX(gPatchSmbase)
|
||||
global ASM_PFX(mXdSupported)
|
||||
global ASM_PFX(gSmiStack)
|
||||
global ASM_PFX(gSmiCr3)
|
||||
|
@ -75,8 +75,8 @@ _SmiEntryPoint:
|
|||
o32 lgdt [cs:bx] ; lgdt fword ptr cs:[bx]
|
||||
mov ax, PROTECT_MODE_CS
|
||||
mov [cs:bx-0x2],ax
|
||||
DB 0x66, 0xbf ; mov edi, SMBASE
|
||||
ASM_PFX(gSmbase): DD 0
|
||||
mov edi, strict dword 0 ; source operand will be patched
|
||||
ASM_PFX(gPatchSmbase):
|
||||
lea eax, [edi + (@ProtectedMode - _SmiEntryPoint) + 0x8000]
|
||||
mov [cs:bx-0x6],eax
|
||||
mov ebx, cr0
|
||||
|
|
Loading…
Reference in New Issue