xserver: Branch 'master'

Keith Packard keithp at kemper.freedesktop.org
Wed Mar 24 22:07:43 PDT 2010


 configure.ac   |   13 +++++++++++++
 os/Makefile.am |   17 ++++++++++++-----
 2 files changed, 25 insertions(+), 5 deletions(-)

New commits:
commit 579715f830fbbca9e1ecb17dc18176132f5969e7
Author: Rami Ylimaki <ext-rami.ylimaki at nokia.com>
Date:   Wed Mar 17 12:16:57 2010 +0200

    os: Prevent backtrace from being stopped in noreturn functions.
    
    There are two noreturn functions in the X server: FatalError and
    AbortServer. Having any of those two functions in the middle of a call
    stack will prevent unwinding the program properly and stops the
    backtrace at those functions in gdb.
    
    The file containing FatalError and AbortServer, os/log.c, has to be
    compiled with the -mapcs-frame option on ARM to get proper
    backtraces. Automake imposes its own restrictions on compiling
    individual source files with different options. The recommended way to
    do this is to put os/log.c into a convenience library and add this
    library inside os/libos.la. See the documentation of GNU Automake
    manual, version 1.11.1, section 27.8 Per-Object Flags Emulation, for
    details.
    
    Signed-off-by: Rami Ylimaki <ext-rami.ylimaki at nokia.com>
    Reviewed-by: Daniel Stone <daniel at fooishbar.org>
    Signed-off-by: Keith Packard <keithp at keithp.com>

diff --git a/configure.ac b/configure.ac
index d379b3a..5f08688 100644
--- a/configure.ac
+++ b/configure.ac
@@ -315,6 +315,19 @@ AC_CHECK_HEADER([execinfo.h],[
     ])]
 )
 
+dnl ARM needs additional compiler flags for proper backtraces if GCC is
+dnl used. Compile a dummy program with the -mapcs-frame option. If it
+dnl succeeds, we know that we are building for ARM with GCC.
+old_CFLAGS="$CFLAGS"
+CFLAGS="-mapcs-frame"
+AC_COMPILE_IFELSE(
+        AC_LANG_PROGRAM([[ ]]),
+        ARM_BACKTRACE_CFLAGS="$CFLAGS",
+        ARM_BACKTRACE_CFLAGS=""
+)
+CFLAGS="$old_CFLAGS"
+AC_SUBST(ARM_BACKTRACE_CFLAGS)
+
 dnl ---------------------------------------------------------------------------
 dnl Bus options and CPU capabilities.  Replaces logic in
 dnl hw/xfree86/os-support/bus/Makefile.am, among others.
diff --git a/os/Makefile.am b/os/Makefile.am
index 66a4a0f..3e4f2c5 100644
--- a/os/Makefile.am
+++ b/os/Makefile.am
@@ -1,11 +1,19 @@
-noinst_LTLIBRARIES = libos.la
+noinst_LTLIBRARIES = libos.la liblog.la
 
 AM_CFLAGS = $(DIX_CFLAGS) $(SHA1_CFLAGS)
 
 SECURERPC_SRCS = rpcauth.c
 XDMCP_SRCS = xdmcp.c
 STRLCAT_SRCS = strlcat.c strlcpy.c
-XORG_SRCS = log.c
+
+# Build a convenience library liblog.la that will be added into
+# libos.la. The split is done so that log.c can be built with
+# different compiler options.
+liblog_la_SOURCES = log.c
+# Add flags needed for proper backtraces of functions marked with GCC
+# __attribute__((noreturn)). Currently those flags are needed for
+# FatalError and AbortServer in log.c.
+liblog_la_CFLAGS = $(AM_CFLAGS) $(ARM_BACKTRACE_CFLAGS)
 
 libos_la_SOURCES = 	\
 	WaitFor.c	\
@@ -24,9 +32,8 @@ libos_la_SOURCES = 	\
 	xdmauth.c	\
 	xsha1.c		\
 	xstrans.c	\
-	xprintf.c	\
-	$(XORG_SRCS)
-libos_la_LIBADD = @SHA1_LIBS@ $(DLOPEN_LIBS)
+	xprintf.c
+libos_la_LIBADD = @SHA1_LIBS@ $(DLOPEN_LIBS) liblog.la
 
 if SECURE_RPC
 libos_la_SOURCES += $(SECURERPC_SRCS)


More information about the xorg-commit mailing list