audk/EmulatorPkg
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
..
Application/RedfishPlatformConfig
AutoScanPei
BootModePei
CpuRuntimeDxe
EmuBlockIoDxe EmulatorPkg: BlockIo2 APIs do not signal event 2024-12-02 02:23:31 +00:00
EmuBusDriverDxe
EmuGopDxe EmulatorPkg: Update the comments of ReadKeyStroke and ReadKeyStrokeEx 2024-04-03 10:25:06 +08:00
EmuSimpleFileSystemDxe
EmuSnpDxe
EmuThunkDxe
FirmwareVolumePei
FlashMapPei
FvbServicesRuntimeDxe EmulatorPkg: Format with Uncrustify 73.0.8 2023-11-27 20:14:59 +00:00
Include Add EFI_STATUS return to EMU_THUNK_PROTOCOL.SetTime() 2024-01-05 20:32:08 +00:00
Library EmulatorPkg: RedfishPlatformHostInterfaceLib: get rid of unused variable 2023-12-27 00:09:49 +00:00
PlatformCI EmulatorPkg: Add minimum Python version for CI badge 2024-12-13 22:05:02 +00:00
PlatformSmbiosDxe
RealTimeClockRuntimeDxe
ResetRuntimeDxe
Sec EmulatorPkg: auto-generate SEC ProcessLibraryConstructorList() decl 2024-03-08 09:09:22 +00:00
ThunkPpiToProtocolPei
TimerDxe
Unix EmulatorPkg: fix X64 Unix/Host segfault with GCC toolchain profile 2024-09-05 01:50:41 +00:00
Win EmulatorPkg: spurious failure in WriteBlocks on X64 2024-12-17 19:01:48 +00:00
EmulatorPkg.ci.yaml EmulatorPkg/EmulatorPkg.ci.yaml: Add PrEval CI config 2024-09-02 23:20:35 +00:00
EmulatorPkg.dec EmulatorPkg: fix typo. PcdRedfishServie -> PcdRedfishService 2023-12-27 00:09:49 +00:00
EmulatorPkg.dsc MdePkg: MdeLibs.dsc.inc: Apply StackCheckLibNull to All Module Types 2024-11-13 21:01:46 +00:00
EmulatorPkg.fdf EmulatorPkg: Add Hash2DxeCrypto to EmulatorPkg 2024-05-24 15:48:52 +00:00
Readme.md Update CI to VS2022 2024-12-10 23:42:09 +00:00
build.sh

Readme.md

Overview

EmulatorPkg provides an environment where a UEFI environment can be emulated under an environment where a full UEFI compatible environment is not possible. (For example, running under an OS where an OS process hosts the UEFI emulation environment.)

https://github.com/tianocore/tianocore.github.io/wiki/EmulatorPkg

Status

  • Builds and runs under
    • a posix-like environment with X windows
      • Linux
      • OS X
    • Windows environment
      • Win10 (verified)
      • Win8 (not verified)

How to Build & Run

You can use the following command to build.

  • 32bit emulator in Windows:

    build -p EmulatorPkg\EmulatorPkg.dsc -t VS2022 -a IA32

  • 64bit emulator in Windows:

    build -p EmulatorPkg\EmulatorPkg.dsc -t VS2022 -a X64

  • 32bit emulator in Linux:

    build -p EmulatorPkg\EmulatorPkg.dsc -t GCC5 -a IA32

  • 64bit emulator in Linux:

    build -p EmulatorPkg\EmulatorPkg.dsc -t GCC5 -a X64

You can start/run the emulator using the following command:

  • 32bit emulator in Windows:

    cd Build\EmulatorIA32\DEBUG_VS2022\IA32\ && WinHost.exe

  • 64bit emulator in Windows:

    cd Build\EmulatorX64\DEBUG_VS2022\X64\ && WinHost.exe

  • 32bit emulator in Linux:

    cd Build/EmulatorIA32/DEBUG_GCC5/IA32/ && ./Host

  • 64bit emulator in Linux:

    cd Build/EmulatorX64/DEBUG_GCC5/X64/ && ./Host

On posix-like environment with the bash shell you can use EmulatorPkg/build.sh to simplify building and running emulator.

For example, to build + run:

$ EmulatorPkg/build.sh $ EmulatorPkg/build.sh run

The build architecture will match your host machine's architecture.

On X64 host machines, you can build + run IA32 mode as well:

$ EmulatorPkg/build.sh -a IA32 $ EmulatorPkg/build.sh -a IA32 run