public inbox for devel@edk2.groups.io
 help / color / mirror / Atom feed
From: Andrew Fish <afish@apple.com>
To: "Lin, Derek (HPS UEFI Dev)" <derek.lin2@hpe.com>
Cc: "edk2-devel@lists.01.org" <edk2-devel@lists.01.org>,
	"Shia, Cinnamon" <cinnamon.shia@hpe.com>
Subject: Re: [BaseTools] Library GUIDs missing from Guid.xref file.
Date: Wed, 26 Oct 2016 22:24:41 -0700	[thread overview]
Message-ID: <88D9A338-D75C-4509-8079-2821EE9EF313@apple.com> (raw)
In-Reply-To: <DF4PR84MB0025A90FFBEB149CD48DF3C6C2AA0@DF4PR84MB0025.NAMPRD84.PROD.OUTLOOK.COM>


> On Oct 26, 2016, at 9:09 PM, Lin, Derek (HPS UEFI Dev) <derek.lin2@hpe.com> wrote:
> 
> Hi Andrew,
> 
> We also see this issue recently. And we have a fix. I've send email patch minutes ago.
> 

Derek,

Thanks for sharing the fix. 

I noticed it introduced a build failure for a badly formed library INF file. I assume that means this fix is pulling in libraries that are in the DSC file, but not currently being built? That is not really a problem as it means you have too many GUID vs. not enough. 

I also noticed that your fix adds the FILE_GUID values for all the libraries. The FILE_GUID values for the any PEIM, DXE/UEFI driver that end up in an FV will be present in the ROM, but the library values do not end up in the ROM. Also by changing the code to use a Python dictionary the order of everything changed. I had a debugger command that would just dump out the FILE_GUDs, so it would be good to maintain the old behavior. 

         GuidDict = {}
         for Arch in ArchList:
             PlatformDataBase = BuildDb.BuildObject[GenFdsGlobalVariable.ActivePlatform, Arch, GenFdsGlobalVariable.TargetName, GenFdsGlobalVariable.ToolChainTag]
-            for ModuleFile in PlatformDataBase.Modules:
+            for ModuleFile in [x for x in PlatformDataBase.Modules] + [x for x in PlatformDataBase.LibraryInstances]:
                 Module = BuildDb.BuildObject[ModuleFile, Arch, GenFdsGlobalVariable.TargetName, GenFdsGlobalVariable.ToolChainTag]
-                GuidXRefFile.write("%s %s\n" % (Module.Guid, Module.BaseName))
+                if ModuleFile in PlatformDataBase.Modules:
+                    GuidXRefFile.write("%s %s\n" % (Module.Guid, Module.BaseName))
                 for key, item in Module.Protocols.items():
                     GuidDict[key] = item
                 for key, item in Module.Guids.items():

If your adding ModuleGuidDict was a performance fix, I guess I could just make it a list to keep order. 

Thanks,

Andrew Fish

> Thanks,
> Derek
> 
> From: edk2-devel [mailto:edk2-devel-bounces@lists.01.org] On Behalf Of Andrew Fish
> Sent: Thursday, October 27, 2016 9:08 AM
> To: edk2-devel <edk2-devel@lists.01.org>
> Subject: [edk2] [BaseTools] Library GUIDs missing from Guid.xref file.
> 
> I noticed if a GUID (PPI & Protocol) was only used via a library it does not end up in the Guid.xref file. 
> 
> It looks to me like this code is only extracting the GUIDs from the Drivers INF file and the GUIDs defined in dependent libraries are skipped?  
> 
> 
> https://github.com/tianocore/edk2/blob/master/BaseTools/Source/Python/GenFds/GenFds.py#L701 <https://github.com/tianocore/edk2/blob/master/BaseTools/Source/Python/GenFds/GenFds.py#L701>
> 
>        for Arch in ArchList:
>            PlatformDataBase = BuildDb.BuildObject[GenFdsGlobalVariable.ActivePlatform, Arch, GenFdsGlobalVariable.TargetName, GenFdsGlobalVariable.ToolChainTag]
>            for ModuleFile in PlatformDataBase.Modules:
>                Module = BuildDb.BuildObject[ModuleFile, Arch, GenFdsGlobalVariable.TargetName, GenFdsGlobalVariable.ToolChainTag]
>                GuidXRefFile.write("%s %s\n" % (Module.Guid, Module.BaseName))
>                for key, item in Module.Protocols.items():
>                    GuidDict[key] = item
>                for key, item in Module.Guids.items():
>                    GuidDict[key] = item
>                for key, item in Module.Ppis.items():
>                    GuidDict[key] = item
> 
> 
> Does anyone know how to extract the info from the dependent libs? 
> 
> I have an lldb type formatter for EFI_GUID that will print out the GUID C name so I noticed when some of them went missing. 
> 
> Thanks,
> 
> Andrew Fish
> _______________________________________________
> edk2-devel mailing list
> edk2-devel@lists.01.org
> https://lists.01.org/mailman/listinfo/edk2-devel



  reply	other threads:[~2016-10-27  5:24 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-10-27  1:08 [BaseTools] Library GUIDs missing from Guid.xref file Andrew Fish
     [not found] ` <AT5PR84MB01150BA503E56D54D085691CF2AA0@AT5PR84MB0115.NAMPRD84.PROD.OUTLOOK.COM>
2016-10-27  4:09   ` Lin, Derek (HPS UEFI Dev)
2016-10-27  5:24     ` Andrew Fish [this message]
2016-10-27  5:49       ` Lin, Derek (HPS UEFI Dev)
2016-10-27  5:52         ` Gao, Liming
2016-10-28  2:34           ` Lin, Derek (HPS UEFI Dev)

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-list from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=88D9A338-D75C-4509-8079-2821EE9EF313@apple.com \
    --to=devel@edk2.groups.io \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox