The EBC driver emits thunks for native to EBC calls, which are short
instructions sequences that bridge the gap between the native execution
environment and the EBC virtual machine.
Since these thunks are allocated using MemoryAllocationLib::AllocatePool(),
they are emitted into EfiBootServicesData regions, which does not reflect
the nature of these thunks accurately, and interferes with strict memory
protection policies that map data regions non-executable.
So instead, create a new helper EbcAllocatePoolForThunk() that invokes the
AllocatePool() boot service directly to allocate EfiBootServicesCode pool
memory explicitly, and wire up this helper for the various architecture
specific thunk generation routines.
Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Ard Biesheuvel <ard.biesheuvel@linaro.org>
Reviewed-by: Jiewen Yao <jiewen.yao@intel.com>
* This patch introduces EbcDebuggerHook.c/h and inserts the required
EBCDebugger references into the existing EBC source files.
* With all the hooks defined to their empty version in EbcDebuggerHook.c
the existing EBC VM behaviour is left unaffected.
Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Pete Batard <pete@akeo.ie>
Reviewed-by: Jiewen Yao <jiewen.yao@intel.com>
The BaseTools/Scripts/ConvertMasmToNasm.py script was used to convert
X64/EbcLowLevel.asm to X64/EbcLowLevel.nasm
And, manually update nasm code to use mov rcx, dword value and generate
the same assembly code with rcx register to asm code.
Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Jordan Justen <jordan.l.justen@intel.com>
even if the native function's arguments are less than 4.
From MSDN x64 Software Conventions, Overview of x64 Calling Conventions:
“The caller is responsible for allocating space for parameters to the
callee, and must always allocate sufficient space for the 4 register
parameters, even if the callee doesn’t have that many parameters.
This aids in the simplicity of supporting C unprototyped functions,
and vararg C/C++ functions.”
Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Samer El-Haj-Mahmoud elhaj@hp.com
Reviewed by: Jiewen Yao <Jiewen.Yao@intel.com>
Reviewed by: Feng Tian <Feng.Tian@intel.com>
git-svn-id: https://svn.code.sf.net/p/edk2/code/trunk/edk2@16152 6f19259b-4bc3-4df7-8a09-765794883524
Add missing EFIPAI for EbcInterpret and ExecuteEbcImageEntryPoint().
Get return value in EbcLLCALLEXNative(), remove EbcLLGetReturnValue().
2) Fix IA32 EBC interpreter bug on MOVsnw and MOVsnd.
3) Some cleanup
Add missing ReturnEBCStack() for IA32 build.
Remove unnecessary EbcLLGetStackPointer() for X64 and IPF build.
Remove deadcode EbcLLGetStackPointer() and EbcLLGetReturnValue() in IA32/X64/IPF ASM code.
Dump more info in CommonEbcExceptionHandler().
Signed-off-by: jyao1
Reviewed-by: Elvinli
git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@12745 6f19259b-4bc3-4df7-8a09-765794883524
This is a temporary fix that should for for most tool chains. A more complete fix will be required to guarantee compatibility with all tool chains.
git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@8973 6f19259b-4bc3-4df7-8a09-765794883524
This is a temporary fix that should for for most tool chains. A more complete fix will be required to guarantee compatibility with all tool chains.
git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@8970 6f19259b-4bc3-4df7-8a09-765794883524