290 Commits

Author SHA1 Message Date
Mike Beaton
9cdba17a1a IntrinsicLib: Move from CryptoPkg to MdePkg 2025-04-07 12:32:50 +03:00
Mikhail Krichanov
992385e15e SecurePE: Defined new PcdImageProtectionPolicy. 2025-04-07 12:30:28 +03:00
Mikhail Krichanov
1fef202932 MdePkg/UefiImageLib: Introduce DebugAddress
Signed-off-by: Marvin Häuser <mhaeuser@posteo.de>
2025-04-07 12:24:27 +03:00
Mikhail Krichanov
e46d356fc9 MdePkg/UefiImageLib: Support multi-format and multi-source architecture
Signed-off-by: Marvin Häuser <mhaeuser@posteo.de>
2025-04-07 12:24:27 +03:00
Mikhail Krichanov
63b9e567e5 Build: Replaced GCC5 toolchain with GCC. 2025-04-07 12:24:27 +03:00
Marvin Häuser
f7146c7ae7 Remove hacks related to former lack of XCODE5 .hii support 2025-04-07 12:18:23 +03:00
Mikhail Krichanov
bc87d7b430 Drop support for the TE format 2025-04-07 12:18:22 +03:00
Mikhail Krichanov
6b652ab025 MdePkg/MemoryAllocationLib: Add Allocate(Aligned)CodePages 2025-04-07 12:16:51 +03:00
Marvin Häuser
cd0db29940 EmulatorPkg/Host: Consume MemoryAllocationLib 2025-04-07 12:13:58 +03:00
Mikhail Krichanov
a52efcc86a MdePkg: Introduce CommonMemoryAllocationLib 2025-04-07 12:13:58 +03:00
Marvin Häuser
97a45f4633 EmulatorPkg/Host: Remove orphaned GetImageReadFunction() 2025-04-07 12:13:58 +03:00
Marvin Häuser
f4778d6fdd EmulatorPkg: Fix some image loader related issues 2025-04-07 12:13:58 +03:00
Marvin Häuser
91526b5ef2 EmulatorPkg: Fix Thunk PPI/Protocol library types 2025-04-07 12:13:58 +03:00
Marvin Häuser
a52b6a8d8e EmulatorPkg/Host: Remove orphaned SecImageRead() 2025-04-07 12:13:58 +03:00
Marvin Häuser
8acad7450a EmulatorPkg/Host: Fix XCODE5 build 2025-04-07 12:13:58 +03:00
Mikhail Krichanov
4d4dcbe71f BaseTools: Removed GCC48/49 toolchains, refactored tools_def.template. 2025-04-07 12:13:58 +03:00
Mikhail Krichanov
09a0c067d0 SecurePE: Replaced old PE loader with Secure one. 2025-04-07 12:12:35 +03:00
Oliver Smith-Denny
efbf5ed08c MdePkg: Move StackCheckLibStaticInit to StackCheckLib
This commit oves StackCheckLib from a NULL lib to an instance of
StackCheckLib. This requires every entry point to add a library
dependency on StackCheckLib. It also requires every SEC module
to have a dependency on StackCheckLib because there is no
standard SEC entry point.

It allows for greater flexibility for a platform to apply stack
cookies and simplifies DSC logic.

Continuous-integration-options: PatchCheck.ignore-multi-package

Signed-off-by: Oliver Smith-Denny <osde@microsoft.com>
2025-02-07 02:23:11 +00:00
Yang Gang
e356b0f6fd EmulatorPkg PlatformBm: Fix duplicate BootManagerMenuApp boot option issue
Signed-off-by: Yang Gang <yanggang@byosoft.com.cn>
2025-01-24 20:41:08 +00:00
Michael D Kinney
81802056c8 EmulatorPkg: Move magic page to first allocation
The magic page is allocated from a fixed address specified
by PcdPeiServicesTablePage. This allocation has been observed
to sometimes fail. Move the allocation of this buffer to the
very beginning of main() to minimize the change that another
allocation is allocated from the PcdPeiServicesTablePage
address.

