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.
This commit is contained in:
parent
c7dada99bb
commit
e376173cab
@ -38,13 +38,16 @@ OBJS= # added to below in various ways depending on TARGET_CPUARCH
|
||||
#
|
||||
# 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 _udivdi3 _umoddi3 _udiv_w_sdiv _udivmoddi4
|
||||
.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
|
||||
|
@ -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 \
|
||||
|
Loading…
Reference in New Issue
Block a user