Re: Build with LTO / -flto on macOS - Mailing list pgsql-hackers

From Tom Lane
Subject Re: Build with LTO / -flto on macOS
Date
Msg-id 4115154.1721401607@sss.pgh.pa.us
Whole thread Raw
In response to Re: Build with LTO / -flto on macOS  (Aleksander Alekseev <aleksander@timescale.com>)
Responses Re: Build with LTO / -flto on macOS
Re: Build with LTO / -flto on macOS
Re: Build with LTO / -flto on macOS
List pgsql-hackers
Aleksander Alekseev <aleksander@timescale.com> writes:
> It seems to me that the patch is not going to become any better and it
> doesn't need any more attention from the reviewers. Thus I changed the
> status of the CF entry to "Ready for Committer".

So ... there is quite a disconnect between what this patch actually
does (i.e., probe to see if "-Wl,-export_dynamic" is accepted) and
the title of this thread.  I wouldn't have much of a problem with
the patch in isolation.  However, what Apple's man page for ld(1)
says is

     -export_dynamic
             Preserves all global symbols in main executables during LTO.
             Without this option, Link Time Optimization is allowed to inline
             and remove global functions. This option is used when a main
             executable may load a plug-in which requires certain symbols from
             the main executable.

which agrees with Wolfgang's comment that it doesn't do much unless
you enable LTO.  So that raises two questions:

1. If you're going to manually inject -flto, seems like you could
manually inject -Wl,-export_dynamic too, so why do you need this
patch?

2. Do we really want to encourage people to build with -flto?

I fear that #2 is actually a pretty serious concern.  I think there
are a lot of places where we've assumed semi-implicitly that
compilation file boundaries are optimization barriers, particularly
around stuff like LWLocks and semaphores.  I don't really want to
spend time chasing obscure, irreproducible bugs that may appear when
that assumption gets broken.  I especially don't want to do it just
because some packager has randomly decided to inject random build
switches.

In short: if we want to support LTO, let's do it officially and not
by the back door.  But I think somebody needs to make the case that
there are compelling benefits that would justify the nontrivial
amount of risk and work that may ensue.  My default position here
is "sorry, we don't support that".

            regards, tom lane



pgsql-hackers by date:

Previous
From: Robert Haas
Date:
Subject: Re: Incremental backup from a streaming replication standby fails
Next
From: Robert Haas
Date:
Subject: Re: Set log_lock_waits=on by default