Jordan Justen [mailto:jordan.l.jus...@intel.com] wrote:

]On 2014-11-10 15:05:07, Scott Duplichan wrote:
]> OvmfPkg: fix VS2010 build failures
]> 
]> Contributed-under: TianoCore Contribution Agreement 1.0
]> Signed-off-by: Scott Duplichan <sc...@notabs.org>
]> ---
]> 
]> Here is one way to get OvmfPkg building with Visual Studio again.
]> Several of the changes are needed to make OvmfPkg work with the
]> proposed NOOPT build, in combination with IA32 target. The
]> combination of 32-bit, Microsoft compiler, and optimization
]> disabled causes generation of helper function calls for multiply,
]> divide, shift, etc when operating on 64-bit integers. Rather than
]> make significant code changes to add explicit function calls, this
]> patch type casts some UINT64 integers to UINTN. That way, the 64-bit
]> build is unaffected. An argument that this safe is based on the
]> fact that the 64-bit values are addresses in most cases, and
]> 32-bit code cannot ordinarily access memory above 4GB. In one
]> case the 64-bit is the size of flash memory. If a 64MB flash
]> memory is used, it would have to be located above 4GB where 32-bit
]> code cannot access it.
]> 
]> Other changes are due to Microsoft's warning about integer truncation.
]> EDK2 enables this warning for Microsoft tool chains, but not for
]> gcc tool chains. At least one integer truncation warning is not
]> handled well by the Microsoft compiler, even with version 2010.
]> Variable SegmentC holds the value 0xC0000, yet the compiler warns
]> it is left shifted by 12 bits. On the other hand, I don't understand
]> why the value is left shifted by 12. In any case, the final address
]> fits in 32 bits.
]> 
]> For both Microsoft and gcc compilers, the #include "inttypes.h" fails
]> for me. The change to XenPvBlkDxe.inf is how I got it to work.
]
]Can you separate out the 'inttypes.h' Xen fix?

OK, a revised patch with no inttypes.h fix is attached.

]I have a fix for this that doesn't involve StdLib. In fact, we don't
]want the StdLib dependency added.
]
]Do you want to work on a different fix (without StdLib), or should I
]send out the one I have?

