Oh, you are right! I replaced SLINK definition in tools-def.txt -*_GCC49_X64_SLINK_PATH = DEF(GCC49_X64_PREFIX)ENV(LTO_PREFIX)ar +*_GCC49_X64_SLINK_PATH = DEF(GCC49_X64_PREFIX)gcc-ar and I see no definition for LTO_PREFIX. Where it should be?
Now I have success with results: Shell.efi-NO_LTO: 930400 Shell.efi-LTO: 927520 Thanks, will test more Sergey On 08 нояб. 2014 г., at 9:35, Scott Duplichan <sc...@notabs.org> wrote: > 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> wrote: > > > Hello Sergey, > > How about trying a sample build environment: get file gcc-lto.7z from > 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/ > 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 > Subject: Re: [edk2] Status of gcc link time optimization for EDK2 use > > Comments online > > On 07 нояб. 2014 г., at 22:20, Jordan Justen <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/ > 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] > Sent: Friday, November 07, 2014 07:06 AM > To: 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 > > Thanks, > Scott > > > > ------------------------------------------------------------------------------ > _______________________________________________ > edk2-devel mailing list > 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 > > ------------------------------------------------------------------------------ > _______________________________________________ > edk2-devel mailing list > 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
------------------------------------------------------------------------------
_______________________________________________ edk2-devel mailing list edk2-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/edk2-devel