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