Jiewen: Because nasm doesn't generate the absolute address, we can change the below code, but we need to fix up its value at boot time like current _SmiHandler way.
Could you let me know why can't use current way? Thanks Liming >-----Original Message----- >From: Yao, Jiewen >Sent: Wednesday, September 12, 2018 9:04 AM >To: Gao, Liming <liming....@intel.com>; Laszlo Ersek <ler...@redhat.com>; >edk2-devel@lists.01.org >Cc: Dong, Eric <eric.d...@intel.com> >Subject: RE: [edk2] [Patch] UefiCpuPkg PiSmmCpuDxeSmm: Remove >unnecessary jmp _SmiHandler > >The original code is below. Can we rollback to the indirect call? > > mov rax, ASM_PFX(CpuSmmDebugEntry) > call rax > >Thank you >Yao Jiewen > >> -----Original Message----- >> From: Gao, Liming >> Sent: Wednesday, September 12, 2018 8:59 AM >> To: Yao, Jiewen <jiewen....@intel.com>; Laszlo Ersek ><ler...@redhat.com>; >> edk2-devel@lists.01.org >> Cc: Dong, Eric <eric.d...@intel.com> >> Subject: RE: [edk2] [Patch] UefiCpuPkg PiSmmCpuDxeSmm: Remove >> unnecessary jmp _SmiHandler >> >> Jiewen: >> After do more verification, I recall this change. Current code is really >> required. Without it, OVMF SMM can't boot. So, below code can't be >> removed. >> The reason is that nasm _SmiEntryPoint() function is copied to another >> memory location and run. But, _ SmiEntryPoint() calls the external C >function >> CpuSmmDebugEntry(). nasm compiler generates the function call with the >> relative address. After _SmiEntryPoint() function is copied and run in the >new >> address, its external function call will not work. To fix it, I add jmp >> instruction >> to the original address, then process function all and works. >> >> mov rax, strict qword 0 ; mov rax, _SmiHandler >> _SmiHandlerAbsAddr: >> jmp rax >> >> ... >> mov rcx, rbx >> call ASM_PFX(CpuSmmDebugEntry) >> >> Thanks >> Liming >> >-----Original Message----- >> >From: Yao, Jiewen >> >Sent: Wednesday, September 12, 2018 6:03 AM >> >To: Laszlo Ersek <ler...@redhat.com>; Gao, Liming >> <liming....@intel.com>; >> >edk2-devel@lists.01.org >> >Cc: Dong, Eric <eric.d...@intel.com> >> >Subject: RE: [edk2] [Patch] UefiCpuPkg PiSmmCpuDxeSmm: Remove >> >unnecessary jmp _SmiHandler >> > >> >HI >> >Would you please add info on what unit test has been done? >> > >> >Thank you >> >Yao Jiewen >> > >> > >> >> -----Original Message----- >> >> From: edk2-devel [mailto:edk2-devel-boun...@lists.01.org] On Behalf >Of >> >> Laszlo Ersek >> >> Sent: Tuesday, September 11, 2018 11:06 PM >> >> To: Gao, Liming <liming....@intel.com>; edk2-devel@lists.01.org >> >> Cc: Yao, Jiewen <jiewen....@intel.com>; Dong, Eric >> <eric.d...@intel.com> >> >> Subject: Re: [edk2] [Patch] UefiCpuPkg PiSmmCpuDxeSmm: Remove >> >> unnecessary jmp _SmiHandler >> >> >> >> On 09/10/18 10:20, Liming Gao wrote: >> >> > This change is wrong introduced by >> >> e21e355e2ca7fefb15b4df7078f995d3fb9c2b89 >> >> > It is not required. So, revert it. >> >> > >> >> > Contributed-under: TianoCore Contribution Agreement 1.1 >> >> > Signed-off-by: Liming Gao <liming....@intel.com> >> >> > Cc: Jiewen Yao <jiewen....@intel.com> >> >> > --- >> >> > UefiCpuPkg/PiSmmCpuDxeSmm/X64/SmiEntry.nasm | 9 ++------- >> >> > 1 file changed, 2 insertions(+), 7 deletions(-) >> >> > >> >> > diff --git a/UefiCpuPkg/PiSmmCpuDxeSmm/X64/SmiEntry.nasm >> >> b/UefiCpuPkg/PiSmmCpuDxeSmm/X64/SmiEntry.nasm >> >> > index 315d0f8..7b1b3ca 100644 >> >> > --- a/UefiCpuPkg/PiSmmCpuDxeSmm/X64/SmiEntry.nasm >> >> > +++ b/UefiCpuPkg/PiSmmCpuDxeSmm/X64/SmiEntry.nasm >> >> > @@ -173,9 +173,8 @@ SmiHandlerIdtrAbsAddr: >> >> > mov gs, eax >> >> > mov ax, [rbx + DSC_SS] >> >> > mov ss, eax >> >> > - mov rax, strict qword 0 ; mov rax, >> >> _SmiHandler >> >> > -_SmiHandlerAbsAddr: >> >> > - jmp rax >> >> > + >> >> > +; jmp _SmiHandler ; instruction is not >> needed >> >> > >> >> > _SmiHandler: >> >> > mov rbx, [rsp + 0x8] ; rcx <- CpuIndex >> >> > @@ -229,8 +228,4 @@ ASM_PFX(PiSmmCpuSmiEntryFixupAddress): >> >> > lea rax, [ASM_PFX(gSmiHandlerIdtr)] >> >> > lea rcx, [SmiHandlerIdtrAbsAddr] >> >> > mov qword [rcx - 8], rax >> >> > - >> >> > - lea rax, [_SmiHandler] >> >> > - lea rcx, [_SmiHandlerAbsAddr] >> >> > - mov qword [rcx - 8], rax >> >> > ret >> >> > >> >> >> >> Please remember to CC package maintainers / reviewers directly. >> >> >> >> The patch makes sense to me, and indeed it restores the original code. >> >> >> >> Reviewed-by: Laszlo Ersek <ler...@redhat.com> >> >> >> >> Can you perhaps add another sentence to the commit message, before >> you >> >> push the patch, such as "the original code already uses RIP-relative >> >> addressing"? >> >> >> >> Thanks >> >> Laszlo >> >> _______________________________________________ >> >> edk2-devel mailing list >> >> edk2-devel@lists.01.org >> >> https://lists.01.org/mailman/listinfo/edk2-devel _______________________________________________ edk2-devel mailing list edk2-devel@lists.01.org https://lists.01.org/mailman/listinfo/edk2-devel