daemon: don't re-exec if the linker supports the -z,now option upstream/master
authorVivek Dasmohapatra <vivek@collabora.co.uk>
Fri, 26 Jan 2018 01:58:19 +0000 (03:58 +0200)
committerTanu Kaskinen <tanuk@iki.fi>
Fri, 26 Jan 2018 02:05:38 +0000 (04:05 +0200)
Usually PulseAudio is built with a linker that supports the -z,now
option, and that option should have the same effect (i.e. the dynamic
linker resolves all symbols when the program is started) as re-execing
with the LD_BIND_NOW environment variable set, so usually the re-execing
is redundant.

BugLink: https://bugs.freedesktop.org/show_bug.cgi?id=104789
configure.ac
src/daemon/main.c

index 2a820b9..0084c86 100644 (file)
@@ -213,6 +213,9 @@ AC_SUBST([VERSIONING_LDFLAGS])
 # The -z now syntax is lifted from Sun's linker and works with GNU's too, other linkers might be added later.
 AX_APPEND_LINK_FLAGS([-Wl,-z,now], [IMMEDIATE_LDFLAGS])
 AC_SUBST([IMMEDIATE_LDFLAGS])
+AS_CASE([$IMMEDIATE_LDFLAGS],[*-z,now*],
+    [AC_DEFINE([HAVE_BIND_NOW],[1],
+               [Define to 1 if immediate binding is available])])
 
 # On ELF systems we don't want the libraries to be unloaded since we don't clean them up properly,
 # so we request the nodelete flag to be enabled.
index 55af4ec..c80fa94 100644 (file)
@@ -397,7 +397,7 @@ int main(int argc, char *argv[]) {
     pa_log_set_level(PA_LOG_NOTICE);
     pa_log_set_flags(PA_LOG_COLORS|PA_LOG_PRINT_FILE|PA_LOG_PRINT_LEVEL, PA_LOG_RESET);
 
-#if defined(__linux__) && defined(__OPTIMIZE__)
+#if !defined(HAVE_BIND_NOW) && defined(__linux__) && defined(__OPTIMIZE__)
     /*
        Disable lazy relocations to make usage of external libraries
        more deterministic for our RT threads. We abuse __OPTIMIZE__ as