Signed-off-by: Michael D Kinney <michael.d.kinney@intel.com>
2025-01-23 04:20:47 +00:00
Oliver Smith-Denny
4613eb6abc EmulatorPkg: Fix IA32 MSVC Linker Warnings
IA32 EmulatorPkg had many linker warnings because with the current
set of linker flags, the MSVC linker was expecting the __stdcall
calling convention on all entry points. This was an effect of
having /SUBSYSTEM:CONSOLE on all binaries built in EmulatorPkg; this
is only needed on WinHost, as that is what Windows launches. The linker
options are adjusted to only set /SUBSYSTEM:CONSOLE on WinHost.

Signed-off-by: Oliver Smith-Denny <osde@microsoft.com>
2025-01-22 19:47:20 +00:00
Nate DeSimone
cbfae3e8a9 EmulatorPkg: Fix Source Level Debug on Windows
The Visual Studio Windows debugger will only load symbols for PE/COFF images
that Windows is aware of. Therefore, to enable source level debugging, all
PEI/DXE modules must be loaded via LoadLibrary() or LoadLibraryEx() and the
the instance in memory created by LoadLibrary() must be the one that is
actually executed.

The current source level debug implementation in EmulatorPkg for Windows is
inherited from the old Nt32Pkg. This implementation makes the assumption that
all PEI/DXE modules have a DLL export tables with a symbol named
InitializeDriver. Therefore, this source level debug implementation requires
all modules to be linked in a non-PI spec defined manner. Support for adding
the InitializeDriver symbol was removed in EmulatorPkg, which broke source
level debugging.

To fix this, the source level debugging implementation has been modified to
use the PE/COFF entry point directly. This brings the implementation into
compliance with the PI spec and should work with any PEIM/DXE driver.
Implementing this requires parsing the in-memory instance of the PE/COFF image
created by Windows to find the entrypoint and since PEIMs/DXE drivers are not
garunteed to have 4KB aligned sections, it also requires explicit configuration
of the page table using VirtualProtect().

With this fix, the debugging experience is now so good it is unprecedented!
In Visual Studio Code, add the following to launch.json:

{
  "version": "0.2.0",
  "configurations": [
    {
      "name": "EmulatorPkg Launch",
      "type": "cppvsdbg",
      "request": "launch",
      "program": "${workspaceFolder}/<path_to_build>/Build/EmulatorX64/DEBUG_<tool_chain>/X64/WinHost",
      "args": [],
      "stopAtEntry": false,
      "cwd": "${workspaceFolder}/<path_to_build>/Build/EmulatorX64/DEBUG_<tool_chain>/X64/",
      "environment": [],
      "console": false,
    }
  ]
}

Make modifications to the above template as nessesary and build EmulatorPkg.
Now, just add breakpoints directly in Visual Studio Code the way you would with
any other software project. When you start the debugger, it will halt at the
breakpoint automatically without any extra configuration required.

Reviewed-by: Michael D Kinney <michael.d.kinney@intel.com>
Cc: Andrew Fish <afish@apple.com>
Cc: Ray Ni <ray.ni@intel.com>
Cc: Chasel Chiu <chasel.chiu@intel.com>
Signed-off-by: Nate DeSimone <nathaniel.l.desimone@intel.com>
2025-01-22 00:27:46 +00:00
Michael D Kinney
3c8f47bf21 EmulatorPkg/Win/Host: Use safe function _vsnprintf_s()
Update SecPrint() to use _vsnprintf_s() instead of
_vsnprintf() that is a safe function and allows the
defines _CRT_SECURE_NO_WARNINGS and _CRT_SECURE_NO_DEPRECATE
to be removed from WinHost builds.

Signed-off-by: Michael D Kinney <michael.d.kinney@intel.com>
2025-01-13 05:36:40 +00:00
Doug Cook (WINDOWS)
d1fccbf494 EmulatorPkg: spurious failure in WriteBlocks on X64
WinNtBlockIoWriteBlocks can spuriously fail on X64. This occurs because
&BytesWritten is a `UINTN*` (i.e. `UINT64*`) but is cast to `LPDWORD`
(i.e. `UINT32*`). Only the low 32 bits are initialized by WriteFile, so
the high 32 bits are uninitialized. This means we will spuriously fail
the `BytesWritten != BufferSize` test.

