From 2f03f796a40769d7390d0a9e5da70424e795afdc Mon Sep 17 00:00:00 2001 From: jljusten Date: Sun, 14 Oct 2012 21:17:20 +0000 Subject: [PATCH] OvmfPkg: VirtioBlkDxe: fix div & mod of 64-bit dividends on IA32/gcc-4.4 OvmfPkg/VirtioBlkDxe/VirtioBlk.c:667: undefined reference to `__umoddi3' OvmfPkg/VirtioBlkDxe/VirtioBlk.c:750: undefined reference to `__udivdi3' These operations would come from libgcc in the IA32 build, but OVMF does not link against libgcc. Regression-tested the X64 build with Fedora 18 Alpha XFCE and Windows 8 Consumer Preview guests. Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Laszlo Ersek Reviewed-by: Jordan Justen git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@13846 6f19259b-4bc3-4df7-8a09-765794883524 --- OvmfPkg/VirtioBlkDxe/VirtioBlk.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/OvmfPkg/VirtioBlkDxe/VirtioBlk.c b/OvmfPkg/VirtioBlkDxe/VirtioBlk.c index 86041f0caf..1ac36cd17b 100644 --- a/OvmfPkg/VirtioBlkDxe/VirtioBlk.c +++ b/OvmfPkg/VirtioBlkDxe/VirtioBlk.c @@ -664,7 +664,7 @@ VirtioBlkInit ( goto Failed; } if (BlockSize == 0 || BlockSize % 512 != 0 || - NumSectors % (BlockSize / 512) != 0) { + ModU64x32 (NumSectors, BlockSize / 512) != 0) { // // We can only handle a logical block consisting of whole sectors, // and only a disk composed of whole logical blocks. @@ -747,7 +747,8 @@ VirtioBlkInit ( Dev->BlockIoMedia.WriteCaching = !!(Features & VIRTIO_BLK_F_FLUSH); Dev->BlockIoMedia.BlockSize = BlockSize; Dev->BlockIoMedia.IoAlign = 0; - Dev->BlockIoMedia.LastBlock = NumSectors / (BlockSize / 512) - 1; + Dev->BlockIoMedia.LastBlock = DivU64x32 (NumSectors, + BlockSize / 512) - 1; return EFI_SUCCESS; ReleaseQueue: