audk/UefiCpuPkg
Liming Gao a364928195 UefiCpuPkg PiSmmCpuDxeSmm: Update SmiEntry function run the same position
BZ: https://bugzilla.tianocore.org/show_bug.cgi?id=1191

Before commit e21e355e2c, jmp _SmiHandler
is commented. And below code, ASM_PFX(CpuSmmDebugEntry) is moved into rax,
then call it. But, this code doesn't work in XCODE5 tool chain. Because XCODE5
doesn't generated the absolute address in the EFI image. So, rax stores the
relative address. Once this logic is moved to another place, it will not work.
;   jmp     _SmiHandler                 ; instruction is not needed
...
    mov     rax, ASM_PFX(CpuSmmDebugEntry)
    call    rax

Commit e21e355e2c is to support XCODE5.
One tricky way is selected to fix it. Although SmiEntry logic is copied to
another place and run, but here jmp _SmiHandler is enabled to jmp the original
code place, then call ASM_PFX(CpuSmmDebugEntry) with the relative address.
    mov     rax, strict qword 0         ;   mov     rax, _SmiHandler
_SmiHandlerAbsAddr:
    jmp     rax
...
    call    ASM_PFX(CpuSmmDebugEntry)

Now, BZ 1191 raises the issue that SmiHandler should run in the copied address,
can't run in the common address. So, jmp _SmiHandler is required to be removed,
the code is kept to run in copied address. And, the relative address is
requried to be fixed up to the absolute address. The necessary changes should
not affect the behavior of platforms that already consume PiSmmCpuDxeSmm.
OVMF SMM boot to shell with VS2017, GCC5 and XCODE5 tool chain has been verified.
...
    mov     rax, strict qword 0         ;   call    ASM_PFX(CpuSmmDebugEntry)
CpuSmmDebugEntryAbsAddr:
    call    rax

Contributed-under: TianoCore Contribution Agreement 1.1
Signed-off-by: Liming Gao <liming.gao@intel.com>
Cc: Laszlo Ersek <lersek@redhat.com>
Cc: Eric Dong <eric.dong@intel.com>
Cc: Jiewen Yao <jiewen.yao@intel.com>
Reviewed-by: Laszlo Ersek <lersek@redhat.com>
Tested-by: Laszlo Ersek <lersek@redhat.com>
Reviewed-by: Jiewen Yao <jiewen.yao@intel.com>
2018-09-25 08:25:41 +08:00
..
Application/Cpuid UefiCpuPkg: Clean up source files 2018-06-28 11:19:53 +08:00
CpuDxe UefiCpuPkg: Remove redundant library classes, Ppis and GUIDs 2018-09-21 14:42:53 +08:00
CpuFeatures UefiCpuPkg: Clean up source files 2018-06-28 11:19:53 +08:00
CpuIo2Dxe UefiCpuPkg: Removing ipf which is no longer supported from edk2. 2018-06-29 16:19:52 +08:00
CpuIo2Smm UefiCpuPkg: Clean up source files 2018-06-28 11:19:53 +08:00
CpuIoPei UefiCpuPkg: Removing ipf which is no longer supported from edk2. 2018-06-29 16:19:52 +08:00
CpuMpPei UefiCpuPkg/CpuMpPei: support stack guard feature 2018-09-10 09:28:28 +08:00
CpuS3DataDxe UefiCpuPkg/CpuS3DataDxe: Remove below 4G limitation. 2018-08-16 08:42:01 +08:00
Include UefiCpuPkg/AcpiCpuData.h: Remove AcpiNVS and Below 4G limitation. 2018-08-16 08:42:00 +08:00
Library UefiCpuPkg/PeiCpuException: Fix coding style issue 2018-09-10 10:22:27 +08:00
PiSmmCommunication UefiCpuPkg PiSmmCommunicationSmm: Deprecate SMM Communication ACPI Table 2017-07-27 14:08:09 +08:00
PiSmmCpuDxeSmm UefiCpuPkg PiSmmCpuDxeSmm: Update SmiEntry function run the same position 2018-09-25 08:25:41 +08:00
ResetVector UefiCpuPkg: Clean up source files 2018-06-28 11:19:53 +08:00
SecCore UefiCpuPkg: Remove redundant library classes, Ppis and GUIDs 2018-09-21 14:42:53 +08:00
Universal/Acpi/S3Resume2Pei UefiCpuPkg: Remove redundant library classes, Ppis and GUIDs 2018-09-21 14:42:53 +08:00
UefiCpuPkg.dec UefiCpuPkg: Update package version. 2018-01-22 19:23:56 +08:00
UefiCpuPkg.dsc UefiCpuPkg: Removing ipf which is no longer supported from edk2. 2018-06-29 16:19:52 +08:00
UefiCpuPkg.uni UefiCpuPkg/UefiCpuPkg.uni: Add missing string definition for new PCDs 2017-12-26 09:44:14 +08:00
UefiCpuPkgExtra.uni UefiCpuPkg: Clean up source files 2018-06-28 11:19:53 +08:00