diff --git a/configure.ac b/configure.ac index d379b3af5..5f086884f 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 66a4a0f75..3e4f2c591 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)