On Sun, Nov 09, 2014 at 05:00:38PM -0800, Jordan Justen wrote: > On 2014-11-08 14:01:56, Gabriel L. Somlo wrote: > > @@ -228,6 +229,11 @@ MiscInitialization ( > > VOID > > ) > > { > > + UINT16 HostBridgeDevId; > > + UINTN PmCmd; > > + UINTN Pmba; > > + UINTN PmRegMisc; > > + > > // > > // Disable A20 Mask > > // > > @@ -239,33 +245,47 @@ MiscInitialization ( > > BuildCpuHob (36, 16); > > > > // > > + // Query Host Bridge DID to determine platform type > > + // > > + HostBridgeDevId = PciRead16 (OVMF_HOSTBRIDGE_DID); > > + switch (HostBridgeDevId) { > > + case INTEL_82441_DEVICE_ID: > > + PmCmd = POWER_MGMT_REGISTER_PIIX4 (PCI_COMMAND_OFFSET); > > + Pmba = POWER_MGMT_REGISTER_PIIX4 (0x40); > > + PmRegMisc = POWER_MGMT_REGISTER_PIIX4 (0x80); > > + break; > > + case INTEL_Q35_MCH_DEVICE_ID: > > + PmCmd = POWER_MGMT_REGISTER_Q35 (PCI_COMMAND_OFFSET); > > + Pmba = POWER_MGMT_REGISTER_Q35 (0x40); > > + PmRegMisc = POWER_MGMT_REGISTER_Q35 (0x80); > > + break; > > + default: > > + DEBUG ((EFI_D_ERROR, "%a: Unknown Host Bridge Device ID: 0x%04x\n", > > + __FUNCTION__, HostBridgeDevId)); > > + ASSERT (FALSE); > > When I build IA32 (OvmfPkg/build.sh -a IA32) I get warnings about > possibly uninitialized variables. > > It seems to happen basically everwhere that you switch on > HostBridgeDevId.
I wonder why it's only warning on IA32, not like its different on X64 :) > We should default to setting variables to the PIIX4 values in this > case. > > I'm not sure if we should just skip the assert and use the PIIX4 > values. With the understanding that I will obviously defer to your judgment regarding style, I actually *like* the switch statement, complete with ASSERT(FALSE) if something "surprising" happens that causes the world to end... :) Assuming we're still on the same page, the question becomes how to shut up gcc. We could initialize PmCmd, Pmba, and PmRegMisc to 0 when we declare them: UINTN PmCmd = 0; UINTN Pmba = 0; UINTN PmRegMisc = 0; or right before the switch statement, but that feels cheesy because it's gratuitous, so I don't like either alternative. Right now, I'm very tempted to initialize them to 0 *after* the ASSERT(FALSE) with a comment: HostBridgeDevId = PciRead16 (OVMF_HOSTBRIDGE_DID); switch (HostBridgeDevId) { case INTEL_82441_DEVICE_ID: PmCmd = POWER_MGMT_REGISTER_PIIX4 (PCI_COMMAND_OFFSET); Pmba = POWER_MGMT_REGISTER_PIIX4 (0x40); PmRegMisc = POWER_MGMT_REGISTER_PIIX4 (0x80); break; case INTEL_Q35_MCH_DEVICE_ID: PmCmd = POWER_MGMT_REGISTER_Q35 (PCI_COMMAND_OFFSET); Pmba = POWER_MGMT_REGISTER_Q35 (0x40); PmRegMisc = POWER_MGMT_REGISTER_Q35 (0x80); break; default: DEBUG ((EFI_D_ERROR, "%a: Unknown Host Bridge Device ID: x%04x\n", __FUNCTION__, HostBridgeDevId)); ASSERT (FALSE); + PmCmd = Pmba = PmRegMisc = 0; // suppress uninitialized use gcc warning } I can retrofit this on top of each patch in which I introduced a switch on HostBridgeDevId, unless you really resent the way it looks :) Please let me know what you think. Thanks, --Gabriel PS. Even once I fixed all of these, IA32 build is still busted right now (for a reason unrelated to q35): "/usr/bin/gcc" -g -fshort-wchar -fno-strict-aliasing -Wall -Werror -Wno-array-bounds -ffunction-sections -fdata-sections -c -include AutoGen.h -DSTRING_ARRAY_NAME=XenPvBlkDxeStrings -m32 -malign-double -fno-stack-protector -D EFI32 -Wno-address -Wno-unused-but-set-variable -Os -mno-mmx -mno-sse -o /home/somlo/KVM-OSX/SCRATCH/edk2/Build/OvmfIa32/DEBUG_GCC48/IA32/OvmfPkg/XenPvBlkDxe/XenPvBlkDxe/OUTPUT/./BlockFront.obj -I/home/somlo/KVM-OSX/SCRATCH/edk2/OvmfPkg/XenPvBlkDxe -I/home/somlo/KVM-OSX/SCRATCH/edk2/Build/OvmfIa32/DEBUG_GCC48/IA32/OvmfPkg/XenPvBlkDxe/XenPvBlkDxe/DEBUG -I/home/somlo/KVM-OSX/SCRATCH/edk2/MdePkg -I/home/somlo/KVM-OSX/SCRATCH/edk2/MdePkg/Include -I/home/somlo/KVM-OSX/SCRATCH/edk2/MdePkg/Include/Ia32 -I/home/somlo/KVM-OSX/SCRATCH/edk2/OvmfPkg -I/home/somlo/KVM-OSX/SCRATCH/edk2/OvmfPkg/Include /home/somlo/KVM-OSX/SCRATCH/edk2/OvmfPkg/XenPvBlkDxe/BlockFront.c In file included from /usr/include/features.h:388:0, from /usr/include/inttypes.h:25, from /home/somlo/KVM-OSX/SCRATCH/edk2/OvmfPkg/XenPvBlkDxe/BlockFront.c:40: /usr/include/gnu/stubs.h:7:27: fatal error: gnu/stubs-32.h: No such file or directory # include <gnu/stubs-32.h> ^ compilation terminated. make: *** [/home/somlo/KVM-OSX/SCRATCH/edk2/Build/OvmfIa32/DEBUG_GCC48/IA32/OvmfPkg/XenPvBlkDxe/XenPvBlkDxe/OUTPUT/BlockFront.obj] Error 1 build.py... : error 7000: Failed to execute command make tbuild [/home/somlo/KVM-OSX/SCRATCH/edk2/Build/OvmfIa32/DEBUG_GCC48/IA32/OvmfPkg/XenPvBlkDxe/XenPvBlkDxe] build.py... : error F002: Failed to build module /home/somlo/KVM-OSX/SCRATCH/edk2/OvmfPkg/XenPvBlkDxe/XenPvBlkDxe.inf [IA32, GCC48, DEBUG] - Failed - ------------------------------------------------------------------------------ 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