Send your patch please.

]Thanks for looking at these build issues,
]
]-Jordan
]
]> --- 
]> 
> Index: OvmfPkg/QemuFlashFvbServicesRuntimeDxe/FwBlockService.c
> ===================================================================
> --- OvmfPkg/QemuFlashFvbServicesRuntimeDxe/FwBlockService.c     (revision 
> 16323)
> +++ OvmfPkg/QemuFlashFvbServicesRuntimeDxe/FwBlockService.c     (working copy)
> @@ -919,7 +919,7 @@
>    Status = gBS->AllocatePages (
>                    AllocateAddress,
>                    EfiRuntimeServicesData,
> -                  (UINTN) EFI_SIZE_TO_PAGES (Length),
> +                  (UINTN) EFI_SIZE_TO_PAGES ((UINTN)Length),
>                    &BaseAddress
>                    );
>    ASSERT_EFI_ERROR (Status);
> @@ -979,7 +979,7 @@
>      // Erase all the blocks
>      //
>      for (Offset = Start; Offset < Start + Length; Offset += BlockSize) {
> -      Status = QemuFlashEraseBlock ((EFI_LBA) Offset / BlockSize);
> +      Status = QemuFlashEraseBlock ((EFI_LBA) (Offset / BlockSize));
>        ASSERT_EFI_ERROR (Status);
>      }
>  
> @@ -988,7 +988,7 @@
>      //
>      WriteLength = GoodFwVolHeader->HeaderLength;
>      Status = QemuFlashWrite (
> -               (EFI_LBA) Start / BlockSize,
> +               (EFI_LBA) (Start / BlockSize),
>                 0,
>                 &WriteLength,
>                 (UINT8 *) GoodFwVolHeader);
> Index: OvmfPkg/QemuFlashFvbServicesRuntimeDxe/QemuFlash.c
> ===================================================================
> --- OvmfPkg/QemuFlashFvbServicesRuntimeDxe/QemuFlash.c  (revision 16323)
> +++ OvmfPkg/QemuFlashFvbServicesRuntimeDxe/QemuFlash.c  (working copy)
> @@ -54,7 +54,7 @@
>    IN        UINTN                               Offset
>    )
>  {
> -  return mFlashBase + (Lba * mFdBlockSize) + Offset;
> +  return mFlashBase + ((UINTN)Lba * mFdBlockSize) + Offset;
>  }
>  
>  
> Index: OvmfPkg/QemuVideoDxe/VbeShim.c
> ===================================================================
> --- OvmfPkg/QemuVideoDxe/VbeShim.c      (revision 16323)
> +++ OvmfPkg/QemuVideoDxe/VbeShim.c      (working copy)
> @@ -153,13 +153,13 @@
>    CopyMem (VbeInfo->Signature, "VESA", 4);
>    VbeInfo->VesaVersion = 0x0300;
>  
> -  VbeInfo->OemNameAddress = (UINT32)(SegmentC << 12 | (UINT16)(UINTN)Ptr);
> +  VbeInfo->OemNameAddress = ((UINT32)SegmentC << 12 | (UINT16)(UINTN)Ptr);
>    CopyMem (Ptr, "QEMU", 5);
>    Ptr += 5;
>  
>    VbeInfo->Capabilities = BIT0; // DAC can be switched into 8-bit mode
>  
> -  VbeInfo->ModeListAddress = (UINT32)(SegmentC << 12 | (UINT16)(UINTN)Ptr);
> +  VbeInfo->ModeListAddress = ((UINT32)SegmentC << 12 | (UINT16)(UINTN)Ptr);
>    *(UINT16*)Ptr = 0x00f1; // mode number
>    Ptr += 2;
>    *(UINT16*)Ptr = 0xFFFF; // mode list terminator
> @@ -168,17 +168,17 @@
>    VbeInfo->VideoMem64K = (UINT16)((1024 * 768 * 4 + 65535) / 65536);
>    VbeInfo->OemSoftwareVersion = 0x0000;
>  
> -  VbeInfo->VendorNameAddress = (UINT32)(SegmentC << 12 | (UINT16)(UINTN)Ptr);
> +  VbeInfo->VendorNameAddress = ((UINT32)SegmentC << 12 | (UINT16)(UINTN)Ptr);
>    CopyMem (Ptr, "OVMF", 5);
>    Ptr += 5;
>  
> -  VbeInfo->ProductNameAddress = (UINT32)(SegmentC << 12 | 
> (UINT16)(UINTN)Ptr);
> +  VbeInfo->ProductNameAddress = ((UINT32)SegmentC << 12 | 
> (UINT16)(UINTN)Ptr);
>    Printed = AsciiSPrint ((CHAR8 *)Ptr,
>                sizeof VbeInfoFull->Buffer - (Ptr - VbeInfoFull->Buffer), "%s",
>                CardName);
>    Ptr += Printed + 1;
>  
> -  VbeInfo->ProductRevAddress = (UINT32)(SegmentC << 12 | (UINT16)(UINTN)Ptr);
> +  VbeInfo->ProductRevAddress = ((UINT32)SegmentC << 12 | (UINT16)(UINTN)Ptr);
>    CopyMem (Ptr, mProductRevision, sizeof mProductRevision);
>    Ptr += sizeof mProductRevision;
>  
> @@ -268,7 +268,7 @@
>    //
>    // Second, point the Int10h vector at the shim.
>    //
> -  Int0x10->Segment = (UINT16) (SegmentC >> 4);
> +  Int0x10->Segment = (UINT16) ((UINT32)SegmentC >> 4);
>    Int0x10->Offset  = (UINT16) ((UINTN) (VbeModeInfo + 1) - SegmentC);
>  
>    DEBUG ((EFI_D_INFO, "%a: VBE shim installed\n", __FUNCTION__));
> Index: OvmfPkg/VirtioScsiDxe/VirtioScsi.c
> ===================================================================
> --- OvmfPkg/VirtioScsiDxe/VirtioScsi.c  (revision 16323)
> +++ OvmfPkg/VirtioScsiDxe/VirtioScsi.c  (working copy)
> @@ -253,7 +253,7 @@
>    //
>    Request->Lun[0] = 1;
>    Request->Lun[1] = (UINT8) Target;
> -  Request->Lun[2] = (UINT8) ((Lun >> 8) | 0x40);
> +  Request->Lun[2] = (UINT8) (((UINT32)Lun >> 8) | 0x40);
>    Request->Lun[3] = (UINT8) Lun;
>  
>    //
> Index: OvmfPkg/XenBusDxe/EventChannel.c
> ===================================================================
> --- OvmfPkg/XenBusDxe/EventChannel.c    (revision 16323)
> +++ OvmfPkg/XenBusDxe/EventChannel.c    (working copy)
> @@ -29,7 +29,7 @@
>  
>    Send.port = Port;
>    ReturnCode = XenHypercallEventChannelOp (Dev, EVTCHNOP_send, &Send);
> -  return ReturnCode;
> +  return (UINT32)ReturnCode;
>  }
>  
>  UINT32
> @@ -48,7 +48,7 @@
>  
>    Parameter.dom = DOMID_SELF;
>    Parameter.remote_dom = DomainId;
> -  ReturnCode = XenHypercallEventChannelOp (Private->Dev,
> +  ReturnCode = (UINT32)XenHypercallEventChannelOp (Private->Dev,
>                                     EVTCHNOP_alloc_unbound,
>                                     &Parameter);
>    if (ReturnCode != 0) {
> @@ -84,5 +84,5 @@
>  
>    Private = XENBUS_PRIVATE_DATA_FROM_THIS (This);
>    Close.port = Port;
> -  return XenHypercallEventChannelOp (Private->Dev, EVTCHNOP_close, &Close);
> +  return (UINT32)XenHypercallEventChannelOp (Private->Dev, EVTCHNOP_close, 
> &Close);
>  }
> Index: OvmfPkg/XenBusDxe/GrantTable.c
> ===================================================================
> --- OvmfPkg/XenBusDxe/GrantTable.c      (revision 16323)
> +++ OvmfPkg/XenBusDxe/GrantTable.c      (working copy)
> @@ -85,7 +85,7 @@
>    GrantInUseList[Ref] = TRUE;
>  #endif
>    EfiReleaseLock (&mGrantListLock);
> -  return Ref;
> +  return (grant_ref_t)Ref;
>  }
>  
>  STATIC
> @@ -101,7 +101,7 @@
>  
>    ASSERT (GrantTable != NULL);
>    Ref = XenGrantTableGetFreeEntry ();
> -  GrantTable[Ref].frame = Frame;
> +  GrantTable[Ref].frame = (UINT32)Frame;
>    GrantTable[Ref].domid = DomainId;
>    MemoryFence ();
>    Flags = GTF_permit_access;
> @@ -108,7 +108,7 @@
>    if (ReadOnly) {
>      Flags |= GTF_readonly;
>    }
> -  GrantTable[Ref].flags = Flags;
> +  GrantTable[Ref].flags = (UINT16)Flags;
>  
>    return Ref;
>  }
> @@ -152,7 +152,7 @@
>  #endif
>    EfiInitializeLock (&mGrantListLock, TPL_NOTIFY);
>    for (Index = NR_RESERVED_ENTRIES; Index < NR_GRANT_ENTRIES; Index++) {
> -    XenGrantTablePutFreeEntry (Index);
> +    XenGrantTablePutFreeEntry ((grant_ref_t)Index);
>    }
>  
>    GrantTable = (VOID*)(UINTN) MmioAddr;
> Index: OvmfPkg/XenBusDxe/XenBus.c
> ===================================================================
> --- OvmfPkg/XenBusDxe/XenBus.c  (revision 16323)
> +++ OvmfPkg/XenBusDxe/XenBus.c  (working copy)
> @@ -182,7 +182,7 @@
>      Private->XenBusIo.Type = AsciiStrDup (Type);
>      Private->XenBusIo.Node = AsciiStrDup (DevicePath);
>      Private->XenBusIo.Backend = BackendPath;
> -    Private->XenBusIo.DeviceId = AsciiStrDecimalToUintn (Id);
> +    Private->XenBusIo.DeviceId = (UINT16)AsciiStrDecimalToUintn (Id);
>      Private->Dev = Dev;
>  
>      TempXenBusPath = AllocateCopyPool (sizeof (XENBUS_DEVICE_PATH),
> @@ -274,7 +274,7 @@
>      XenBusAddDevice (Dev, Type, Directory[Index]);
>    }
>  
> -  FreePool (Directory);
> +  FreePool ((VOID*)Directory);
>  }
>  
>  
> @@ -310,7 +310,7 @@
>      XenBusEnumerateDeviceType (Dev, Types[Index]);
>    }
>  
> -  FreePool (Types);
> +  FreePool ((VOID*)Types);
>  
>    return XENSTORE_STATUS_SUCCESS;
>  }
> Index: OvmfPkg/XenBusDxe/XenHypercall.c
> ===================================================================
> --- OvmfPkg/XenBusDxe/XenHypercall.c    (revision 16323)
> +++ OvmfPkg/XenBusDxe/XenHypercall.c    (working copy)
> @@ -52,8 +52,8 @@
>    ASSERT (Dev->Hyperpage != NULL);
>  
>    Parameter.domid = DOMID_SELF;
> -  Parameter.index = Index;
> -  Error = XenHypercall2 (Dev->Hyperpage + __HYPERVISOR_hvm_op * 32,
> +  Parameter.index = (UINT32)Index;
> +  Error = XenHypercall2 ((UINT8*)Dev->Hyperpage + __HYPERVISOR_hvm_op * 32,
>                           HVMOP_get_param, (INTN) &Parameter);
>    if (Error != 0) {
>      DEBUG ((EFI_D_ERROR,
> @@ -72,7 +72,7 @@
>    )
>  {
>    ASSERT (Dev->Hyperpage != NULL);
> -  return XenHypercall2 (Dev->Hyperpage + __HYPERVISOR_memory_op * 32,
> +  return XenHypercall2 ((UINT8*)Dev->Hyperpage + __HYPERVISOR_memory_op * 32,
>                          Operation, (INTN) Arguments);
>  }
>  
> @@ -84,7 +84,7 @@
>    )
>  {
>    ASSERT (Dev->Hyperpage != NULL);
> -  return XenHypercall2 (Dev->Hyperpage + __HYPERVISOR_event_channel_op * 32,
> +  return XenHypercall2 ((UINT8*)Dev->Hyperpage + 
> __HYPERVISOR_event_channel_op * 32,
>                          Operation, (INTN) Arguments);
>  }
>  
> Index: OvmfPkg/XenBusDxe/XenStore.c
> ===================================================================
> --- OvmfPkg/XenBusDxe/XenStore.c        (revision 16323)
> +++ OvmfPkg/XenBusDxe/XenStore.c        (working copy)
> @@ -248,7 +248,7 @@
>  
>    /* Transfer to one big alloc for easy freeing by the caller. */
>    Dst = AllocatePool (*NumPtr * sizeof (CHAR8 *) + Len);
> -  CopyMem (&Dst[*NumPtr], Strings, Len);
> +  CopyMem ((VOID*)&Dst[*NumPtr], Strings, Len);
>    FreePool (Strings);
>  
>    /* Extract pointers to newly allocated array. */
> @@ -493,7 +493,7 @@
>  
>      Dest = XenStoreGetOutputChunk (Cons, Prod, xs.XenStore->req, &Available);
>      if (Available > Len) {
> -      Available = Len;
> +      Available = (UINT32)Len;
>      }
>  
>      CopyMem (Dest, Data, Available);
> @@ -572,7 +572,7 @@
>  
>      Src = XenStoreGetInputChunk (Cons, Prod, xs.XenStore->rsp, &Available);
>      if (Available > Len) {
> -      Available = Len;
> +      Available = (UINT32)Len;
>      }
>  
>      /*
> @@ -660,7 +660,7 @@
>      } else {
>        DEBUG ((EFI_D_WARN, "XenStore: Watch handle %a not found\n",
>                Message->u.Watch.Vector[XS_WATCH_TOKEN]));
> -      FreePool(Message->u.Watch.Vector);
> +      FreePool((VOID*)Message->u.Watch.Vector);
>        FreePool(Message);
>      }
>      EfiReleaseLock (&xs.RegisteredWatchesLock);
> @@ -812,7 +812,7 @@
>    Message.type = RequestType;
>    Message.len = 0;
>    for (Index = 0; Index < NumRequests; Index++) {
> -    Message.len += WriteRequest[Index].Len;
> +    Message.len += (UINT32)WriteRequest[Index].Len;
>    }
>  
>    Status = XenStoreWriteStore (&Message, sizeof (Message));
> @@ -829,7 +829,7 @@
>      }
>    }
>  
> -  Status = XenStoreReadReply (&Message.type, LenPtr, &Return);
> +  Status = XenStoreReadReply ((enum xsd_sockmsg_type *)&Message.type, 
> LenPtr, &Return);
>  
>  Error:
>    if (Status != XENSTORE_STATUS_SUCCESS) {
> @@ -843,7 +843,7 @@
>    }
>  
>    /* Reply is either error or an echo of our request message type. */
> -  ASSERT (Message.type == RequestType);
> +  ASSERT ((enum xsd_sockmsg_type)Message.type == RequestType);
>  
>    if (ResultPtr) {
>      *ResultPtr = Return;
> @@ -975,7 +975,7 @@
>        if (Message->u.Watch.Handle == Token) {
>          RemoveEntryList (Entry);
>          EfiReleaseLock (&xs.WatchEventsLock);
> -        FreePool(Message->u.Watch.Vector);
> +        FreePool((VOID*)Message->u.Watch.Vector);
>          FreePool(Message);
>          return XENSTORE_STATUS_SUCCESS;
>        }
> @@ -1057,8 +1057,8 @@
>  
>    xs.Dev = Dev;
>  
> -  xs.EventChannel = XenHypercallHvmGetParam (Dev, HVM_PARAM_STORE_EVTCHN);
> -  XenStoreGpfn = XenHypercallHvmGetParam (Dev, HVM_PARAM_STORE_PFN);
> +  xs.EventChannel = (evtchn_port_t)XenHypercallHvmGetParam (Dev, 
> HVM_PARAM_STORE_EVTCHN);
> +  XenStoreGpfn = (UINTN)XenHypercallHvmGetParam (Dev, HVM_PARAM_STORE_PFN);
>    xs.XenStore = (VOID *) (XenStoreGpfn << EFI_PAGE_SHIFT);
>    DEBUG ((EFI_D_INFO, "XenBusInit: XenBus rings @%p, event channel %x\n",
>            xs.XenStore, xs.EventChannel));
> @@ -1115,7 +1115,7 @@
>        XENSTORE_MESSAGE *Message = XENSTORE_MESSAGE_FROM_LINK (Entry);
>        Entry = GetNextNode (&xs.WatchEvents, Entry);
>        RemoveEntryList (&Message->Link);
> -      FreePool (Message->u.Watch.Vector);
> +      FreePool ((VOID*)Message->u.Watch.Vector);
>        FreePool (Message);
>      }
>    }
> @@ -1202,7 +1202,7 @@
>    if (Status != XENSTORE_STATUS_SUCCESS) {
>      return FALSE;
>    }
> -  FreePool (TempStr);
> +  FreePool ((VOID*)TempStr);
>    return TRUE;
>  }
>  
> @@ -1283,7 +1283,7 @@
>    Status = XenStoreSingle (XST_NIL, XS_TRANSACTION_START, "", NULL,
>                             (VOID **) &IdStr);
>    if (Status == XENSTORE_STATUS_SUCCESS) {
> -    Transaction->Id = AsciiStrDecimalToUintn (IdStr);
> +    Transaction->Id = (UINT32)AsciiStrDecimalToUintn (IdStr);
>      FreePool (IdStr);
>    }
>  
> @@ -1419,7 +1419,7 @@
>      Entry = GetNextNode (&xs.WatchEvents, Entry);
>      if (Message->u.Watch.Handle == Watch) {
>        RemoveEntryList (&Message->Link);
> -      FreePool (Message->u.Watch.Vector);
> +      FreePool ((VOID*)Message->u.Watch.Vector);
>        FreePool (Message);
>      }
>    }
> Index: OvmfPkg/XenPvBlkDxe/BlockFront.c
> ===================================================================
> --- OvmfPkg/XenPvBlkDxe/BlockFront.c    (revision 16323)
> +++ OvmfPkg/XenPvBlkDxe/BlockFront.c    (working copy)
> @@ -196,7 +196,7 @@
>              Status));
>      goto Error;
>    }
> -  Dev->DomainId = Value;
> +  Dev->DomainId = (domid_t)Value;
>    XenBusIo->EventChannelAllocate (XenBusIo, Dev->DomainId, 
> &Dev->EventChannel);
>  
>    SharedRing = (blkif_sring_t*) AllocatePages (1);
> @@ -262,7 +262,7 @@
>    if (Status != XENSTORE_STATUS_SUCCESS || Value > UINT32_MAX) {
>      goto Error2;
>    }
> -  Dev->MediaInfo.VDiskInfo = Value;
> +  Dev->MediaInfo.VDiskInfo = (UINT32)Value;
>    if (Dev->MediaInfo.VDiskInfo & VDISK_READONLY) {
>      Dev->MediaInfo.ReadWrite = FALSE;
>    } else {
> @@ -278,7 +278,7 @@
>    if (Status != XENSTORE_STATUS_SUCCESS || Value > UINT32_MAX) {
>      goto Error2;
>    }
> -  if (Value % 512 != 0) {
> +  if ((UINT32)Value % 512 != 0) {
>      //
>      // This is not supported by the driver.
>      //
> @@ -286,7 +286,7 @@
>              "it must be a multiple of 512\n", Value));
>      goto Error2;
>    }
> -  Dev->MediaInfo.SectorSize = Value;
> +  Dev->MediaInfo.SectorSize = (UINT32)Value;
>  
>    // Default value
>    Value = 0;
> @@ -443,7 +443,7 @@
>  
>    Start = (UINTN) IoData->Buffer & ~EFI_PAGE_MASK;
>    End = ((UINTN) IoData->Buffer + IoData->Size + EFI_PAGE_SIZE - 1) & 
> ~EFI_PAGE_MASK;
> -  IoData->NumRef = NumSegments = (End - Start) / EFI_PAGE_SIZE;
> +  IoData->NumRef = NumSegments = (INT32)((End - Start) / EFI_PAGE_SIZE);
>  
>    ASSERT (NumSegments <= BLKIF_MAX_SEGMENTS_PER_REQUEST);
>  
> @@ -452,7 +452,7 @@
>    Request = RING_GET_REQUEST (&Dev->Ring, RingIndex);
>  
>    Request->operation = IsWrite ? BLKIF_OP_WRITE : BLKIF_OP_READ;
> -  Request->nr_segments = NumSegments;
> +  Request->nr_segments = (UINT8)NumSegments;
>    Request->handle = Dev->DeviceId;
>    Request->id = (UINTN) IoData;
>    Request->sector_number = IoData->Sector;
> @@ -461,9 +461,9 @@
>      Request->seg[Index].first_sect = 0;
>      Request->seg[Index].last_sect = EFI_PAGE_SIZE / 512 - 1;
>    }
> -  Request->seg[0].first_sect = ((UINTN) IoData->Buffer & EFI_PAGE_MASK) / 
> 512;
> -  Request->seg[NumSegments - 1].last_sect =
> -      (((UINTN) IoData->Buffer + IoData->Size - 1) & EFI_PAGE_MASK) / 512;
> +  Request->seg[0].first_sect = (UINT8)(((UINTN) IoData->Buffer & 
> EFI_PAGE_MASK) / 512);
> +  Request->seg[NumSegments - 1].last_sect = (UINT8)
> +      ((((UINTN) IoData->Buffer + IoData->Size - 1) & EFI_PAGE_MASK) / 512);
>    for (Index = 0; Index < NumSegments; Index++) {
>      UINTN Data = Start + Index * EFI_PAGE_SIZE;
>      XenBusIo->GrantAccess (XenBusIo, Dev->DomainId,
> Index: OvmfPkg/XenPvBlkDxe/BlockIo.c
> ===================================================================
> --- OvmfPkg/XenPvBlkDxe/BlockIo.c       (revision 16323)
> +++ OvmfPkg/XenPvBlkDxe/BlockIo.c       (working copy)
> @@ -136,7 +136,7 @@
>    }
>  
>    IoData.Dev = XEN_BLOCK_FRONT_FROM_BLOCK_IO (This);
> -  Sector = Lba * (Media->BlockSize / 512);
> +  Sector = (UINTN)MultU64x32 (Lba, Media->BlockSize / 512);
>  
>    while (BufferSize > 0) {
>      if (((UINTN)Buffer & EFI_PAGE_MASK) == 0) {
> Index: OvmfPkg/XenPvBlkDxe/XenPvBlkDxe.inf
> ===================================================================
> --- OvmfPkg/XenPvBlkDxe/XenPvBlkDxe.inf (revision 16323)
> +++ OvmfPkg/XenPvBlkDxe/XenPvBlkDxe.inf (working copy)
> @@ -27,6 +27,7 @@
>  [Packages]
>    MdePkg/MdePkg.dec
>    OvmfPkg/OvmfPkg.dec
> +  StdLib/StdLib.dec
>  
>  [Sources]
>    XenPvBlkDxe.h
> 
> 
> ---

Attachment: ovmf-ia32-msft-002.patch
Description: Binary data

------------------------------------------------------------------------------
Comprehensive Server Monitoring with Site24x7.
Monitor 10 servers for $9/Month.
Get alerted through email, SMS, voice calls or mobile push notifications.
Take corrective actions from your mobile device.
http://pubads.g.doubleclick.net/gampad/clk?id=154624111&iu=/4140/ostg.clktrk
_______________________________________________
edk2-devel mailing list
edk2-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/edk2-devel

Reply via email to