This doesn't occur on X86-32 since UINTN is the same as DWORD in that
case.

Fix is to declare BytesWritten as DWORD to match the type expected by
WriteFile. This also makes the cast unnecessary.

Signed-off-by: Doug Cook <idigdoug@gmail.com>
2024-12-17 19:01:48 +00:00
Michael Kubacki
4274bcf146 EmulatorPkg: Add minimum Python version for CI badge
The Python version used for build and CI should always be at least
the minimum version supported by edk2-pytool-extensions. A badge
is added that keeps this information dynamically up-to-date based
on the minimum version specified in edk2-pytool-extensions
pyproject.toml file.

Signed-off-by: Michael Kubacki <michael.kubacki@microsoft.com>
2024-12-13 22:05:02 +00:00
Oliver Smith-Denny
1c5c951ec3 Update CI to VS2022
This PR updates the CI pipelines to use VS2022 instead of VS2019
as that is the latest supported VS toolchain on edk2.

Continuous-integration-options: PatchCheck.ignore-multi-package

Signed-off-by: Oliver Smith-Denny <osde@microsoft.com>
2024-12-10 23:42:09 +00:00
Doug Cook (WINDOWS)
9098efdf0d EmulatorPkg: BlockIo2 APIs do not signal event
BlockIo2 Read/Write/Flush APIs should signal the token's event when the
I/O operation completes, but the Emulator APIs do not. As a result, any
code that tries to implement async I/O will hang on emulator.

Both Windows and Unix emulator hosts work the same way:

- All I/O is completed synchronously.
- All I/O implementations contain the comment:
  `// Caller is responsible for signaling EFI Event`

However, the protocol implementations do not signal the event, so the
event is never signalled.

Fix is to signal the event in the appropriate protocol implementations.

- If the host API returns success then the I/O is complete since it's
  always synchronous.
- If there is a Token and Token->Event is not null and the I/O is
  successful then the event should be signalled.

Signed-off-by: Doug Cook <idigdoug@gmail.com>
2024-12-02 02:23:31 +00:00
Yang Gang
3299c36ba1 EmulatorPkg WinThunk: Use Win32 API to get Performance Frequency and Count
Then we can use correct TimerLib in another code,
such as dpDynamicCommand(PerformanceLib).

These API are from profileapi.h header and can refer to the link:
https://learn.microsoft.com/en-us/windows/win32/api/profileapi/

Signed-off-by: Yang Gang <yanggang@byosoft.com.cn>
2024-11-14 02:15:43 +00:00
Oliver Smith-Denny
ef4f3aa3f7 MdePkg: MdeLibs.dsc.inc: Apply StackCheckLibNull to All Module Types
Now that the ResetVectors are USER_DEFINED modules, they will not
be linked against StackCheckLibNull, which were the only modules
causing issues. So, we can now remove the kludge we had before
and the requirement for every DSC to include StackCheckLibNull
for SEC modules and just apply StackCheckLibNull globally.

This also changes every DSC to drop the SEC definition of
StackCheckLibNull.

Continuous-integration-options: PatchCheck.ignore-multi-package

Signed-off-by: Oliver Smith-Denny <osde@linux.microsoft.com>
2024-11-13 21:01:46 +00:00
Ashraf Ali
2d10dc1fb5 EmulatorPkg/Win/Host: Source level debugging on already loaded DLL
Signed-off-by: Ashraf Ali <ashraf.ali.s@intel.com>
2024-10-28 17:22:56 +00:00
Oliver Smith-Denny
77c070b1a7 EmulatorPkg: Add Signature to Graphics Structure
When updating MdePkg's CR macro to enforce signature checking in
all usages, it was discovered that EmulatorPkg was initializing
a structure without setting the signature for it, causing an error
to be returned when CR now checked the signature.

