Date: Tue, 5 Nov 2019 03:20:40 +0000 (UTC) From: Conrad Meyer <cem@FreeBSD.org> To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r354347 - in head: contrib/compiler-rt/lib/builtins contrib/libunwind/include lib/libcompiler_rt lib/libgcc_s lib/libgcc_s/arm Message-ID: <201911050320.xA53Keqi072895@repo.freebsd.org>
next in thread | raw e-mail | index | archive | help
Author: cem Date: Tue Nov 5 03:20:40 2019 New Revision: 354347 URL: https://svnweb.freebsd.org/changeset/base/354347 Log: Fix llvm-libunwind userspace build on ARM GCC's libgcc exports a few ARM-specific symbols for ARM EABI, AEABI, or EHABI or whatever it's called. Export the same ones from LLVM-libunwind's libgcc_s, on ARM. As part of this, convert libgcc_s from a direct Version.map to one constructed from component Symbol.map files. This allows the ARM-specific Symbol.map to be included only on ARM. Fix ARM-only oddities in struct name/aliases in LLVM-libunwind to match non-ARM definitions and ARM-specific expectations in libcxxrt / libcompiler_rt. No functional change intended for non-ARM architectures. This commit does not actually flip the switch for ARM defaults from libgcc to llvm-libunwind, but makes it possible (to compile, anyway). Added: head/lib/libgcc_s/Symbol.map - copied, changed from r354346, head/lib/libgcc_s/Version.map head/lib/libgcc_s/Versions.def (contents, props changed) head/lib/libgcc_s/arm/ head/lib/libgcc_s/arm/Symbol.map (contents, props changed) Deleted: head/lib/libgcc_s/Version.map Modified: head/contrib/compiler-rt/lib/builtins/gcc_personality_v0.c head/contrib/libunwind/include/unwind.h head/lib/libcompiler_rt/Makefile head/lib/libgcc_s/Makefile Modified: head/contrib/compiler-rt/lib/builtins/gcc_personality_v0.c ============================================================================== --- head/contrib/compiler-rt/lib/builtins/gcc_personality_v0.c Tue Nov 5 02:30:41 2019 (r354346) +++ head/contrib/compiler-rt/lib/builtins/gcc_personality_v0.c Tue Nov 5 03:20:40 2019 (r354347) @@ -9,8 +9,23 @@ #include "int_lib.h" #include <unwind.h> +/* + * XXX On FreeBSD, this file is compiled into three libraries: + * - libcompiler_rt + * - libgcc_eh + * - libgcc_s + * + * In the former, the include path points to the contrib/libcxxrt/unwind-arm.h + * copy of unwind.h. In the latter, the include path points to the + * contrib/libunwind/include/unwind.h header (LLVM libunwind). + * + * Neither (seemingly redundant) variant of unwind.h needs the redefinitions + * provided in the "helpful" header below, and libcxxrt's unwind-arm.h provides + * *no* useful distinguishing macros, so just forcibly disable the helper + * header on FreeBSD. + */ #if defined(__arm__) && !defined(__ARM_DWARF_EH__) && \ - !defined(__USING_SJLJ_EXCEPTIONS__) + !defined(__USING_SJLJ_EXCEPTIONS__) && !defined(__FreeBSD__) // When building with older compilers (e.g. clang <3.9), it is possible that we // have a version of unwind.h which does not provide the EHABI declarations // which are quired for the C personality to conform to the specification. In Modified: head/contrib/libunwind/include/unwind.h ============================================================================== --- head/contrib/libunwind/include/unwind.h Tue Nov 5 02:30:41 2019 (r354346) +++ head/contrib/libunwind/include/unwind.h Tue Nov 5 03:20:40 2019 (r354347) @@ -66,12 +66,16 @@ static const _Unwind_State _US_ACTION_MASK static const _Unwind_State _US_FORCE_UNWIND = 8; typedef uint32_t _Unwind_EHT_Header; +/* + * gcc_personality_v0 references 'struct _Unwind_Exception' all over the place. + * Nothing in libunwind cares about 'struct _Unwind_Control_Block,' so make it + * the alias of struct _Unwind_Exception, instead of the other way around. + */ +struct _Unwind_Exception; +typedef struct _Unwind_Exception _Unwind_Exception; +typedef struct _Unwind_Exception _Unwind_Control_Block; /* Alias */ -struct _Unwind_Control_Block; -typedef struct _Unwind_Control_Block _Unwind_Control_Block; -typedef struct _Unwind_Control_Block _Unwind_Exception; /* Alias */ - -struct _Unwind_Control_Block { +struct _Unwind_Exception { uint64_t exception_class; void (*exception_cleanup)(_Unwind_Reason_Code, _Unwind_Control_Block*); Modified: head/lib/libcompiler_rt/Makefile ============================================================================== --- head/lib/libcompiler_rt/Makefile Tue Nov 5 02:30:41 2019 (r354346) +++ head/lib/libcompiler_rt/Makefile Tue Nov 5 03:20:40 2019 (r354347) @@ -12,10 +12,6 @@ CFLAGS+= -fvisibility=hidden CFLAGS+= -DVISIBILITY_HIDDEN CFLAGS+= -I${SRCTOP}/contrib/libcxxrt -.if ${COMPILER_TYPE} == "clang" -CWARNFLAGS.gcc_personality_v0.c+= -Wno-typedef-redefinition -.endif - # gcc has incompatible internal declarations for __divtc3 and __multc3, but has # no option to silence its warning, so make warnings non-fatal. NO_WERROR.gcc= Modified: head/lib/libgcc_s/Makefile ============================================================================== --- head/lib/libgcc_s/Makefile Tue Nov 5 02:30:41 2019 (r354346) +++ head/lib/libgcc_s/Makefile Tue Nov 5 03:20:40 2019 (r354347) @@ -4,12 +4,22 @@ PACKAGE= clibs SHLIB_NAME= libgcc_s.so.1 SHLIBDIR?= /lib +.include <bsd.opts.mk> + MK_SSP= no WARNS?= 2 LDFLAGS+= -nodefaultlibs LIBADD+= c -VERSION_MAP= ${.CURDIR}/Version.map + +.if ${MK_SYMVER} == "yes" +VERSION_DEF= ${.CURDIR}/Versions.def +SYMBOL_MAPS= ${.CURDIR}/Symbol.map +# Export ARM AEABI unwind routines needed by libc and libthr. +.if exists(${.CURDIR}/${MACHINE_CPUARCH}/Symbol.map) +SYMBOL_MAPS+= ${.CURDIR}/${MACHINE_CPUARCH}/Symbol.map +.endif +.endif .include "../libcompiler_rt/Makefile.inc" .include "../libgcc_eh/Makefile.inc" Copied and modified: head/lib/libgcc_s/Symbol.map (from r354346, head/lib/libgcc_s/Version.map) ============================================================================== --- head/lib/libgcc_s/Version.map Tue Nov 5 02:30:41 2019 (r354346, copy source) +++ head/lib/libgcc_s/Symbol.map Tue Nov 5 03:20:40 2019 (r354347) @@ -3,7 +3,6 @@ */ GCC_3.0 { -global: __absvdi2; __absvsi2; __addvdi3; @@ -84,8 +83,6 @@ global: _Unwind_Resume; _Unwind_SetGR; _Unwind_SetIP; -local: - *; }; GCC_3.3 { @@ -93,11 +90,11 @@ GCC_3.3 { _Unwind_FindEnclosingFunction; _Unwind_GetCFA; _Unwind_Resume_or_Rethrow; -} GCC_3.0; +}; GCC_3.3.1 { __gcc_personality_v0; -} GCC_3.3; +}; GCC_3.4 { __clzdi2; @@ -112,11 +109,11 @@ GCC_3.4 { __popcountdi2; __popcountsi2; __popcountti2; -} GCC_3.3.1; +}; GCC_3.4.2 { __enable_execute_stack; -} GCC_3.4; +}; GCC_3.4.4 { __absvti2; @@ -124,7 +121,7 @@ GCC_3.4.4 { __mulvti3; __negvti2; __subvti3; -} GCC_3.4.2; +}; GCC_4.0.0 { __divdc3; @@ -136,7 +133,7 @@ GCC_4.0.0 { __powidf2; __powisf2; __powixf2; -} GCC_3.4.4; +}; GCC_4.2.0 { __floatundidf; @@ -146,9 +143,9 @@ GCC_4.2.0 { __floatuntisf; __floatuntixf; _Unwind_GetIPInfo; -} GCC_4.0.0; +}; GCC_4.3.0 { __bswapdi2; __bswapsi2; -} GCC_4.2.0; +}; Added: head/lib/libgcc_s/Versions.def ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ head/lib/libgcc_s/Versions.def Tue Nov 5 03:20:40 2019 (r354347) @@ -0,0 +1,31 @@ +# $FreeBSD$ + +GCC_3.0 { +}; + +GCC_3.3 { +} GCC_3.0; + +GCC_3.3.1 { +} GCC_3.3; + +GCC_3.4 { +} GCC_3.3.1; + +GCC_3.4.2 { +} GCC_3.4; + +GCC_3.4.4 { +} GCC_3.4.2; + +GCC_3.5 { +} GCC_3.4.4; + +GCC_4.0.0 { +} GCC_3.5; + +GCC_4.2.0 { +} GCC_4.0.0; + +GCC_4.3.0 { +} GCC_4.2.0; Added: head/lib/libgcc_s/arm/Symbol.map ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ head/lib/libgcc_s/arm/Symbol.map Tue Nov 5 03:20:40 2019 (r354347) @@ -0,0 +1,12 @@ +/* + * $FreeBSD$ + */ + +GCC_3.5 { + _Unwind_VRS_Get; + _Unwind_VRS_Set; + __aeabi_unwind_cpp_pr0; + __aeabi_unwind_cpp_pr1; + __aeabi_unwind_cpp_pr2; + __gnu_unwind_frame; +};
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201911050320.xA53Keqi072895>