svn commit: r246706 - head/lib/libc/arm/aeabi
Nathan Whitehorn
nwhitehorn at freebsd.org
Tue Feb 12 15:32:37 UTC 2013
A related question to these commits: are EABI binaries incompatible with
systems built for OABI? And vice versa? If so, should we mint a new
MACHINE_ARCH for ARM EABI (or OABI, I guess)? The usual implication of
sharing a uname -p string is that systems can run each other's binaries
-- that being broken is a strong argument for a new value.
-Nathan
On 02/12/13 00:04, Andrew Turner wrote:
> Author: andrew
> Date: Tue Feb 12 06:04:51 2013
> New Revision: 246706
> URL: http://svnweb.freebsd.org/changeset/base/246706
>
> Log:
> 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.
>
> Modified:
> head/lib/libc/arm/aeabi/Makefile.inc
>
> Modified: head/lib/libc/arm/aeabi/Makefile.inc
> ==============================================================================
> --- head/lib/libc/arm/aeabi/Makefile.inc Tue Feb 12 05:56:00 2013 (r246705)
> +++ head/lib/libc/arm/aeabi/Makefile.inc Tue Feb 12 06:04:51 2013 (r246706)
> @@ -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
>
>
More information about the svn-src-all
mailing list