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?
[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 (#73254): https://edk2.groups.io/g/devel/message/73254 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] -=-=-=-=-=-=-=-=-=-=-=-