Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 18 Dec 2012 07:26:55 +0000 (UTC)
From:      Andrew Turner <andrew@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r244382 - in head: gnu/lib/libgcc lib/libcompiler_rt
Message-ID:  <201212180726.qBI7Qt7T083968@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: andrew
Date: Tue Dec 18 07:26:55 2012
New Revision: 244382
URL: http://svnweb.freebsd.org/changeset/base/244382

Log:
  Get libcompiler-rt and libgcc building on ARM with clang.
  
  * Don't provide clear_cache or the __sync_* functions on ARM with clang as
    they are provided by clang as builtin functions.
  * Tell clang it is aloud to compile some libgcc code using heinous GCC
    extensions.

Modified:
  head/gnu/lib/libgcc/Makefile
  head/lib/libcompiler_rt/Makefile

Modified: head/gnu/lib/libgcc/Makefile
==============================================================================
--- head/gnu/lib/libgcc/Makefile	Tue Dec 18 07:15:03 2012	(r244381)
+++ head/gnu/lib/libgcc/Makefile	Tue Dec 18 07:26:55 2012	(r244382)
@@ -38,13 +38,16 @@ OBJS=		# added to below in various ways 
 #
 # Library members defined in libgcc2.c.
 LIB2FUNCS= _muldi3 _negdi2 _lshrdi3 _ashldi3 _ashrdi3 \
-	_cmpdi2 _ucmpdi2 _clear_cache \
+	_cmpdi2 _ucmpdi2 \
 	_enable_execute_stack _trampoline __main _absvsi2 _absvdi2 _addvsi3 \
 	_addvdi3 _subvsi3 _subvdi3 _mulvsi3 _mulvdi3 _negvsi2 _negvdi2 _ctors \
 	_ffssi2 _ffsdi2 _clz _clzsi2 _clzdi2 _ctzsi2 _ctzdi2 _popcount_tab \
 	_popcountsi2 _popcountdi2 _paritysi2 _paritydi2 _powisf2 _powidf2 \
 	_powixf2 _powitf2 _mulsc3 _muldc3 _mulxc3 _multc3 _divsc3 _divdc3 \
 	_divxc3 _divtc3
+.if ${COMPILER_TYPE} != "clang" || ${TARGET_CPUARCH} != "arm"
+LIB2FUNCS+= _clear_cache
+.endif
 
 # The floating-point conversion routines that involve a single-word integer.
 .for mode in sf df xf
@@ -106,6 +109,10 @@ LIB2_DIVMOD_FUNCS = _divdi3 _moddi3 _udi
 .if ${TARGET_CPUARCH} == "arm"
 #	from config/arm/t-strongarm-elf
 CFLAGS+=	-Dinhibit_libc -fno-inline
+.if ${COMPILER_TYPE} == "clang"
+CFLAGS+=	-fheinous-gnu-extensions
+.endif
+
 LIB1ASMSRC =	lib1funcs.asm
 LIB1ASMFUNCS =  _dvmd_tls _bb_init_func
 LIB2FUNCS_EXTRA = floatunsidf.c floatunsisf.c

Modified: head/lib/libcompiler_rt/Makefile
==============================================================================
--- head/lib/libcompiler_rt/Makefile	Tue Dec 18 07:15:03 2012	(r244381)
+++ head/lib/libcompiler_rt/Makefile	Tue Dec 18 07:26:55 2012	(r244382)
@@ -28,7 +28,6 @@ SRCF=	absvdi2 \
 	ashlti3 \
 	ashrdi3 \
 	ashrti3 \
-	clear_cache \
 	clzdi2 \
 	clzsi2 \
 	clzti2 \
@@ -126,6 +125,11 @@ SRCF=	absvdi2 \
 	umoddi3 \
 	umodti3
 
+# Don't build clear_cache on ARM with clang as it is a builtin there.
+.if ${MACHINE_CPUARCH} != "arm" || ${COMPILER_TYPE} != "clang"
+SRCF+=	clear_cache
+.endif
+
 # These are already shipped by libc.a on arm and mips
 .if ${MACHINE_CPUARCH} != "arm" && ${MACHINE_CPUARCH} != "mips"
 SRCF+=	adddf3 \
@@ -148,8 +152,9 @@ SRCF+=	adddf3 \
 	umodsi3
 .endif
 
-# FreeBSD-specific atomic intrinsics.
-.if ${MACHINE_CPUARCH} == "arm" || ${MACHINE_CPUARCH} == "mips"
+# FreeBSD-specific atomic intrinsics. Clang provides them as a builtin.
+.if (${MACHINE_CPUARCH} == "arm" && ${COMPILER_TYPE} != "clang") || \
+    ${MACHINE_CPUARCH} == "mips"
 SRCF+=	__sync_fetch_and_add_4 \
 	__sync_fetch_and_and_4 \
 	__sync_fetch_and_or_4 \



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201212180726.qBI7Qt7T083968>