This commit updates the graphics stack in EmulatorPkg to set the
signature of the data structure and check the return value of
the wrapper for the CR macro.

Signed-off-by: Oliver Smith-Denny <osde@linux.microsoft.com>
2024-10-08 00:31:58 +00:00
Oliver Smith-Denny
ae5953dea0 EmulatorPkg: Add StackCheckLibNull
Remove the old stack check lib now that MdeLibs.inc includes
the new one.

Signed-off-by: Oliver Smith-Denny <osde@linux.microsoft.com>
2024-09-13 03:58:46 +00:00
Leif Lindholm
2ddce71142 EmulatorPkg: fix X64 Unix/Host segfault with GCC toolchain profile
Add the necessary toolchain override flags for ms_abi and LTO on X64 for
the unversioned GCC toolchain profile.

This resolves a runtime segmentation fault.

Signed-off-by: Leif Lindholm <quic_llindhol@quicinc.com>
2024-09-05 01:50:41 +00:00
Joey Vagedes
c79487605a EmulatorPkg/EmulatorPkg.ci.yaml: Add PrEval CI config
Adds an entry to the package's CI configuration file that enable policy
5 for stuart_pr_eval. With this Policy, all INFs used by the package are
extracted from the provided DSC file and compared against the list of
changed *.inf (INF) files in the PR. If there is a match, stuart_pr_eval
will specify that this package is affected by the PR and needs to be
tested.

Signed-off-by: Joey Vagedes <joey.vagedes@gmail.com>
2024-09-02 23:20:35 +00:00
Ashraf Ali
b158dad150 EmulatorPkg: VS2022 Support on WinHost.
Currently EDK2 is supporting VS2022, with VS2022 EmulatorPkg build is
failing, this patch is to add the VS2022 support for WinHost

Signed-off-by: Ashraf Ali <ashraf.ali.s@intel.com>
2024-08-13 13:04:46 +08:00
Gerd Hoffmann
843f2d0964 EmulatorPkg: fix build error.
GasketSecSetTime is EMU_SET_TIME and returns EFI_STATUS.  Fix the
declaration accordingly.  Fixes build error with gcc 14.

    /home/kraxel/projects/edk2/EmulatorPkg/Unix/Host/EmuThunk.c:429:3: error: initialization of ‘EFI_STATUS (__attribute__((ms_abi)) *)(EFI_TIME *)’ {aka ‘long long unsigned int (__attribute__((ms_abi)) *)(EFI_TIME *)’} from incompatible pointer type ‘void (__attribute__((ms_abi)) *)(EFI_TIME *)’ [-Wincompatible-pointer-types]
      429 |   GasketSecSetTime,
          |   ^~~~~~~~~~~~~~~~

Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
2024-05-30 04:18:49 +00:00
Doug Flick
024a291b3e EmulatorPkg: Add Hash2DxeCrypto to EmulatorPkg
This patch adds Hash2DxeCrypto to EmulatorPkg. The Hash2DxeCrypto is
used to provide the hashing protocol services.

Cc: Andrew Fish <afish@apple.com>
Cc: Ray Ni <ray.ni@intel.com>

Signed-off-by: Doug Flick [MSFT] <doug.edk2@gmail.com>
Reviewed-by: Ray Ni <ray.ni@Intel.com>
2024-05-24 15:48:52 +00:00
Flickdm
319bb7223a EmulatorPkg: Add RngDxe to EmulatorPkg
This patch adds RngDxe to EmulatorPkg. The RngDxe is used to provide
random number generation services to the UEFI firmware.

Cc: Andrew Fish <afish@apple.com>
Cc: Ray Ni <ray.ni@intel.com>

