> On Jan 23, 2020, at 3:21 AM, Laszlo Ersek <ler...@redhat.com> wrote: > > Hi Ken, > > On 01/23/20 02:37, Ken Taylor wrote: > >> If I try to get the size of a DynamicEx PCD in the context of a BIOS >> build for which that PCD is undefined, the call locks up. I expected >> to just get a size of 0, since the PCD is not defined in the build >> context of the PCD DXE service. Is this a problem that's been fixed >> since my BIOS source code was cut? What can I do for older builds >> that haven't been fixed (and probably never will)? Do I have to just >> accept that I'm going to get garbage or lockup if I run my shell >> utility on some builds? Do I have to write a DXE driver and expose a >> protocol, just so I can know if that PCD exists and is properly >> defined? > > I think the ASSERT() that you run into is the one in > GetExPcdTokenNumber(), file "MdeModulePkg/Universal/PCD/Dxe/Service.c": > >> MatchGuid = ScanGuid (GuidTable, mDxeGuidTableSize, Guid); >> // >> // We need to ASSERT here. If GUID can't be found in GuidTable, this is a >> // error in the BUILD system. >> // >> ASSERT (MatchGuid != NULL); > > Can you try the following: > > - Locate EFI_PCD_PROTOCOL. > > - Call EFI_PCD_PROTOCOL.GetNextTokenSpace() in a loop, until you find > the GUID of your own token space GUID, or the function returns an > error. > > - If your token space GUID has been found, call PcdGetEx8(). >
Laszlo, I think it may be better to call PCD_PROTOCOL.GetNextToken() as the GUID and Token spaces are both sparse name spaces. The Get*Ex() functions don't return errors so I guess this is your only choice. You could probably make a MyLibGet*Ex() function that returns EFI_STATUS, and returns the data via an arg. MyLibGet*Ex() could abstract the PCD_PROTOCOL.GetNextToken() check, and it could also probably abstract grabbing the protocol. FYI it looks like the function header is much more description for GetNextToken() in PCD_PROTOCOL [1] vs EFI_PCD_PROTOCOL [2]. Also EFI_PCD_PROTOCOL does not have the *Ex functions, so you need PCD_PROTOCOL anyway to have access to the *Ex versions of the API. [1] https://github.com/tianocore/edk2/blob/master/MdePkg/Include/Protocol/Pcd.h [2] https://github.com/tianocore/edk2/blob/master/MdePkg/Include/Protocol/PiPcd.h Thanks, Andrew Fish > Thanks, > Laszlo > > > > -=-=-=-=-=-=-=-=-=-=-=- Groups.io Links: You receive all messages sent to this group. View/Reply Online (#53456): https://edk2.groups.io/g/devel/message/53456 Mute This Topic: https://groups.io/mt/70044584/21656 Group Owner: devel+ow...@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/unsub [arch...@mail-archive.com] -=-=-=-=-=-=-=-=-=-=-=-