[PATCH v3 xserver] os,dix: apply libs relocation unconditionally

Alan Coopersmith alan.coopersmith at oracle.com
Sun Apr 23 01:01:49 UTC 2017


Thanks - this one builds correctly on Solaris for me.

Acked-by: Alan Coopersmith <alan.coopersmith at oracle.com>

	-alan-

On 04/ 2/17 01:02 AM, Mihail Konev wrote:
> When building with DTrace compiler enabled, "ld -r" is applied to the
> entire os/ and dix/, making their symbols visible from everywhere on
> linker command line.  This alters the build:
> - 3f8c2f94483bf0b96e129c97ef4950170a3f05b4 was only necessary without dtrace.
> - 3ef16dfb9830bd6b41ae428f4f213ae0c35c1056 fixed the with-dtrace, but broke
>   the without-dtrace dmx build.
>
> The purpose of "-r" is to satisfy linker on Solaris that needs DTrace
> objects to be put into a Relocatable Object.
>
> Use the flag for non-DTrace build too.
>
> v2: Also change noinst_PROGRAMS -> all-local to prevent revealed automake warning:
>
>   os/Makefile.am:70: warning: deprecated feature: target 'os.O' overrides 'os.O$(EXEEXT)'
>   os/Makefile.am:70: change your target to read 'os.O$(EXEEXT)'
>   /usr/share/automake-1.15/am/program.am: target 'os.O$(EXEEXT)' was defined here
>   os/Makefile.am:2:   while processing program 'os.O'
>
>     Rebase upon fde5cd78 ("tests: Fix guards for ld -wrap") to be safe (no change).
>     Reword.
> v3: Add all-local to CLEANFILES
>
> Fixes "./configure --enable-dmx --with-dtrace=no" build.
>
> Reported-by: Byeong-ryeol Kim <brofkims at gmail.com>
>
> Fixes: 3ef16dfb ("dmx: fix linking")
> Fixes: 49a26681 ("Add DTrace probe points")
> Signed-off-by: Mihail Konev <k.mvc at ya.ru>
> ---
>  configure.ac    |  9 ++-------
>  dix/Makefile.am | 13 +++++++------
>  os/Makefile.am  | 13 ++++++++-----
>  3 files changed, 17 insertions(+), 18 deletions(-)
>
> diff --git a/configure.ac b/configure.ac
> index 3bc15a81a263..f583a4b2f7d7 100644
> --- a/configure.ac
> +++ b/configure.ac
> @@ -1577,13 +1577,8 @@ AC_DEFINE(XSYNC, 1, [Support XSync extension])
>  AC_DEFINE(XCMISC, 1, [Support XCMisc extension])
>  AC_DEFINE(BIGREQS, 1, [Support BigRequests extension])
>
> -if test "x$SPECIAL_DTRACE_OBJECTS" = "xyes" ; then
> -  DIX_LIB='$(top_builddir)/dix/dix.O'
> -  OS_LIB='$(top_builddir)/os/os.O $(SHA1_LIBS) $(DLOPEN_LIBS) $(LIBUNWIND_LIBS)'
> -else
> -  DIX_LIB='$(top_builddir)/dix/libdix.la'
> -  OS_LIB='$(top_builddir)/os/libos.la'
> -fi
> +DIX_LIB='$(top_builddir)/dix/dix.O'
> +OS_LIB='$(top_builddir)/os/os.O $(SHA1_LIBS) $(DLOPEN_LIBS) $(LIBUNWIND_LIBS)'
>  AC_SUBST([DIX_LIB])
>  AC_SUBST([OS_LIB])
>
> diff --git a/dix/Makefile.am b/dix/Makefile.am
> index a4171d7e1f12..ed443a0cb2cb 100644
> --- a/dix/Makefile.am
> +++ b/dix/Makefile.am
> @@ -1,4 +1,5 @@
>  noinst_LTLIBRARIES = libdix.la libmain.la
> +all-local: dix.O
>
>  AM_CPPFLAGS = -I$(top_srcdir)/include
>  AM_CFLAGS = $(DIX_CFLAGS)
> @@ -59,16 +60,16 @@ Xserver-dtrace.h: $(srcdir)/Xserver.d
>
>  endif
>
> +DTRACE_OBJS =
>  if SPECIAL_DTRACE_OBJECTS
>  # Generate dtrace object code for probes in libdix
>  dtrace-dix.o: $(top_srcdir)/dix/Xserver.d libdix.la
>  	$(AM_V_GEN)$(DTRACE) -G -C -o $@ -s $(top_srcdir)/dix/Xserver.d $(am_libdix_la_OBJECTS:%.lo=.libs/%.o)
> +DTRACE_OBJS += dtrace-dix.o
> +endif
>
> -noinst_PROGRAMS = dix.O
> -
> -dix_O_SOURCES =
> -dix.O: dtrace-dix.o libdix.la
> +# "ld -r" is required for Solaris
> +dix.O: $(DTRACE_OBJS) libdix.la
>  	$(AM_V_GEN)ld -r -o $@ $(am_libdix_la_OBJECTS:%.lo=.libs/%.o)
> -endif
>
> -CLEANFILES = Xserver-dtrace.h
> +CLEANFILES = Xserver-dtrace.h dix.O
> diff --git a/os/Makefile.am b/os/Makefile.am
> index c6e78cb99fd5..1ef5083c78e1 100644
> --- a/os/Makefile.am
> +++ b/os/Makefile.am
> @@ -1,4 +1,5 @@
>  noinst_LTLIBRARIES = libos.la
> +all-local: os.O
>
>  AM_CFLAGS = $(DIX_CFLAGS) $(SHA1_CFLAGS)
>
> @@ -56,14 +57,16 @@ endif
>
>  EXTRA_DIST = $(SECURERPC_SRCS) $(XDMCP_SRCS)
>
> +DTRACE_OBJS =
>  if SPECIAL_DTRACE_OBJECTS
>  # Generate dtrace object code for probes in libos & libdix
>  dtrace.o: $(top_srcdir)/dix/Xserver.d libos.la
>  	$(AM_V_GEN)$(DTRACE) -G -C -o $@ -s $(top_srcdir)/dix/Xserver.d .libs/*.o ../dix/.libs/*.o
> +DTRACE_OBJS += dtrace.o
> +endif
>
> -noinst_PROGRAMS = os.O
> +# "ld -r" is required for Solaris
> +os.O: $(DTRACE_OBJS) libos.la
> +	$(AM_V_GEN)ld -r -o $@ $(DTRACE_OBJS) .libs/*.o
>
> -os_O_SOURCES =
> -os.O: dtrace.o libos.la
> -	$(AM_V_GEN)ld -r -o $@ dtrace.o .libs/*.o
> -endif
> +CLEANFILES = os.O
>


-- 
	-Alan Coopersmith-              alan.coopersmith at oracle.com
	 Oracle Solaris Engineering - http://blogs.oracle.com/alanc


More information about the xorg-devel mailing list