Signed-off-by: Doug Flick [MSFT] <doug.edk2@gmail.com>
Reviewed-by: Ray Ni <ray.ni@intel.com>
2024-05-24 15:48:52 +00:00
Abner Chang
79d4d8a81c EmulatorPkg/Redfish: Use edk2 Redfish debug PCDs
Signed-off-by: Abner Chang <abner.chang@amd.com>
Cc: Nickle Wang <nicklew@nvidia.com>
Reviewed-by: Nickle Wang <nicklew@nvidia.com>
2024-04-04 14:24:31 +00:00
Qingyu
b387114113 EmulatorPkg: Update the comments of ReadKeyStroke and ReadKeyStrokeEx
Refer to Uefi spec 2.10 section 12.3.3, Add a new retval
EFI_UNSUPPORTED to EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL.ReadKeyStrokeEx
and EFI_SIMPLE_TEXT_INPUT_PROTOCOL.ReadKeyStroke().

Cc: Andrew Fish <afish@apple.com>
Cc: Ray Ni <ray.ni@intel.com>
Cc: Michael D Kinney <michael.d.kinney@intel.com>
Cc: Liming Gao <gaoliming@byosoft.com.cn>
Signed-off-by: Qingyu <qingyu.shang@intel.com>
Reviewed-by: Liming Gao <gaoliming@byosoft.com.cn>
2024-04-03 10:25:06 +08:00
Laszlo Ersek
063a831c66 EmulatorPkg: auto-generate SEC ProcessLibraryConstructorList() decl
Rely on AutoGen for declaring ProcessLibraryConstructorList().

Build-tested with:

  build -a X64 -b DEBUG -m EmulatorPkg/Sec/Sec.inf \
    -p EmulatorPkg/EmulatorPkg.dsc -t GCC5

Cc: Andrew Fish <afish@apple.com>
Cc: Ray Ni <ray.ni@intel.com>
Ref: https://bugzilla.tianocore.org/show_bug.cgi?id=990
Signed-off-by: Laszlo Ersek <lersek@redhat.com>
Message-Id: <20240305113843.68812-8-lersek@redhat.com>
Reviewed-by: Michael D Kinney <michael.d.kinney@intel.com>
Acked-by: Gerd Hoffmann <kraxel@redhat.com>
2024-03-08 09:09:22 +00:00
Nate DeSimone
9cf1d03ebe Add EFI_STATUS return to EMU_THUNK_PROTOCOL.SetTime()
There is an inconsistency between the UNIX and Windows
implementations of EMU_THUNK_PROTOCOL.SetTime(). The Windows
version returns an EFI_STATUS value whereas the the UNIX
implementation is VOID. However, the UNIX implementation is an
unimplemented stub whereas the Windows version is implementated.

The current EMU_THUNK_PROTOCOL function pointer definition
specifies a VOID return type. However, EMU_THUNK_PROTOCOL.SetTime()
is close to the spec defined gRT->SetTime() except for missing the
EFI_STATUS return type.

Therefore, I conclude that the most sensible reconciliation is to
add the EFI_STATUS return type to the protocol definition.

Cc: Andrew Fish <afish@apple.com>
Reviewed-by: Ray Ni <ray.ni@intel.com>
Cc: Michael D Kinney <michael.d.kinney@intel.com>
Cc: Chasel Chiu <chasel.chiu@intel.com>
Signed-off-by: Nate DeSimone <nathaniel.l.desimone@intel.com>
2024-01-05 20:32:08 +00:00
Nate DeSimone
5a2490df0e EmulatorPkg: Update MMTimerThread() signature
In the early 2000s as part of the x64 transition the definition
for LPTIMECALLBACK changed from (UINT, UINT, DWORD, DWORD, DWORD)
to (UINT, UINT, DWORD_PTR, DWORD_PTR, DWORD_PTR). However,
the MMTimerThread() function was never updated to the new
signature. Since the implementation does not use the last three
parameters, this issue has not been caught until now.

Cc: Andrew Fish <afish@apple.com>
Reviewed-by: Ray Ni <ray.ni@intel.com>
Cc: Michael D Kinney <michael.d.kinney@intel.com>
Signed-off-by: Nate DeSimone <nathaniel.l.desimone@intel.com>
2024-01-05 20:32:08 +00:00
Nate DeSimone
3114fd8ed7 EmulatorPkg: Improve comments in WinThunk.c
File description has not been updated since Nt32Pkg was merged
with EmulatorPkg, and several details were no longer technically accurate.

