From 26a74a36c155e74463267e187b77b5c404dcd9cf Mon Sep 17 00:00:00 2001 From: li-elvin Date: Wed, 19 Oct 2011 00:45:13 +0000 Subject: [PATCH] Use a local variable and assign 0 to it, then use it as legacy interrupt table base address. Signed-off-by: li-elvin Reviewed-by: mdkinney, ydong10 git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@12547 6f19259b-4bc3-4df7-8a09-765794883524 --- IntelFrameworkModulePkg/Csm/LegacyBiosDxe/Thunk.c | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/IntelFrameworkModulePkg/Csm/LegacyBiosDxe/Thunk.c b/IntelFrameworkModulePkg/Csm/LegacyBiosDxe/Thunk.c index 9a62499f05..16c873d8f5 100644 --- a/IntelFrameworkModulePkg/Csm/LegacyBiosDxe/Thunk.c +++ b/IntelFrameworkModulePkg/Csm/LegacyBiosDxe/Thunk.c @@ -57,6 +57,8 @@ LegacyBiosInt86 ( IN EFI_IA32_REGISTER_SET *Regs ) { + UINT32 *VectorBase; + Regs->X.Flags.Reserved1 = 1; Regs->X.Flags.Reserved2 = 0; Regs->X.Flags.Reserved3 = 0; @@ -66,11 +68,16 @@ LegacyBiosInt86 ( Regs->X.Flags.IF = 0; Regs->X.Flags.TF = 0; Regs->X.Flags.CF = 0; - + // + // The base address of legacy interrupt vector table is 0. + // We use this base address to get the legacy interrupt handler. + // + VectorBase = 0; + return InternalLegacyBiosFarCall ( This, - (UINT16) (((UINT32 *)NULL)[BiosInt] >> 16), - (UINT16) ((UINT32 *)NULL)[BiosInt], + (UINT16) ((VectorBase)[BiosInt] >> 16), + (UINT16) (VectorBase)[BiosInt], Regs, &Regs->X.Flags, sizeof (Regs->X.Flags) -- 2.39.2