On 03/25/21 04:47, Andrew Fish wrote: > While we are talking about what toolchain targets should do I don’t > understand this [1]? Why does OVMF need to turn on —keepexceptiontable? If > these toolchains require it why don’t they turn it on? I see Mike fixed > it[2]. Is this another case of a global GENFW_FLAG breaking things? Looks > like the CLANGPDB toolchain does what I would expect, and the other > toolchains do not? Is there some history here I’m missing?
Unfortunately, I can't provide any background on this change. I still have the original 2012 email thread in my local archives that led to this commit (message ID of Mike's thread starter: <e92ee9817a31e24eb0585fdf735412f51cb77...@orsmsx107.amr.corp.intel.com>), but there's really no more info in that than what the commit message says -- "SOURCE_DEBUG_ENABLE needs it". I basically never use SOURCE_DEBUG_ENABLE, so I don't know what the needs and drawbacks are. Adding Mike to the CC list. Thanks Laszlo > > [1] $ git grep "keepexceptiontable" > BaseTools/Conf/tools_def.template:2872:DEBUG_CLANGPDB_X64_GENFW_FLAGS = > --keepexceptiontable > BaseTools/Conf/tools_def.template:2882:NOOPT_CLANGPDB_X64_GENFW_FLAGS = > --keepexceptiontable > … > OvmfPkg/OvmfPkgIa32X64.dsc:80: MSFT:*_*_X64_GENFW_FLAGS = > --keepexceptiontable > OvmfPkg/OvmfPkgIa32X64.dsc:81: GCC:*_*_X64_GENFW_FLAGS = > --keepexceptiontable > OvmfPkg/OvmfPkgIa32X64.dsc:82: INTEL:*_*_X64_GENFW_FLAGS = > --keepexceptiontable > OvmfPkg/OvmfPkgX64.dsc:80: MSFT:*_*_X64_GENFW_FLAGS = --keepexceptiontable > OvmfPkg/OvmfPkgX64.dsc:81: GCC:*_*_X64_GENFW_FLAGS = --keepexceptiontable > OvmfPkg/OvmfPkgX64.dsc:82: INTEL:*_*_X64_GENFW_FLAGS = --keepexceptiontable > OvmfPkg/OvmfXen.dsc:71: MSFT:*_*_X64_GENFW_FLAGS = --keepexceptiontable > OvmfPkg/OvmfXen.dsc:72: GCC:*_*_X64_GENFW_FLAGS = --keepexceptiontable > OvmfPkg/OvmfXen.dsc:73: INTEL:*_*_X64_GENFW_FLAGS = --keepexceptiontable > > [2] $ git show bbcafc442b2db > commit bbcafc442b2db91322dd3ba04e166236a41b111d > Author: mdkinney <mdkinney@6f19259b-4bc3-4df7-8a09-765794883524> > Date: Wed Oct 3 21:00:26 2012 +0000 > > The exception table information in X64 PE/COFF images is being stripped > by default in the OvmfPkg. > > This patch preserves this information when SOURCE_DEBUG_ENABLE is set. > > Contributed-under: TianoCore Contribution Agreement 1.0 > Signed-off-by: Michael Kinney <michael.d.kin...@intel.com> > Reviewed-by: Laszlo Ersek > > git-svn-id: > https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@13780 > 6f19259b-4bc3-4df7-8a09-765794883524 > > diff --git a/OvmfPkg/OvmfPkgIa32X64.dsc b/OvmfPkg/OvmfPkgIa32X64.dsc > index 9b2ba8626ab3..40fd5e97b24e 100644 > --- a/OvmfPkg/OvmfPkgIa32X64.dsc > +++ b/OvmfPkg/OvmfPkgIa32X64.dsc > @@ -41,7 +41,12 @@ [BuildOptions] > INTEL:RELEASE_*_*_CC_FLAGS = /D MDEPKG_NDEBUG > MSFT:RELEASE_*_*_CC_FLAGS = /D MDEPKG_NDEBUG > GCC:*_*_*_CC_FLAGS = -mno-mmx -mno-sse > - > +!ifdef $(SOURCE_DEBUG_ENABLE) > + MSFT:*_*_X64_GENFW_FLAGS = --keepexceptiontable > + GCC:*_*_X64_GENFW_FLAGS = --keepexceptiontable > + INTEL:*_*_X64_GENFW_FLAGS = --keepexceptiontable > +!endif > + > > ################################################################################ > # > # SKU Identification section - list of all SKU IDs supported by this > Platform. > diff --git a/OvmfPkg/OvmfPkgX64.dsc b/OvmfPkg/OvmfPkgX64.dsc > index 9ff4a5de1005..c61d41dccbbe 100644 > --- a/OvmfPkg/OvmfPkgX64.dsc > +++ b/OvmfPkg/OvmfPkgX64.dsc > @@ -41,6 +41,11 @@ [BuildOptions] > INTEL:RELEASE_*_*_CC_FLAGS = /D MDEPKG_NDEBUG > MSFT:RELEASE_*_*_CC_FLAGS = /D MDEPKG_NDEBUG > GCC:*_*_*_CC_FLAGS = -mno-mmx -mno-sse > +!ifdef $(SOURCE_DEBUG_ENABLE) > + MSFT:*_*_X64_GENFW_FLAGS = --keepexceptiontable > + GCC:*_*_X64_GENFW_FLAGS = --keepexceptiontable > + INTEL:*_*_X64_GENFW_FLAGS = --keepexceptiontable > +!endif > > > ################################################################################ > # > > > Thanks, > > Andrew Fish > >> On Mar 24, 2021, at 8:38 PM, Andrew Fish <af...@apple.com> wrote: >> >> Liming, >> >> I understand how the tool works, but that is not how it is used. To make it >> work like other toolchains *_*_*_GENFW_FLAGS for ELF targets should pass >> —zero for builds that do not contain symbols. This is how it works today [1]. >> >> The proposed fix is a global hammer ` RELEASE_*_*_GENFW_FLAGS = --zero` and >> it prevents some one from overriding the toolchain definition to turn on >> source level debugging for Release builds. In all the other places this is a >> tool chain choice. So my complaint is solving this globally vs. on a per >> toolchain basis. All the other toolchains don’t produce. >> >> If you look at the XCODE5 toolchian that we override the edk2 default >> DEBUG_XCODE5_X64_CC_FLAGS has -g and RELEASE_XCODE5_X64_CC_FLAGS does not. >> So the source level debugging or not is part of the compiler target choice. >> DEBUG_XCODE5_*_MTOC_FLAGS = -align 0x20 -d $(DEBUG_DIR)/$(MODULE_NAME).dll >> RELEASE_XCODE5_*_MTOC_FLAGS = -align 0x20 >> >> For our override we pass -g to RELEASE builds CC_FLAGS and do >> `RELEASE_XCODE5_*_MTOC_FLAGS = -align 0x20 -d $(MODULE_GUID)` so the >> override to force --zero on every call to GenFw will break this. >> >> So my point is if the toolchain is generating a Debug Directory entry in a >> RELEASE target that does not support debugging then that target should >> setting `RELEASE_<target>_*_GENFW_FLAGS = —zero` to undo the unwanted work. >> I understand why the debug info gets added as it reduces the complexity of >> the ELF to PE/COFF conversion, so I’m not complaining about that just that >> the ELF targets don’t handle this themselves. So to me this fix is working >> the bug of the ELF targets not passing —zero on RELEASE builds to GenFw. >> >> [1] $ git grep _GENFW_FLAGS -- *.template >> BaseTools/Conf/tools_def.template:2872:DEBUG_CLANGPDB_X64_GENFW_FLAGS = >> --keepexceptiontable >> BaseTools/Conf/tools_def.template:2877:RELEASE_CLANGPDB_X64_GENFW_FLAGS = >> BaseTools/Conf/tools_def.template:2882:NOOPT_CLANGPDB_X64_GENFW_FLAGS = >> --keepexceptiontable >> BaseTools/Conf/tools_def.template:3124:*_*_*_GENFW_FLAGS = >> >> Thanks, >> >> Andrew Fish >> >>> On Mar 24, 2021, at 7:24 PM, gaoliming <gaolim...@byosoft.com.cn >>> <mailto:gaolim...@byosoft.com.cn>> wrote: >>> >>> Andrew: >>> GenFw generates debug entry, and zero debug entry. Its functionality is >>> same to the image without debug entry. So, new option is not introduced to >>> control whether GenFw generates debug entry when it converts ELF image to >>> EFI image. >>> >>> Thanks >>> Liming >>> 发件人: devel@edk2.groups.io <mailto:devel@edk2.groups.io> >>> <devel@edk2.groups.io <mailto:devel@edk2.groups.io>> 代表 Andrew Fish via >>> groups.io <http://groups.io/> >>> 发送时间: 2021年3月25日 7:26 >>> 收件人: edk2-devel-groups-io <devel@edk2.groups.io >>> <mailto:devel@edk2.groups.io>>; r...@burtonini.com >>> <mailto:r...@burtonini.com> >>> 抄送: ler...@redhat.com <mailto:ler...@redhat.com> >>> 主题: Re: [edk2-devel] [PATCH v2] OvmfPkg: strip build paths in release builds >>> >>> This breaks some usage we have have in our fork. We have symbols turned on >>> for Release builds, so this change would break that. >>> >>> It looks to me that the root cause of this issue might be that the GenFw is >>> blindly writing the debug directory entry into the PE/COFF? For native >>> PE/COFF I think this is controlled by linker flags? For Xcode/clang it is >>> controlled by the *_XCODE5_*_MTOC_FLAGS. So at this point it is kind of up >>> to each toolchain how they want to deal with symbols on release builds. >>> >>> >>> It seems kind of strange to insert a section and then zero it. Almost seems >>> like the intent of —zero was to post process compare images? >>> >>> >>> -z, --zero Zero the Debug Data Fields in the PE input image >>> file. >>> It also zeros the time stamp fields. >>> This option can be used to compare the binary efi >>> image. >>> It can't be combined with other action options >>> except for -o, -r option. It is a action option. >>> If it is combined with other action options, the >>> later >>> input action option will override the previous one. >>> >>> >>> And in case you are going to ask our fork uses relative paths from the >>> Build directory and/or a UUID string for the Debug Directory entry file >>> name so it is a constant value and does not impact build reproducibility. >>> >>> >>> From a feature stand point this change will break any hope of source level >>> debugging with RELEASE builds. I also think it changes the exception >>> handler code output in OVMF [1] for ELF toolchains. You are going to get >>> the (No PDB) vs. the file and path you were getting today. I assume if you >>> had tools that natively produce PE/COFF and did not have a Debug Directory >>> entry the same thing would happen prior to this change. >>> >>> >>> Status = PeCoffLoaderGetEntryPoint ((VOID *) Pe32Data, &EntryPoint); >>> if (EFI_ERROR (Status)) { >>> EntryPoint = NULL; >>> } >>> InternalPrintMessage ("!!!! Find image based on IP(0x%x) ", CurrentEip); >>> PdbPointer = PeCoffLoaderGetPdbPointer ((VOID *) Pe32Data); >>> if (PdbPointer != NULL) { >>> InternalPrintMessage ("%a", PdbPointer); >>> } else { >>> InternalPrintMessage ("(No PDB) " ); >>> } >>> InternalPrintMessage ( >>> " (ImageBase=%016lp, EntryPoint=%016p) !!!!\n", >>> (VOID *) Pe32Data, >>> EntryPoint >>> ); >>> >>> >>> Not saying we have to "stop the presses", but just trying to point out the >>> side effects of this change. It is not so much that this change is bad, but >>> that we have no way to turn off the Debug Directory Entry for ELF >>> conversion, so we seem to be working around that issue with a bigger hammer? >>> >>> [1] >>> https://github.com/tianocore/edk2/blob/master/UefiCpuPkg/Library/CpuExceptionHandlerLib/CpuExceptionCommon.c#L117 >>> >>> <https://github.com/tianocore/edk2/blob/master/UefiCpuPkg/Library/CpuExceptionHandlerLib/CpuExceptionCommon.c#L117> >>> >>> Thanks, >>> >>> >>> Andrew Fish >>> >>> >>>> On Mar 24, 2021, at 4:58 AM, Ross Burton <r...@burtonini.com >>>> <mailto:r...@burtonini.com>> wrote: >>>> >>>> GenFw will embed a NB10 section which contains the path to the input file, >>>> which means the output files have build paths embedded in them. To reduce >>>> information leakage and ensure reproducible builds, pass --zero in release >>>> builds to remove this information. >>>> >>>> Ref: https://bugzilla.tianocore.org/show_bug.cgi?id=3256 >>>> <https://bugzilla.tianocore.org/show_bug.cgi?id=3256> >>>> Signed-off-by: Ross Burton <ross.bur...@arm.com >>>> <mailto:ross.bur...@arm.com>> >>>> --- >>>> OvmfPkg/AmdSev/AmdSevX64.dsc | 1 + >>>> OvmfPkg/Bhyve/BhyveX64.dsc | 1 + >>>> OvmfPkg/OvmfPkgIa32.dsc | 1 + >>>> OvmfPkg/OvmfPkgIa32X64.dsc | 1 + >>>> OvmfPkg/OvmfPkgX64.dsc | 1 + >>>> OvmfPkg/OvmfXen.dsc | 1 + >>>> 6 files changed, 6 insertions(+) >>>> >>>> diff --git a/OvmfPkg/AmdSev/AmdSevX64.dsc b/OvmfPkg/AmdSev/AmdSevX64.dsc >>>> index 65c42284d9..69a05feea9 100644 >>>> --- a/OvmfPkg/AmdSev/AmdSevX64.dsc >>>> +++ b/OvmfPkg/AmdSev/AmdSevX64.dsc >>>> @@ -78,6 +78,7 @@ >>>> GCC:*_*_X64_GENFW_FLAGS = --keepexceptiontable >>>> INTEL:*_*_X64_GENFW_FLAGS = --keepexceptiontable >>>> !endif >>>> + RELEASE_*_*_GENFW_FLAGS = --zero >>>> >>>> # >>>> # Disable deprecated APIs. >>>> diff --git a/OvmfPkg/Bhyve/BhyveX64.dsc b/OvmfPkg/Bhyve/BhyveX64.dsc >>>> index 4a1cdf5aca..132f55cf69 100644 >>>> --- a/OvmfPkg/Bhyve/BhyveX64.dsc >>>> +++ b/OvmfPkg/Bhyve/BhyveX64.dsc >>>> @@ -76,6 +76,7 @@ >>>> GCC:*_*_X64_GENFW_FLAGS = --keepexceptiontable >>>> INTEL:*_*_X64_GENFW_FLAGS = --keepexceptiontable >>>> !endif >>>> + RELEASE_*_*_GENFW_FLAGS = --zero >>>> >>>> # >>>> # Disable deprecated APIs. >>>> diff --git a/OvmfPkg/OvmfPkgIa32.dsc b/OvmfPkg/OvmfPkgIa32.dsc >>>> index 1eaf3e99c6..93c209950c 100644 >>>> --- a/OvmfPkg/OvmfPkgIa32.dsc >>>> +++ b/OvmfPkg/OvmfPkgIa32.dsc >>>> @@ -80,6 +80,7 @@ >>>> !if $(TOOL_CHAIN_TAG) != "XCODE5" && $(TOOL_CHAIN_TAG) != "CLANGPDB" >>>> GCC:*_*_*_CC_FLAGS = -mno-mmx -mno-sse >>>> !endif >>>> + RELEASE_*_*_GENFW_FLAGS = --zero >>>> >>>> # >>>> # Disable deprecated APIs. >>>> diff --git a/OvmfPkg/OvmfPkgIa32X64.dsc b/OvmfPkg/OvmfPkgIa32X64.dsc >>>> index 4a5a430147..97cc438250 100644 >>>> --- a/OvmfPkg/OvmfPkgIa32X64.dsc >>>> +++ b/OvmfPkg/OvmfPkgIa32X64.dsc >>>> @@ -84,6 +84,7 @@ >>>> GCC:*_*_X64_GENFW_FLAGS = --keepexceptiontable >>>> INTEL:*_*_X64_GENFW_FLAGS = --keepexceptiontable >>>> !endif >>>> + RELEASE_*_*_GENFW_FLAGS = --zero >>>> >>>> # >>>> # Disable deprecated APIs. >>>> diff --git a/OvmfPkg/OvmfPkgX64.dsc b/OvmfPkg/OvmfPkgX64.dsc >>>> index d4d601b444..f544fb04bf 100644 >>>> --- a/OvmfPkg/OvmfPkgX64.dsc >>>> +++ b/OvmfPkg/OvmfPkgX64.dsc >>>> @@ -84,6 +84,7 @@ >>>> GCC:*_*_X64_GENFW_FLAGS = --keepexceptiontable >>>> INTEL:*_*_X64_GENFW_FLAGS = --keepexceptiontable >>>> !endif >>>> + RELEASE_*_*_GENFW_FLAGS = --zero >>>> >>>> # >>>> # Disable deprecated APIs. >>>> diff --git a/OvmfPkg/OvmfXen.dsc b/OvmfPkg/OvmfXen.dsc >>>> index 507029404f..fcaa35acf1 100644 >>>> --- a/OvmfPkg/OvmfXen.dsc >>>> +++ b/OvmfPkg/OvmfXen.dsc >>>> @@ -74,6 +74,7 @@ >>>> GCC:*_*_X64_GENFW_FLAGS = --keepexceptiontable >>>> INTEL:*_*_X64_GENFW_FLAGS = --keepexceptiontable >>>> !endif >>>> + RELEASE_*_*_GENFW_FLAGS = --zero >>>> >>>> # >>>> # Disable deprecated APIs. >>>> -- >>>> 2.25.1 >>>> >>>> >>>> >>>> >>>> >>>> >>> >>> >>> >> > > -=-=-=-=-=-=-=-=-=-=-=- Groups.io Links: You receive all messages sent to this group. View/Reply Online (#73280): https://edk2.groups.io/g/devel/message/73280 Mute This Topic: https://groups.io/mt/81594755/21656 Group Owner: devel+ow...@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/unsub [arch...@mail-archive.com] -=-=-=-=-=-=-=-=-=-=-=-