Laszlo, Thanks for the quick response. I am unsure whether EDK II mailing list will be happy with 30 letters but I will batch-send it now. The patch is hardly a feature but rather a longstanding, which was scheduled for May release in any case. I believe we discussed most of the details by this time, and I hope only some small nuances are left.
Best wishes, Vitaly > 11 мая 2020 г., в 18:19, Laszlo Ersek <ler...@redhat.com> написал(а): > > On 05/11/20 14:03, Vitaly Cheptsov wrote: >> Hello, >> >> The new version of the patchset was submitted via github (mainly due to the >> amount of patches to avoid spamming the mailing list): >> https://github.com/tianocore/edk2/pull/601 >> <https://github.com/tianocore/edk2/pull/601> > > github pull requests are only used -- at this time -- by contributors > for personal CI runs, and by edk2 maintainers for merging series that > have been reviewed on the list. Patch review remains mailing list-based, > for now. Please post the patches to the list for review. > >> Let me know if any further changes are needed from my side. I hope this >> still is in time for the May tag. > > If this work counts as a feature, then its review has to complete by the > soft feature freeze (2020-05-15). > > Thanks, > Laszlo > >> >> Best wishes, >> Vitaly >> >>> 19 марта 2020 г., в 03:04, Vitaly Cheptsov <chept...@ispras.ru> написал(а): >>> >>> Andrew, Mike, >>> >>> Thank you very much for the comments. Yes, I am aware of PCD overriding in >>> the DSC file, and in fact we are using it for the exact same purpose to >>> configure Shell, inject and override some of its libraries with different >>> settings. >>> >>> From what I understand the library PCD values should be put to: >>> 1. AutoGen.c of each application/driver built (as a value; *not* to the >>> library AutoGen.c). >>> 2. AutoGen.h of the library itself (as an extern). >>> 3. AutoGen.h of the dependent library that depends on the library claiming >>> to use the PCD. >>> 4. AutoGen.h of the application/driver. >>> >>> From what I understand, 1 and 2 are already done by the EDK II BaseTools. >>> So, currently the only things that need to happen are 3 and 4. I do not see >>> any change in the PCD overriding functionality if they land. The only >>> downside I can imagine is a theoretical performance penalty, but this does >>> not seem to be a design problem. Such things if they arise are best to be >>> resolved by an alternative implementation of the build tools. >>> >>> The limitation of not building a separate library is indeed somewhat a >>> problem, as it collides with fixed PCDs. I.e. we cannot override fixed PCDs >>> in the DSC for a particular application, as the library is already built, >>> and fixed PCDs are evaluated during preprocessing/library compilation. >>> However, nothing changes here, and I assume it can be continued to live >>> with. >>> >>> Like I said, for a person like me it seems like a relatively minor change >>> in the BaseTools. Unfortunately, since I have no good grasp of its >>> architecture it will likely take long for me to prepare a solution and >>> ensure that it does not break things for anyone. If there is no-one who can >>> handle it by the next stable tag I could imagine going with the library >>> route and perhaps filing a feature request in the bugzilla, so that is not >>> forgotten. >>> >>> Does the approach of splitting DebugLib into common and implementation >>> parts sound good to both of you? I believe you should have a number of >>> custom DebugLib implementations. While this approach is not as good as the >>> original macro route (especially for compilers without LTO), it should >>> still let everyone add more changes to PCD sets and other shared debugging >>> parts without the need to change DebugLib implementations after the first >>> and the only transition. >>> >>> Best regards, >>> Vitaly >>> >>>> On 19 Mar 2020, at 00:53, Andrew Fish <af...@apple.com> wrote: >>>> >>>> Vitaly, >>>> >>>> The library object files can be shared between modules. If is possible to >>>> override PCD settings per module in the DSC file. So libraries need to >>>> either derive their PCD value from the driver/app they are linking with, >>>> or we would need to build different instances of the library with the >>>> different PCD defaults and link the correct one. The build system does not >>>> support building extra copies of the libraries so we have the restriction >>>> Mike mentioned. >>>> >>>> https://github.com/tianocore/edk2/blob/master/OvmfPkg/OvmfPkgX64.dsc#L856 >>>> <https://github.com/tianocore/edk2/blob/master/OvmfPkg/OvmfPkgX64.dsc#L856> >>>> ShellPkg/Application/Shell/Shell.inf { >>>> <LibraryClasses> >>>> >>>> ShellCommandLib|ShellPkg/Library/UefiShellCommandLib/UefiShellCommandLib.inf >>>> >>>> NULL|ShellPkg/Library/UefiShellLevel2CommandsLib/UefiShellLevel2CommandsLib.inf >>>> >>>> NULL|ShellPkg/Library/UefiShellLevel1CommandsLib/UefiShellLevel1CommandsLib.inf >>>> >>>> NULL|ShellPkg/Library/UefiShellLevel3CommandsLib/UefiShellLevel3CommandsLib.inf >>>> >>>> NULL|ShellPkg/Library/UefiShellDriver1CommandsLib/UefiShellDriver1CommandsLib.inf >>>> >>>> NULL|ShellPkg/Library/UefiShellDebug1CommandsLib/UefiShellDebug1CommandsLib.inf >>>> >>>> NULL|ShellPkg/Library/UefiShellInstall1CommandsLib/UefiShellInstall1CommandsLib.inf >>>> >>>> NULL|ShellPkg/Library/UefiShellNetwork1CommandsLib/UefiShellNetwork1CommandsLib.inf >>>> !if $(NETWORK_IP6_ENABLE) == TRUE >>>> >>>> NULL|ShellPkg/Library/UefiShellNetwork2CommandsLib/UefiShellNetwork2CommandsLib.inf >>>> !endif >>>> >>>> HandleParsingLib|ShellPkg/Library/UefiHandleParsingLib/UefiHandleParsingLib.inf >>>> PrintLib|MdePkg/Library/BasePrintLib/BasePrintLib.inf >>>> >>>> BcfgCommandLib|ShellPkg/Library/UefiShellBcfgCommandLib/UefiShellBcfgCommandLib.inf >>>> >>>> <PcdsFixedAtBuild> >>>> gEfiMdePkgTokenSpaceGuid.PcdDebugPropertyMask|0xFF >>>> gEfiShellPkgTokenSpaceGuid.PcdShellLibAutoInitialize|FALSE >>>> gEfiMdePkgTokenSpaceGuid.PcdUefiLibMaxPrintBufferSize|8000 >>>> } >>>> >>>> >>>> Thanks, >>>> >>>> Andrew Fish >>>> >>>>> On Mar 18, 2020, at 2:31 PM, Vitaly Cheptsov <chept...@ispras.ru >>>>> <mailto:chept...@ispras.ru>> wrote: >>>>> >>>>> Mike, >>>>> >>>>> That explains the current behaviour, but makes me even more confused. >>>>> >>>>> I do not really understand how DEC format is responsible for this. >>>>> Libraries, described with INF files, consume PCDs and potentially >>>>> override their values. DEC files produce PCDs, which libraries or modules >>>>> (drivers, appications) can consume. Header-only libraries have no INF >>>>> files, and thus are not really libraries one can depend on, and thus can >>>>> have no PCDs. I cannot make a connection of how a library consuming a PCD >>>>> could influence on a DEC file. >>>>> >>>>> BaseTools' AutoGen implements DependentLibraryList and LibraryPcdList >>>>> properties, which effectively gather all library PCDs for a module. So >>>>> they already have all the information about the PCDs used and needed to >>>>> be added to AutoGen.c and AutoGen.h. >>>>> >>>>> I expected them to add library PCD definitions to AutoGen.h for modules, >>>>> but for some reason it does not happen. They also explicitly skip PCD >>>>> dependency walk for libraries, which I assumed to be some questionable >>>>> performance optimisation before I realised that they are not exposed for >>>>> the former case as well. >>>>> >>>>> It is very possible that I miss something, but to me it looks like the >>>>> fact that we cannot see library PCDs in modules and higher level >>>>> libraries is just an artificial limitation, which should be possible to >>>>> lift with reasonably few changes in BaseTools for a person that is well >>>>> aware of their codebase. Could you give a better insight on this or >>>>> perhaps ask somebody who knows BaseTools internals? >>>>> >>>>> If you believe it is much worse than I see, I can just trust you for the >>>>> time being and focus on implementing an alternative approach by >>>>> separating a common DebugCommonLib. >>>>> >>>>> Thanks! >>>>> >>>>> Best regards, >>>>> Vitaly >>>>> >>>>>> On 18 Mar 2020, at 23:55, Kinney, Michael D <michael.d.kin...@intel.com >>>>>> <mailto:michael.d.kin...@intel.com>> wrote: >>>>>> >>>>>> >>>>>> Vitaly, >>>>>> >>>>>> It has to do with where PCDs are declared in INF files. >>>>>> >>>>>> If you access a PCD from a macro like you have added to a library class, >>>>>> the module using that library class does not know there is a macro that >>>>>> uses a PCD. So the PCD declaration in the Module INF is missing. By >>>>>> only using the PCDs from the library implementation, the library >>>>>> implementation INF declares the PCDs it uses and the module inherits the >>>>>> PCDs from the library instances. We do not have a feature that allows a >>>>>> library class (which only has a .h file and a one line declaration in a >>>>>> DEC file) to provide extra information such as PCDs that the library >>>>>> class uses. We would need a significant extension to the DEC file >>>>>> format and build tools for a library class declaration to provide more >>>>>> information. >>>>>> >>>>>> Mike >>>>>> >>>>>> From: Vitaly Cheptsov <chept...@ispras.ru <mailto:chept...@ispras.ru>> >>>>>> Sent: Wednesday, March 18, 2020 1:43 PM >>>>>> To: Kinney, Michael D <michael.d.kin...@intel.com >>>>>> <mailto:michael.d.kin...@intel.com>> >>>>>> Cc: devel@edk2.groups.io <mailto:devel@edk2.groups.io>; Laszlo Ersek >>>>>> <ler...@redhat.com <mailto:ler...@redhat.com>>; Andrew Fish >>>>>> <af...@apple.com <mailto:af...@apple.com>>; Marvin Häuser >>>>>> <mhaeu...@outlook.de <mailto:mhaeu...@outlook.de>>; Gao, Liming >>>>>> <liming....@intel.com <mailto:liming....@intel.com>>; Gao, Zhichao >>>>>> <zhichao....@intel.com <mailto:zhichao....@intel.com>> >>>>>> Subject: Re: [edk2-devel] Disabling safe string constraint assertions >>>>>> >>>>>> Mike, >>>>>> >>>>>> Thanks for the clarification. I failed to find it in the specs, but the >>>>>> code of the BaseTools kind of gave me such a suspect. >>>>>> Is there any particular reason why this limitation was added? At the >>>>>> moment I do not see a good reason why this is done. >>>>>> >>>>>> If there is one, I guess we could consider some other approach, for >>>>>> example, we can factor out these functions to a separate >>>>>> DebugHelperLib/DebugBaseLib/DebugCommonLib, which every DebugLib will >>>>>> depend on. This will make sense to me as a workaround of such >>>>>> limitation, as neither us, nor Andrew, as he mentioned previously, are >>>>>> happy of having to duplicate code in DebugLib implementations and update >>>>>> them for a minor Pcd change. >>>>>> >>>>>> If there is no good reason, to be honest, it feels like we should just >>>>>> fix this. After reading the spec I do not see what kind of compiler >>>>>> issue could arise here with normal PCDs. >>>>>> >>>>>> Best regards, >>>>>> Vitaly >>>>>> >>>>>> >>>>>> 18 марта 2020 г., в 23:35, Kinney, Michael D <michael.d.kin...@intel.com >>>>>> <mailto:michael.d.kin...@intel.com>> написал(а): >>>>>> >>>>>> Vitaly, >>>>>> >>>>>> The break you are seeing is because you are not using functions to eval >>>>>> the PCD. This is a known restriction in how PCDs work between libs and >>>>>> modules and is why the current design uses the XxxEnabled() functions. >>>>>> >>>>>> I have not reviewed this issue in a very long time, so I do not know if >>>>>> there are any attributes of newer compilers that would allow a different >>>>>> design now. >>>>>> >>>>>> Best regards, >>>>>> >>>>>> Mike >>>>>> >>>>>> From: devel@edk2.groups.io <mailto:devel@edk2.groups.io> >>>>>> <devel@edk2.groups.io <mailto:devel@edk2.groups.io>> On Behalf Of Vitaly >>>>>> Cheptsov >>>>>> Sent: Wednesday, March 18, 2020 12:36 PM >>>>>> To: Laszlo Ersek <ler...@redhat.com <mailto:ler...@redhat.com>>; Andrew >>>>>> Fish <af...@apple.com <mailto:af...@apple.com>>; Kinney, Michael D >>>>>> <michael.d.kin...@intel.com <mailto:michael.d.kin...@intel.com>>; Marvin >>>>>> Häuser <mhaeu...@outlook.de <mailto:mhaeu...@outlook.de>>; Gao, Liming >>>>>> <liming....@intel.com <mailto:liming....@intel.com>>; Gao, Zhichao >>>>>> <zhichao....@intel.com <mailto:zhichao....@intel.com>> >>>>>> Cc: devel@edk2.groups.io <mailto:devel@edk2.groups.io> >>>>>> Subject: Re: [edk2-devel] Disabling safe string constraint assertions >>>>>> >>>>>> Hello! >>>>>> >>>>>> I have a prototype of the patch, but there currently is an issue with >>>>>> the current EDK II build system. >>>>>> I attached the patch to this e-mail, however, it will not compile for >>>>>> reasonably obscure causes. >>>>>> >>>>>> From what I understand: >>>>>> - DebugLib header now directly uses PCDs from DebugLib, like >>>>>> PcdDebugPropertyMask. >>>>>> - Any library implementing DebugLib should now depend on these PCDs, >>>>>> which seems fairly natural (and I fixed that in BaseDebugLibNull). >>>>>> - Any library using DebugLib header should depend on DebugLib, which >>>>>> also depend on DebugLib to get its PCDs (that already looks fine). >>>>>> >>>>>> However, for some reason DebugLib PCDs are not included in Autogen.h >>>>>> header for other libraries some reason, and we get errors like: >>>>>> MdePkg/Library/BaseOrderedCollectionRedBlackTreeLib/BaseOrderedCollectionRedBlackTreeLib.c:1151:9: >>>>>> error: use of undeclared identifier >>>>>> '_PCD_GET_MODE_8_PcdDebugPropertyMask' >>>>>> >>>>>> I am not familiar with the build system well enough to resolve this, so >>>>>> I either need guidance on where to look first or it will be great if >>>>>> somebody else handles that. >>>>>> I do not believe it is a great idea to abandon the idea of dropping >>>>>> DebugAssertEnabled-like functions, so I suggest us to focus on resolving >>>>>> the build system limitation rather than trying a new approach. >>>>>> >>>>>> Best regards, >>>>>> Vitaly >>>>>> >>>>>> >>>>>> >>>>>> >>>>>> >>>>>> >>>>>> 11 марта 2020 г., в 16:14, Laszlo Ersek <ler...@redhat.com >>>>>> <mailto:ler...@redhat.com>> напиÑал(а): >>>>>> >>>>>> On 03/11/20 14:09, Vitaly Cheptsov wrote: >>>>>> >>>>>> >>>>>> Hi everyone, >>>>>> >>>>>> So, I believe that by now we mostly agreed to let the original >>>>>> proposition land as a short-term solution. We end up with: >>>>>> >>>>>> 1. A PCD condition within SAFE_STRING_COSTRAINT_CHECK macro. >>>>>> 2. Make this condition evaluate to TRUE by default (i.e. ASSERT). >>>>>> 3. Update documentation for BaseLib functions to include the information >>>>>> about this behaviour. >>>>>> >>>>>> The only thing in question is whether this should be a separate PCD or >>>>>> an extra bit in PcdDebugPropertyMask. I believe that we almost agreed on >>>>>> two things: >>>>>> >>>>>> 1. Adding an extra bit to PcdDebugPropertyMask is cleaner. >>>>>> 2. Extending DebugLib interface with a new function is not a good idea. >>>>>> >>>>>> Therefore I suggest: >>>>>> >>>>>> 1.Add #define DEBUG_PROPERTY_ASSERT_CONSTRAINT_ENABLED 0x40. >>>>>> 2. Create header-only macros to replace functions like >>>>>> DebugAssertEnabled. We can then use these macros in new code and >>>>>> deprecate the original functions. >>>>>> 3. Enable DEBUG_PROPERTY_ASSERT_CONSTRAINT_ENABLED bit in MdePkg by >>>>>> default. >>>>>> >>>>>> I will submit the new version of the patch soon unless there is an >>>>>> immediate opposing opinion. >>>>>> >>>>>> Not sure about any particular deprecation timeline, but to me the above >>>>>> certainly sounds worth submitting for review. >>>>>> >>>>>> (NB I don't plan to review in detail -- I just meant to comment on the >>>>>> design, since I was asked to.) >>>>>> >>>>>> Thanks! >>>>>> Laszlo >>>>>> >>>>>> >>>>> >>>> >> >> > -=-=-=-=-=-=-=-=-=-=-=- Groups.io Links: You receive all messages sent to this group. View/Reply Online (#59097): https://edk2.groups.io/g/devel/message/59097 Mute This Topic: https://groups.io/mt/71711587/21656 Group Owner: devel+ow...@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/unsub [arch...@mail-archive.com] -=-=-=-=-=-=-=-=-=-=-=-
signature.asc
Description: Message signed with OpenPGP