On 2014-11-11 19:10:20, Gabriel Somlo wrote:
> 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;

Unfortunately, it looks like the Coding Style document states:
"Initializing a variable as part of its declaration is illegal."
http://sourceforge.net/projects/edk2/files/General%20Documentation/EDK%20II%20C%20Coding%20Standards%20Specification.pdf/download

So, officially, it would need to be:
  UINTN  PmCmd;
  UINTN  Pmba;
  UINTN  PmRegMisc;

  PmCmd     = 0;
  Pmba      = 0;
  PmRegMisc = 0;

(I think this rule is frequently broken though. :)

> 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

But, in this case, I think I prefer to allow PIIX4 to be used as a
default. Well, only for release builds, but... how about this? :

  switch (HostBridgeDevId) {
    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);
      //
      // Fall through to use PIIX4 locations by default
      //
    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;
  }
 
> 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.

Try my [PATCH v2] OvmfPkg/XenPvBlkDxe: Don't include system inttypes.h

-Jordan

> 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

Reply via email to