Hi,

just small nits:

On Tue, May 08 2018, Jan Hubicka wrote:
> Hi,
> this patch adds documentation of -flinker-output.
>
>       * doc/invoke.texi (-flinker-output): Document
> Index: doc/invoke.texi
> ===================================================================
> --- doc/invoke.texi   (revision 260042)
> +++ doc/invoke.texi   (working copy)
> @@ -12208,6 +12208,50 @@
>  object file names should not be used as arguments.  @xref{Overall
>  Options}.
>  
> +@item -flinker-output=@var{type}
> +@opindex -flinker-output
> +This option controls the code generation of the link time optimizer.  By
> +default the linker output is determined by the linker plugin automatically. 
> For
> +debugging the compiler and in the case of incremental linking to non-lto 
> object
> +file is desired, it may be useful to control the type manually.
> +
> +If @var{type} is @samp{exec} the code generation is configured to produce 
> static
> +binary. In this case @option{-fpic} and @option{-fpie} are both disabled.
> +
> +If @var{type} is @samp{dyn} the code generation is configured to produce 
> shared
> +library. In this case @option{-fpic} or @option{-fPIC} is preserved, but not
> +enabled automatically.  This makes it possible to build shared libraries 
> without
> +position independent code on architectures this is possible, i.e. on x86.

on architectures *where* this is possible?

> +
> +If @var{type} is @samp{pie} the code generation is configured to produce
> +@option{-fpie} executable. This result in similar optimizations as 
> @samp{exec}
> +except that @option{-fpie} is not disabled if specified at compilation time.
> +
> +If @var{type} is @samp{rel} the compiler assumes that incremental linking is
> +done.  The sections containing intermediate code for link-time optimization 
> are
> +merged, pre-optimized, and output to the resulting object file. In addition, 
> if
> +@option{-ffat-lto-objects} is specified the binary code is produced for 
> future
> +non-lto linking. The object file produced by incremental linking will be 
> smaller
> +than a static library produced from the same object files.  At link-time the
> +result of incremental linking will also load faster to compiler than a static
> +library assuming that majority of objects in the library are used.
> +
> +Finally @samp{nolto-rel} configure compiler to for incremental linking where
> +code generation is forced, final binary is produced and the intermediate code
> +for later link-time optimization is stripped. When multiple object files are
> +linked together the resulting code will be optimized better than with link 
> time
> +optimizations disabled (for example, the cross-module inlining will happen),
> +most of benefits of whole program optimizations are however lost. 
> +
> +During the incremental link (by @option{-r}) the linker plugin will default 
> to
> +@option{rel}. With current interfaces to GNU Binutils it is however not
> +possible to link incrementally LTO objects and non-LTO objects into a single
> +mixed object file.  In the case any of object files in incremental link can 
> not
> +be used for link-time optimization the linker plugin will output warning and
> +use @samp{nolto-rel}. To maintain the whole program optimization it is
> +recommended to link such objects into static library instead. Alternatively 
> it
> +is possible to use H.J. Lu's binutils with support for mixed objects.
> +

I wonder whether this will be still true and what will people make of
this two years from now.  Perhaps add a reference to the current
binutils version?

Martin

Reply via email to