Hello Sergey,
Your LTO build is close to working. The errors you show are what happens when ar runs without the linker plugin. There are two ways to fix the problem. One is to run gcc-ar instead of ar. Here is one way: [BuildOptions] GCC:*_*_*_CC_FLAGS = -Os -flto GCC:*_*_*_SLINK_PATH == D:\tmp\gcc-lto\tools\gcc492lto-x86\bin\gcc-ar I hard-coded the path for a quick test and it worked. Environment variables don't work in the inf file. Maybe having gcc in the path before building would allow use of just gcc-ar in the inf file. Another way to solve the problem is to continue to use ar, but add the --plugin argument to tell ar where to find the plugin. Thanks, Scott From: Sergey Isakov [mailto:isakov...@bk.ru] Sent: Friday, November 07, 2014 10:53 PM To: edk2-devel@lists.sourceforge.net Subject: Re: [edk2] Status of gcc link time optimization for EDK2 use Hello Scott, It’s a pity I can’t repeat this because it is for Windows while I work in Mac. I think I correctly apply the patch and try to compile ShellPkg. Without LTO I have full success. Adding into Shell.inf lines ---- [BuildOptions] GCC:*_*_*_CC_FLAGS = -Os -flto —— I got the error ——— ApplicationEntryPoint.c:(.text._ModuleEntryPoint+0x4): undefined reference to `_gUefiDriverRevision' ApplicationEntryPoint.c:(.text._ModuleEntryPoint+0x31): undefined reference to `ProcessLibraryConstructorList' ApplicationEntryPoint.c:(.text._ModuleEntryPoint+0x43): undefined reference to `ProcessModuleEntryPointList' ApplicationEntryPoint.c:(.text._ModuleEntryPoint+0x58): undefined reference to `ProcessLibraryDestructorList' collect2: error: ld returned 1 exit status ——— So these symbols are optimized away and it looks like an idea of AutoGen.c file Sergey On 08 нояб. 2014 г., at 0:48, Scott Duplichan <sc...@notabs.org <mailto:sc...@notabs.org> > wrote: Hello Sergey, How about trying a sample build environment: get file gcc-lto.7z from <http://notabs.org/uefi/tmp/> http://notabs.org/uefi/tmp/ The archive was built this way: 1) Get standard EDK2 2) Apply the patch from here: <http://sourceforge.net/projects/edk2developertoolsforwindows/files/Patches/Link%20Time%20Optimization/> http://sourceforge.net/projects/edk2developertoolsforwindows/files/Patches/Link%20Time%20Optimization/ 3) Run build-python.bat to rebuild build.exe. What it will be in Unix system? 4) Run build.bat > buildlog.txt 2>&1 The result is shell.efi for IA32, X64, and AARCH64 built with GCC49 LTO. Unzip the archive and run build.bat. All 3 shell builds should complete. I deleted the build directory and other temps to reduce archive size. Compilers and all other required build tools are included. Thanks, Scott From: Sergey Isakov [mailto:isakov...@bk.ru] Sent: Friday, November 07, 2014 01:52 PM To: edk2-devel@lists.sourceforge.net <mailto:edk2-devel@lists.sourceforge.net> Subject: Re: [edk2] Status of gcc link time optimization for EDK2 use Comments online On 07 нояб. 2014 г., at 22:20, Jordan Justen < <mailto:jordan.l.jus...@intel.com> jordan.l.jus...@intel.com> wrote: On 2014-11-07 07:33:24, Scott Duplichan wrote: The summary of the 4 changes needed is not detailed enough for easy application. Instead, apply this patch: <http://sourceforge.net/projects/edk2developertoolsforwindows/files/Patches/> http://sourceforge.net/projects/edk2developertoolsforwindows/files/Patches/ Link%20Time%20Optimization/ Even with these patches I can’t compile with -flto. /Users/sergey/src/edk2/MdePkg/Library/UefiApplicationEntryPoint/ApplicationEntryPoint.c:48: undefined reference to `_gUefiDriverRevision' /Users/sergey/src/edk2/MdePkg/Library/UefiApplicationEntryPoint/ApplicationEntryPoint.c:60: undefined reference to `ProcessLibraryConstructorList' /Users/sergey/src/edk2/MdePkg/Library/UefiApplicationEntryPoint/ApplicationEntryPoint.c:65: undefined reference to `ProcessModuleEntryPointList' /Users/sergey/src/edk2/MdePkg/Library/UefiApplicationEntryPoint/ApplicationEntryPoint.c:70: undefined reference to `ProcessLibraryDestructorList' collect2: error: ld returned 1 exit status These symbols stripped? Patches should be contributed using the process documented in BaseTools/Contributions.txt. Otherwise, we cannot use the contribution. The work looks promising though! :) Other feedback: What is up with all the environment variables? It seems to be to allow GCC49 to be used with/without lto... Instead, I think we should do one of these: * Convert GCC49 to LTO only * Wait for GCC50 to enable LTO * Add GCC49LTO I think it may be like conditional compilation ./build.sh -D WITH_LTO By default no. -Jordan From: Sergey Isakov [ <mailto:isakov...@bk.ru> mailto:isakov...@bk.ru] Sent: Friday, November 07, 2014 07:06 AM To: <mailto:edk2-devel@lists.sourceforge.net> edk2-devel@lists.sourceforge.net Subject: Re: [edk2] Status of gcc link time optimization for EDK2 use It is very interesting and I hope someone can apply this to EDK2. I failed. I created gcc-4.9.2 for linux-gnu target with --enable-plugin. And binutils with --enable-plugins. Success. But option -flto brakes building. This advice --------- 2) Use gcc to launch the ld instead of invoking ld directly ----------- failed because of build options for ld ----- x86_64-linux-gnu-gcc: error: unrecognized command line option '-Map' x86_64-linux-gnu-gcc: error: unrecognized command line option '-melf_x86_64' x86_64-linux-gnu-gcc: error: unrecognized command line option '--oformat= elf64-x86-64' x86_64-linux-gnu-gcc: error: unrecognized command line option '-(' ----- and so on. Using ld I got another problems like error adding symbols: Bad value As well as losing _ModuleEntryPoint or .text section at all. I pass waiting for a good news. On 07.11.2014, at 9:05, Scott Duplichan wrote: <http://notabs.org/uefi/gcc-lto.htm> http://notabs.org/uefi/gcc-lto.htm Thanks, Scott ------------------------------------------------------------------------------ _______________________________________________ edk2-devel mailing list <mailto:edk2-devel@lists.sourceforge.net> edk2-devel@lists.sourceforge.net <https://lists.sourceforge.net/lists/listinfo/edk2-devel> https://lists.sourceforge.net/lists/listinfo/edk2-devel ------------------------------------------------------------------------------ _______________________________________________ edk2-devel mailing list <mailto:edk2-devel@lists.sourceforge.net> edk2-devel@lists.sourceforge.net <https://lists.sourceforge.net/lists/listinfo/edk2-devel> https://lists.sourceforge.net/lists/listinfo/edk2-devel ------------------------------------------------------------------------------ _______________________________________________ edk2-devel mailing list edk2-devel@lists.sourceforge.net <mailto:edk2-devel@lists.sourceforge.net> https://lists.sourceforge.net/lists/listinfo/edk2-devel
------------------------------------------------------------------------------
_______________________________________________ edk2-devel mailing list edk2-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/edk2-devel