[if gte mso 9]>

Re: [edk2] Status of gcc link time optimization for EDK2 use

Subject: Re: [edk2] Status of gcc link time optimization for EDK2 use

From: "Scott Duplichan" <scott@notabs.org>

To: <edk2-devel@lists.sourceforge.net>

Date: 2014-11-08 08:35:18

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-sl@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,

Its a pity I cant 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 <scott@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

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-sl@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.justen@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 cant 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-sl@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