From: "Lin, Derek (HPS UEFI Dev)" <derek.lin2@hpe.com>
To: "afish@apple.com" <afish@apple.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: Thu, 27 Oct 2016 05:49:35 +0000 [thread overview]
Message-ID: <DF4PR84MB002504BA2AB953A03A8A490EC2AA0@DF4PR84MB0025.NAMPRD84.PROD.OUTLOOK.COM> (raw)
In-Reply-To: <88D9A338-D75C-4509-8079-2821EE9EF313@apple.com>
Andrew,
The ModuleGuidDict was not for performance, it's because Arch IA32 X64 have same library name/FILE_GUID pair, for not duplicate it.
You are right the patch add library FILE_GUID but they are not end up in the ROM, I'm ok remove it or not.
Feel free to update the patch.
Thanks,
Derek
-----Original Message-----
From: afish@apple.com [mailto:afish@apple.com]
Sent: Thursday, October 27, 2016 1:25 PM
To: Lin, Derek (HPS UEFI Dev) <derek.lin2@hpe.com>
Cc: edk2-devel@lists.01.org; Shia, Cinnamon <cinnamon.shia@hpe.com>
Subject: Re: [edk2] [BaseTools] Library GUIDs missing from Guid.xref file.
> 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
next prev parent reply other threads:[~2016-10-27 5:49 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
2016-10-27 5:49 ` Lin, Derek (HPS UEFI Dev) [this message]
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=DF4PR84MB002504BA2AB953A03A8A490EC2AA0@DF4PR84MB0025.NAMPRD84.PROD.OUTLOOK.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