Hi Marvin --

Sorry, nothing I can share. Thanks,

Tim

-----Original Message-----
From: Marvin Häuser <mhaeu...@posteo.de> 
Sent: Thursday, August 26, 2021 9:07 AM
To: tim.le...@insyde.com; devel@edk2.groups.io; michael.d.kin...@intel.com
Cc: 'Andrew Fish' <af...@apple.com>; l...@nuviainc.com; 'Ni, Ray' 
<ray...@intel.com>; 'Gao, Zhichao' <zhichao....@intel.com>; 'Wang, Jian J' 
<jian.j.w...@intel.com>; 'Wu, Hao A' <hao.a...@intel.com>; 'Bi, Dandan' 
<dandan...@intel.com>; 'Dong, Eric' <eric.d...@intel.com>; 'Bret Barkelew' 
<bret.barke...@microsoft.com>; 'Vitaly Cheptsov' <vit9...@protonmail.com>
Subject: Re: [edk2-devel] [RFC] Expose HII package list via C variables

Hey Tim,

Interesting, do you happen to have some tool or code that performs such edits 
at hand to take a look at? Seems like most modules already use variables and 
thus cannot be modified in such a way even right now?

That's the kind of information I am looking for, thanks a lot!

Best regards,
Marvin

On 26/08/2021 18:01, tim.le...@insyde.com wrote:
> Hi Marvin --
>
> I would like to add some historical perspective on this. One of the design 
> requirements back when HII was first introduced into the UEFI specification 
> after Intel's initial contribution was that of binary editability. In order 
> to be able to reliably find, extract and then re-insert the HII data into the 
> binary, it needed to be discoverable and not affect the offsets of the code 
> and data in the binary.
>
> While it was possible to put some sort of signature in the read-only data 
> sections of the binary and leave padding for possible future edits, it was 
> felt that using a PE/COFF section similar to the resource sections was 
> better. Resource sections are commonly in use for PE/COFF files (in Windows) 
> and the similar idea existed in the then-extant Mac binary format (resource 
> fork?).
>
> Thanks,
>
> Tim Lewis
> CTO, Insyde Software
> www.insyde.com
>
> -----Original Message-----
> From: devel@edk2.groups.io <devel@edk2.groups.io> On Behalf Of Michael 
> D Kinney
> Sent: Thursday, August 26, 2021 7:37 AM
> To: devel@edk2.groups.io; mhaeu...@posteo.de; Kinney, Michael D 
> <michael.d.kin...@intel.com>
> Cc: Andrew Fish <af...@apple.com>; l...@nuviainc.com; Ni, Ray 
> <ray...@intel.com>; Gao, Zhichao <zhichao....@intel.com>; Wang, Jian J 
> <jian.j.w...@intel.com>; Wu, Hao A <hao.a...@intel.com>; Bi, Dandan 
> <dandan...@intel.com>; Dong, Eric <eric.d...@intel.com>; Bret Barkelew 
> <bret.barke...@microsoft.com>; Vitaly Cheptsov 
> <vit9...@protonmail.com>
> Subject: Re: [edk2-devel] [RFC] Expose HII package list via C 
> variables
>
> Marvin,
>
> One constraint in this discussion is that the HII content in a PE/COFF 
> resource section is defined in the UEFI Specification, Which means UEFI Apps 
> and UEFI Drivers from media and option ROMs that are not part of the system 
> FW image are allowed to use this feature,  This means the system FW PE/COFF 
> loader must support loading HII content from this PE/COFF resource section to 
> be UEFI conformant.  So we cannot remove this feature from the PE/COFF loader 
> without changes to the UEFI Specification.  Even if changes to the UEFI 
> Specification we made, we would have to continue to support this feature for 
> backward compatibility with existing UEFI Apps/Drivers that may be using this 
> feature.
>
> Thanks,
>
> Mike
>
>> -----Original Message-----
>> From: devel@edk2.groups.io <devel@edk2.groups.io> On Behalf Of Marvin 
>> Häuser
>> Sent: Thursday, August 26, 2021 1:51 AM
>> To: devel@edk2.groups.io; Kinney, Michael D 
>> <michael.d.kin...@intel.com>
>> Cc: devel@edk2.groups.io; Andrew Fish <af...@apple.com>; 
>> l...@nuviainc.com; Ni, Ray <ray...@intel.com>; Gao, Zhichao 
>> <zhichao....@intel.com>; Wang, Jian J <jian.j.w...@intel.com>; Wu, 
>> Hao A <hao.a...@intel.com>; Bi, Dandan <dandan...@intel.com>; Dong, 
>> Eric <eric.d...@intel.com>; Bret Barkelew 
>> <bret.barke...@microsoft.com>; Vitaly Cheptsov 
>> <vit9...@protonmail.com>
>> Subject: Re: [edk2-devel] [RFC] Expose HII package list via C 
>> variables
>>
>> Hey Mike,
>>
>> Thanks for your reply!
>>
>> Well, this switch is not well-documented. Looking now at both the 
>> generation code and the emitted code, it does not generate a package 
>> list like my code does, but separate data variables (strings and
>> images) that cannot easily be passed to HiiDatabase as-is. However 
>> apparently there are drivers that use this functionality successfully 
>> by composing the package list at runtime [1].
>>
>> Looking with this information now at the pattern of using HII C 
>> variables (which I did not know existed before) vs the PE/COFF HII 
>> section, most that use latter are Shell applications, which I guess 
>> means the section has actually been introduced to resolve D.? There 
>> are exceptions such as LogoDxe [2], which use the PE/COFF section while D.
>> is not a problem, hence I got confused, sorry. I think these modules 
>> should be updated in any case. Do you agree?
>>
>> So, for modules that use C variables already, my patch would save 
>> some runtime generation code and dynamic memory allocation for the 
>> HII package list. This was not my goal (as I said, I didn't realise 
>> HII C variables already were a thing in the first place), but the 
>> changes are small enough that it might be worth considering anyway, in my 
>> opinion.
>> If a HII package list is generated for both Shell and non-Shell apps, 
>> this also means code paths can be unified. For example, there could 
>> be a library class with constructor and destructor to add/remove 
>> packages from the HII database for all modules that use such, Shell 
>> or not. For BaseTools it means that there is no real need for 
>> separate Python and C paths as ideally they just generate the exact same 
>> data.
>>
>> Now to D., the only usage for this seems to be that Shell can locate 
>> the help text in the executable without executing it, yet it is fully 
>> loaded anyway [3]. To be honest, I find it hard to justify loading an 
>> executable (PE/COFF loading, memory permission application, the full
>> process) to retrieve a help text and then unloading it again, 
>> especially with the HII code being on a core dispatcher level. 1. to 
>> 7. still hold true in my opinion. Was there any discussion I could 
>> read through why Shell apps cannot simply support a "--help" or "-?"
>> command and output the string themselves? Pushing the burden to the 
>> Shell apps does preserve the "drawback" that a full loading is 
>> required (which honestly does not matter for a debugging application 
>> like Shell), however it does relieve the burden of PE/COFF HII 
>> parsing from the core dispatcher (which matters a lot in my opinion 
>> to keep the core simple). It would simply be a normal Shell app 
>> execution as any other however. If someone wants to avoid the PE/COFF 
>> burden altogether, they can still provide a .man file.
>>
>> As for my points 6. and 7., maybe I should provide some context. Due 
>> to many issues with TE files, platforms started abandoning them and 
>> returned to PE/COFF Images. I think a big reason for this is that TE 
>> is not really a sound and complete format, but a stripped version of 
>> PE/COFF with none of the necessary fixups applied. I'm currently 
>> sketching a possible alternative [4], and I would really like to not 
>> having to specify a HII section type, while still preserving 
>> compatibility with all of the UEFI Image types and use-cases [4].
>>
>> Thanks again!
>>
>> Best regards,
>> Marvin
>>
>>
>> [1]
>> https://github.com/tianocore/edk2/blob/7b4a99be8a39c12d3a7fc4b8db9f0e
>> a b4ac688d5/MdeModulePkg/Application/BootManagerMenuAp
>> p/BootManagerMenu.c#L929-L934
>>
>> [2]
>> https://github.com/tianocore/edk2/blob/7b4a99be8a39c12d3a7fc4b8db9f0e
>> a
>> b4ac688d5/MdeModulePkg/Logo/LogoDxe.inf#L23
>>
>> [3]
>> https://github.com/tianocore/edk2/blob/7b4a99be8a39c12d3a7fc4b8db9f0eab4ac688d5/ShellPkg/Application/Shell/ShellManParser.
>> c#L646-L671
>>
>> [4]
>> https://github.com/mhaeuser/edk2/blob/ue_poc/MdePkg/Include/IndustryS
>> t
>> andard/UeImage.h
>>
>> 26.08.2021 00:34:12 Michael D Kinney <michael.d.kin...@intel.com>:
>>
>>> Hi Marvin,
>>>
>>> I think this feature is already there and supported.
>>>
>>> HII can either be in a global variable or in a PE/COFF resource section.
>>> The default is a global variable because HII was implemented before 
>>> the PE/COFF resource section feature was added to the UEFI Specification.
>>>
>>> There is an INF [Defines] section statement to enable the PE/COFF 
>>> section. See UefiHiiResource in the following link.
>>>
>>> https://tianocore-docs.github.io/edk2-InfSpecification/draft/3_edk_i
>>> i_inf_file_format/34_[defines]_section.html#34-
>> defines-section
>>> How is your proposal different than this existing capability?
>>>
>>> Thanks,
>>>
>>> Mike
>>>
>>>> -----Original Message-----
>>>> From: devel@edk2.groups.io <devel@edk2.groups.io> On Behalf Of 
>>>> Marvin Häuser
>>>> Sent: Wednesday, August 25, 2021 2:21 PM
>>>> To: devel@edk2.groups.io
>>>> Cc: Andrew Fish <af...@apple.com>; l...@nuviainc.com; Kinney, 
>>>> Michael D <michael.d.kin...@intel.com>; Ni, Ray <ray...@intel.com>; 
>>>> Gao, Zhichao <zhichao....@intel.com>; Wang, Jian J 
>>>> <jian.j.w...@intel.com>; Wu, Hao A <hao.a...@intel.com>; Bi, Dandan 
>>>> <dandan...@intel.com>; Dong, Eric <eric.d...@intel.com>; Bret 
>>>> Barkelew <bret.barke...@microsoft.com>; Vitaly Cheptsov 
>>>> <vit9...@protonmail.com>
>>>> Subject: [edk2-devel] [RFC] Expose HII package list via C variables
>>>>
>>>> Good day everyone,
>>>>
>>>> Currently, the HII package list is stored in a PE/COFF resource 
>>>> section [1]. I propose to store it in a C variable (byte array with 
>>>> a pointer to it and its size exposed) instead. DxeCore would have a 
>>>> guard to toggle the deprecated support for the automatic protocol 
>>>> installation. This has the following advantages:
>>>>
>>>> 1. Fixes BZ (incl. future toolchains):
>>>> https://bugzilla.tianocore.org/show_bug.cgi?id=557
>>>> 2. Universal method across all toolchains and output file formats 
>>>> 3. Saves error-prone parsing work 4. Saves protocol install/locate 
>>>> work, the data is available right away 5. The omission of a 
>>>> dedicated section can save space 6. Terse file formats can support 
>>>> this and remain terse :) 7. Removes a dependency on the PE/COFF 
>>>> format specifically
>>>>
>>>> A *very rough* PoC diff can be found here:
>>>> https://github.com/mhaeuser/edk2/compare/master...wip_hii_cvar
>>>> If the feedback is positive, I will clean it up of course. OVMF 
>>>> boots with everything working fine.
>>>>
>>>> I'd explicitly like feedback on the following:
>>>> A. Is this an acceptable solution to BZ 557 (Andrew?)?
>>>> B. Is this an acceptable solution for the "HII workflow" (MdeModule 
>>>> maintainers?)?
>>>> C. Is it acceptable to make support UEFI-side support for the old 
>>>> mechanism optional (Stewards?)?
>>>> D. Can an acceptable alternative be found for the removed ShellPkg 
>>>> code (Shell maintainers?)?
>>>>
>>>> As you can see the BaseTools part also is rough, but that is more a 
>>>> question of "how" rather than "whether", so I'll postpone asking about it.
>>>>
>>>> Thanks for your time and feedback!
>>>>
>>>> Best regards,
>>>> Marvin
>>>>
>>>>
>>>> [1] "Once the image is loaded, LoadImage() installs 
>>>> EFI_HII_PACKAGE_LIST_PROTOCOL on the handle if the image contains a 
>>>> custom PE/COFF resource with the type 'HII'."
>>>> - UEFI 2.9, 7.4, "EFI_BOOT_SERVICES.LoadImage()"
>>>>
>>>>
>>>>
>>>>
>>>
>>>
>>>
>>
>>
>>
>
>
> 
>
>
>




-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#79856): https://edk2.groups.io/g/devel/message/79856
Mute This Topic: https://groups.io/mt/85147044/21656
Group Owner: devel+ow...@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub [arch...@mail-archive.com]
-=-=-=-=-=-=-=-=-=-=-=-


Reply via email to