Cc: Andrew Fish <afish@apple.com>
Reviewed-by: Ray Ni <ray.ni@intel.com>
Cc: Michael D Kinney <michael.d.kinney@intel.com>
Cc: Chasel Chiu <chasel.chiu@intel.com>
Signed-off-by: Nate DeSimone <nathaniel.l.desimone@intel.com>
2024-01-05 20:32:08 +00:00
Mike Maslenkin
9e3de4eee0 EmulatorPkg: RedfishPlatformHostInterfaceLib: get rid of unused variable
Cc: Nickle Wang <nicklew@nvidia.com>
Signed-off-by: Mike Maslenkin <mike.maslenkin@gmail.com>
Reviewed-by: Abner Chang <abner.chang@amd.com>
2023-12-27 00:09:49 +00:00
Mike Maslenkin
5e2338d3df EmulatorPkg: fix typo. PcdRedfishServie -> PcdRedfishService
Cc: Nickle Wang <nicklew@nvidia.com>
Signed-off-by: Mike Maslenkin <mike.maslenkin@gmail.com>
Reviewed-by: Abner Chang <abner.chang@amd.com>
2023-12-27 00:09:49 +00:00
Michael Kubacki
972e3b0b9d EmulatorPkg: Format with Uncrustify 73.0.8
Cc: Andrew Fish <afish@apple.com>
Cc: Ray Ni <ray.ni@intel.com>
Signed-off-by: Michael Kubacki <michael.kubacki@microsoft.com>
Reviewed-by: Laszlo Ersek <lersek@redhat.com>
Reviewed-by: Ray Ni <ray.ni@intel.com>
2023-11-27 20:14:59 +00:00
Taylor Beebe
21b831c5b5 EmulatorPkg: Add ImagePropertiesRecordLib Instance
Add an instance of ImagePropertiesRecordLib which will be used by the
DXE Core.

Cc: Andrew Fish <afish@apple.com>
Cc: Ray Ni <ray.ni@intel.com>
Signed-off-by: Taylor Beebe <taylor.d.beebe@gmail.com>
Reviewed-by: Michael D Kinney <michael.d.kinney@intel.com>
2023-11-27 18:55:18 +00:00
Nate DeSimone
ad1c0394b1 EmulatorPkg: Fix Terminal Issues
After running EmulatorPkg, one will notice that their terminal acts
strangely. This is caused by the EmulatorPkg Host changing the terminal
mode and not restoring the original mode, which is now fixed.

Reviewed-by: Michael D Kinney <michael.d.kinney@intel.com>
Cc: Andrew Fish <afish@apple.com>
Cc: Ray Ni <ray.ni@intel.com>
Cc: Chasel Chiu <chasel.chiu@intel.com>
Signed-off-by: Nate DeSimone <nathaniel.l.desimone@intel.com>
2023-09-27 01:00:47 +00:00
Pierre Gondois
2f981bddcb MdeModulePkg: Duplicate BaseRngLibTimerLib to MdeModulePkg
BZ: https://bugzilla.tianocore.org/show_bug.cgi?id=4504

The BaseRngLibTimerLib allows to generate number based on a timer.
This mechanism allows to have a basic non-secure implementation
for non-production platforms.
To bind and identify Random Number Generators implementations with
a GUID, an unsafe GUID should be added. This GUID cannot be added
to the MdePkg unless it is also added to a specification.

To keep the MdePkg self-contained, copy the BaseRngLibTimerLib to
the MdeModulePkg. This will allow to define an unsafe Rng GUID
in a later patch in the MdeModulePkg.

The MdePkg implementation will be removed later. This allows to give
some time to platform owners to switch to the MdeModulePkg
implementation.

Signed-off-by: Pierre Gondois <pierre.gondois@arm.com>
Reviewed-by: Sami Mujawar <sami.mujawar@arm.com>
Acked-by: Ard Biesheuvel <ardb@kernel.org>
Tested-by: Kun Qin <kun.qin@microsoft.com>
2023-09-08 09:48:55 +00:00