@@ -979,7 +979,7 @@ InitializeVariableFvHeader (
// Erase all the blocks
//
for (Offset = Start; Offset < Start + Length; Offset += BlockSize) {
- Status = QemuFlashEraseBlock ((EFI_LBA) Offset / BlockSize);
+ Status = QemuFlashEraseBlock (Offset / BlockSize);
ASSERT_EFI_ERROR (Status);
}
@@ -988,7 +988,7 @@ InitializeVariableFvHeader (
//
WriteLength = GoodFwVolHeader->HeaderLength;
Status = QemuFlashWrite (
- (EFI_LBA) Start / BlockSize,
+ Start / BlockSize,
0,
&WriteLength,
(UINT8 *) GoodFwVolHeader);
In the InitializeVariableFvHeader() function, all three of "Offset", "Start" and "BlockSize" have type UINTN. Therefore the (Offset / BlockSize) and (Start / BlockSize) divisions can be compiled on all platforms without intrinsics. In the current expressions (EFI_LBA) Offset / BlockSize (EFI_LBA) Start / BlockSize "Offset" and "Start" are cast to UINT64 (== EFI_LBA), which leads to 64-by-32 bit divisions on Ia32, breaking the VS2010 / NOOPT / Ia32 build. The simplest way to fix them is to realize we don't need casts at all. (The prototypes of QemuFlashEraseBlock() and QemuFlashWrite() are visible via "QemuFlash.h", and they will easily take our UINTN quotients as UINT64.) Suggested-by: Scott Duplichan <scott@notabs.org> Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Laszlo Ersek <lersek@redhat.com> --- Notes: v2: - covered another division, reported by Scott OvmfPkg/QemuFlashFvbServicesRuntimeDxe/FwBlockService.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)