When clang builds libc it may insert calls to __aeabi_* functions. Normally

this is not a problem as they are resolved by libgcc. The exception is for
the __aeabi_mem* functions. These call back into libc to the appropriate
function. This causes issues for static binaries as we only link against
libc once so there is no way for it to call into libgcc and back.

The fix for this is to include these symbols in libc but keep them hidden
so binaries use the libgcc version.
This commit is contained in:
Andrew Turner 2013-02-12 06:04:51 +00:00
parent 8a166cafe0
commit b27ca6313e
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=246706

View File

@ -7,5 +7,24 @@ SRCS+= aeabi_atexit.c \
aeabi_float.c \
aeabi_unwind_cpp.c
# Add the aeabi_mem* functions. While they live in compiler-rt they call into
# libc. This causes issues when other parts of libc call these functions.
# We work around this by including these functions in libc but mark them as
# hidden so users of libc will not pick up these versions.
.PATH: ${.CURDIR}/../../contrib/compiler-rt/lib/arm
SRCS+= aeabi_memcmp.S \
aeabi_memcpy.S \
aeabi_memmove.S \
aeabi_memset.S
# Mark the functions as hidden so they are not available outside of libc.
CFLAGS.aeabi_memcmp.S= -DVISIBILITY_HIDDEN
CFLAGS.aeabi_memcpy.S= -DVISIBILITY_HIDDEN
CFLAGS.aeabi_memmove.S= -DVISIBILITY_HIDDEN
CFLAGS.aeabi_memset.S= -DVISIBILITY_HIDDEN
CFLAGS+= ${CFLAGS.${.IMPSRC:T}}
SYM_MAPS+=${.CURDIR}/arm/aeabi/Symbol.map