Date: Sun, 10 Jan 2016 03:55:34 -0800 From: Mark Millard <markmi@dsl-only.net> To: Dimitry Andric <dim@FreeBSD.org>, Ian Lepore <ian@freebsd.org> Cc: freebsd-arm <freebsd-arm@freebsd.org>, FreeBSD Toolchain <freebsd-toolchain@freebsd.org> Subject: Re: Bug 205663 Clang getting Bus Errors (arm SCLTR Bit[12]==1 context): Reported fixed on llvm's trunk Message-ID: <831D8A96-51D6-4E34-B422-A20857B6769E@dsl-only.net> In-Reply-To: <1452365750.1523.9.camel@freebsd.org> References: <C90F0ABA-3C59-4FE1-AAB4-99F8FF32FB24@dsl-only.net> <CANCZdfoWDg_ZX8zxqRV2-Q6teYf_Ef4f3VKB0fhb0sikcW3hUA@mail.gmail.com> <1452020032.1320.21.camel@freebsd.org> <7EE8F65E-7485-4FA9-A136-F22090DB107F@FreeBSD.org> <92264003-CF0E-4624-A28A-8AFB7C663BFB@dsl-only.net> <39774562-F76E-41E9-85E7-ABE257B013D6@FreeBSD.org> <1452365750.1523.9.camel@freebsd.org>
next in thread | previous in thread | raw e-mail | index | archive | help
On 2016-Jan-9, at 10:55 AM, Ian Lepore <ian@freebsd.org> wrote: >=20 > On Sat, 2016-01-09 at 15:03 +0100, Dimitry Andric wrote: >> On 09 Jan 2016, at 04:46, Mark Millard <markmi@dsl-only.net> wrote: >>>=20 >>> On 2016-Jan-7, at 2:57 PM, Dimitry Andric <dim at FreeBSD.org> >>> wrote: >> ... >>>> FYI, I have added a -mno-movt option for this purpose upstream, >>>> and >>>> imported a newer snapshot into the clang380-import branch. As of >>>> r293384, it now uses the new option spelling for modules, if your >>>> clang >>>> is 3.8.0 or higher. >>>>=20 >>>> -Dimitry >>>=20 >>> I've not been able to get to the point of running clang++ 3.8 on >>> the rpi2 yet: R_ARM_CALL and R_ARM_JUMP24 relocation truncations >>> during the cross build's buildworld interfere. >>=20 >> Yes, this is caused by too large call distances. In other words, the >> clang executable is getting to big to link. Apparently we need to do >> some tricks with -mlongcall to fix this. As I am no arm expert, I >> welcome any patch submissions. :-) >>=20 >> -Dimitry >>=20 >=20 > Here's the patch I got from Andy for the clang380 branch, modified = with > Warner's suggestion to use MACHINE_CPUARCH instead of MACHINE. With > this I can get a working arm world that will build a runnable > helloworld.c (and .cc) on a dreamplug. (I.e., it appears clang 3.8.0 > fixes the problem we had with clang 3.7.x where it wouldn't run at all > on armv4/5 systems). I have not tried compling anything complex yet. >=20 > -- Ian Context: When I build I normally build lldb and the like as well, even = using WITH_CLANG_EXTRAS=3D . In trying to get lldb to link I eventually get to the point that libc++ = is getting relocation truncations. Before getting to that I deal with = /usr/src/usr.bin/clang/lldb/Makefile to cover what is initially reported = during buildworld for lldb relocation truncations. Then with that in = place and retrying I get reports from libc++.a for a couple of the = contained .o files having relocations that are truncated (before it = reports "additional relocation overflows omitted from the output"): /usr/obj/clang/arm.armv6/usr/src/tmp/usr/lib/libc++.a(thread.o) /usr/obj/clang/arm.armv6/usr/src/tmp/usr/lib/libc++.a(locale.o) (Both have messages from multiple places in each .o file.) As far as I can tell for general use -long-calls is going to be needed = for at least some system level .a library content if the .a's are to be = used. Which leaves me wondering if STATIC_CXXFLAGS having -mlong-calls for arm = system libraries fairly generally is appropriate for those intending on = building the arm-native clang toolchain and related material in = buildworld. (STATIC_CFLAGS too?) A significant case analysis of what = happens to currently be too far apart would be fragile as things grow = even more later. This sort of issue may well not be limited to TARGET=3Darm contexts. The detailed libc++.a relocation truncation complaints that I got were: > --- all_subdir_lldb --- > /usr/obj/clang/arm.armv6/usr/src/tmp/usr/lib/libc++.a(thread.o): In = function = `_ZNSt3__16vectorINS_4pairIPNS_18condition_variableEPNS_5mutexEEENS_18__hi= dden_allocatorIS6_EEE21__push_back_slow_pathIS6_EEvOT_': > = /usr/src/lib/libc++/../../contrib/libc++/src/thread.cpp:(.text._ZNSt3__16v= ectorINS_4pairIPNS_18condition_variableEPNS_5mutexEEENS_18__hidden_allocat= orIS6_EEE21__push_back_slow_pathIS6_EEvOT_[_ZNSt3__16vectorINS_4pairIPNS_1= 8condition_variableEPNS_5mutexEEENS_18__hidden_allocatorIS6_EEE21__push_ba= ck_slow_pathIS6_EEvOT_]+0x30): relocation truncated to fit: R_ARM_CALL = against symbol = `std::__1::__vector_base_common<true>::__throw_length_error() const' = defined in = .text._ZNKSt3__120__vector_base_commonILb1EE20__throw_length_errorEv[_ZNKS= t3__120__vector_base_commonILb1EE20__throw_length_errorEv] section in = /usr/obj/clang/arm.armv6/usr/src/usr.bin/clang/lldb/../../../lib/clang/lib= lldbCore/liblldbCore.a(CxaDemangle.o) > /usr/obj/clang/arm.armv6/usr/src/tmp/usr/lib/libc++.a(thread.o): In = function = `_ZNSt3__16vectorIPNS_17__assoc_sub_stateENS_18__hidden_allocatorIS2_EEE21= __push_back_slow_pathIRKS2_EEvOT_': > = /usr/src/lib/libc++/../../contrib/libc++/src/thread.cpp:(.text._ZNSt3__16v= ectorIPNS_17__assoc_sub_stateENS_18__hidden_allocatorIS2_EEE21__push_back_= slow_pathIRKS2_EEvOT_[_ZNSt3__16vectorIPNS_17__assoc_sub_stateENS_18__hidd= en_allocatorIS2_EEE21__push_back_slow_pathIRKS2_EEvOT_]+0x30): = relocation truncated to fit: R_ARM_CALL against symbol = `std::__1::__vector_base_common<true>::__throw_length_error() const' = defined in = .text._ZNKSt3__120__vector_base_commonILb1EE20__throw_length_errorEv[_ZNKS= t3__120__vector_base_commonILb1EE20__throw_length_errorEv] section in = /usr/obj/clang/arm.armv6/usr/src/usr.bin/clang/lldb/../../../lib/clang/lib= lldbCore/liblldbCore.a(CxaDemangle.o) . . . > --- all_subdir_clang --- > /usr/obj/clang/arm.armv6/usr/src/tmp/usr/lib/libc++.a(locale.o): In = function `std::__1::collate_byname<char>::do_compare(char const*, char = const*, char const*, char const*) const': . . . > --- all_subdir_clang --- > = /usr/src/lib/libc++/../../contrib/libc++/src/locale.cpp:(.text+0x81ec): = relocation truncated to fit: R_ARM_CALL against symbol = `std::__1::__basic_string_common<true>::__throw_length_error() const' = defined in = .text._ZNKSt3__121__basic_string_commonILb1EE20__throw_length_errorEv[_ZNK= St3__121__basic_string_commonILb1EE20__throw_length_errorEv] section in = /usr/obj/clang/arm.armv6/usr/src/usr.bin/clang/lldb/../../../lib/clang/lib= lldbCore/liblldbCore.a(CxaDemangle.o) . . . > --- all_subdir_clang --- > = /usr/src/lib/libc++/../../contrib/libc++/src/locale.cpp:(.text+0x82c0): = relocation truncated to fit: R_ARM_CALL against symbol = `std::__1::__basic_string_common<true>::__throw_length_error() const' = defined in = .text._ZNKSt3__121__basic_string_commonILb1EE20__throw_length_errorEv[_ZNK= St3__121__basic_string_commonILb1EE20__throw_length_errorEv] section in = /usr/obj/clang/arm.armv6/usr/src/usr.bin/clang/lldb/../../../lib/clang/lib= lldbCore/liblldbCore.a(CxaDemangle.o) > /usr/obj/clang/arm.armv6/usr/src/tmp/usr/lib/libc++.a(locale.o): In = function `std::__1::collate_byname<char>::do_transform(char const*, char = const*) const': > = /usr/src/lib/libc++/../../contrib/libc++/src/locale.cpp:(.text+0x8430): = relocation truncated to fit: R_ARM_CALL against symbol = `std::__1::__basic_string_common<true>::__throw_length_error() const' = defined in = .text._ZNKSt3__121__basic_string_commonILb1EE20__throw_length_errorEv[_ZNK= St3__121__basic_string_commonILb1EE20__throw_length_errorEv] section in = /usr/obj/clang/arm.armv6/usr/src/usr.bin/clang/lldb/../../../lib/clang/lib= lldbCore/liblldbCore.a(CxaDemangle.o) > /usr/obj/clang/arm.armv6/usr/src/tmp/usr/lib/libc++.a(locale.o): In = function `std::__1::collate_byname<wchar_t>::do_compare(wchar_t const*, = wchar_t const*, wchar_t const*, wchar_t const*) const': > --- all_subdir_clang --- > = /usr/src/lib/libc++/../../contrib/libc++/src/locale.cpp:(.text+0x88a8): = relocation truncated to fit: R_ARM_CALL against symbol = `std::__1::__basic_string_common<true>::__throw_length_error() const' = defined in = .text._ZNKSt3__121__basic_string_commonILb1EE20__throw_length_errorEv[_ZNK= St3__121__basic_string_commonILb1EE20__throw_length_errorEv] section in = /usr/obj/clang/arm.armv6/usr/src/usr.bin/clang/lldb/../../../lib/clang/lib= lldbCore/liblldbCore.a(CxaDemangle.o) > = /usr/src/lib/libc++/../../contrib/libc++/src/locale.cpp:(.text+0x899c): = relocation truncated to fit: R_ARM_CALL against symbol = `std::__1::__basic_string_common<true>::__throw_length_error() const' = defined in = .text._ZNKSt3__121__basic_string_commonILb1EE20__throw_length_errorEv[_ZNK= St3__121__basic_string_commonILb1EE20__throw_length_errorEv] section in = /usr/obj/clang/arm.armv6/usr/src/usr.bin/clang/lldb/../../../lib/clang/lib= lldbCore/liblldbCore.a(CxaDemangle.o) > /usr/obj/clang/arm.armv6/usr/src/tmp/usr/lib/libc++.a(locale.o): In = function `std::__1::collate_byname<wchar_t>::do_transform(wchar_t = const*, wchar_t const*) const': > = /usr/src/lib/libc++/../../contrib/libc++/src/locale.cpp:(.text+0x8b34): = relocation truncated to fit: R_ARM_CALL against symbol = `std::__1::__basic_string_common<true>::__throw_length_error() const' = defined in = .text._ZNKSt3__121__basic_string_commonILb1EE20__throw_length_errorEv[_ZNK= St3__121__basic_string_commonILb1EE20__throw_length_errorEv] section in = /usr/obj/clang/arm.armv6/usr/src/usr.bin/clang/lldb/../../../lib/clang/lib= lldbCore/liblldbCore.a(CxaDemangle.o) > /usr/obj/clang/arm.armv6/usr/src/tmp/usr/lib/libc++.a(locale.o): In = function `std::__1::collate<char>::do_transform(char const*, char = const*) const': > = /usr/src/lib/libc++/../../contrib/libc++/src/locale.cpp:(.text._ZNKSt3__17= collateIcE12do_transformEPKcS3_[_ZNKSt3__17collateIcE12do_transformEPKcS3_= ]+0x34): relocation truncated to fit: R_ARM_CALL against symbol = `std::__1::__basic_string_common<true>::__throw_length_error() const' = defined in = .text._ZNKSt3__121__basic_string_commonILb1EE20__throw_length_errorEv[_ZNK= St3__121__basic_string_commonILb1EE20__throw_length_errorEv] section in = /usr/obj/clang/arm.armv6/usr/src/usr.bin/clang/lldb/../../../lib/clang/lib= lldbCore/liblldbCore.a(CxaDemangle.o) > /usr/obj/clang/arm.armv6/usr/src/tmp/usr/lib/libc++.a(locale.o): In = function `std::__1::collate<wchar_t>::do_transform(wchar_t const*, = wchar_t const*) const': > = /usr/src/lib/libc++/../../contrib/libc++/src/locale.cpp:(.text._ZNKSt3__17= collateIwE12do_transformEPKwS3_[_ZNKSt3__17collateIwE12do_transformEPKwS3_= ]+0x38): relocation truncated to fit: R_ARM_CALL against symbol = `std::__1::__basic_string_common<true>::__throw_length_error() const' = defined in = .text._ZNKSt3__121__basic_string_commonILb1EE20__throw_length_errorEv[_ZNK= St3__121__basic_string_commonILb1EE20__throw_length_errorEv] section in = /usr/obj/clang/arm.armv6/usr/src/usr.bin/clang/lldb/../../../lib/clang/lib= lldbCore/liblldbCore.a(CxaDemangle.o) > /usr/obj/clang/arm.armv6/usr/src/tmp/usr/lib/libc++.a(locale.o): In = function `std::__1::num_put<char, std::__1::ostreambuf_iterator<char, = std::__1::char_traits<char> > = >::do_put(std::__1::ostreambuf_iterator<char, = std::__1::char_traits<char> >, std::__1::ios_base&, char, long) const': > = /usr/src/lib/libc++/../../contrib/libc++/src/locale.cpp:(.text._ZNKSt3__17= num_putIcNS_19ostreambuf_iteratorIcNS_11char_traitsIcEEEEE6do_putES4_RNS_8= ios_baseEcl[_ZNKSt3__17num_putIcNS_19ostreambuf_iteratorIcNS_11char_traits= IcEEEEE6do_putES4_RNS_8ios_baseEcl]+0x16c): additional relocation = overflows omitted from the output Ian's/Andy's original patch is listed below for reference. > Index: lib/clang/clang.lib.mk > =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D > --- lib/clang/clang.lib.mk (revision 293584) > +++ lib/clang/clang.lib.mk (working copy) > @@ -6,4 +6,8 @@ LLVM_SRCS=3D ${.CURDIR}/../../../contrib/llvm >=20 > INTERNALLIB=3D >=20 > +.if ${MACHINE_CPUARCH} =3D=3D "arm" > +STATIC_CXXFLAGS+=3D-mlong-calls > +.endif > + > .include <bsd.lib.mk> > Index: lib/csu/arm/Makefile > =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D > --- lib/csu/arm/Makefile (revision 293584) > +++ lib/csu/arm/Makefile (working copy) > @@ -23,7 +23,7 @@ CLEANFILES+=3D crt1.s gcrt1.s Scrt1.s > # directly compiled to .o files. >=20 > crt1.s: crt1.c > - ${CC} ${CFLAGS} -S -o ${.TARGET} ${.CURDIR}/crt1.c > + ${CC} ${CFLAGS} -mlong-calls -S -o ${.TARGET} ${.CURDIR}/crt1.c > sed ${SED_FIX_NOTE} ${.TARGET} >=20 > crt1.o: crt1.s > @@ -30,7 +30,7 @@ crt1.o: crt1.s > ${CC} ${ACFLAGS} -c -o ${.TARGET} crt1.s >=20 > gcrt1.s: crt1.c > - ${CC} ${CFLAGS} -DGCRT -S -o ${.TARGET} ${.CURDIR}/crt1.c > + ${CC} ${CFLAGS} -mlong-calls -DGCRT -S -o ${.TARGET} = ${.CURDIR}/crt1.c > sed ${SED_FIX_NOTE} ${.TARGET} >=20 > gcrt1.o: gcrt1.s > Index: usr.bin/clang/clang/Makefile > =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D > --- usr.bin/clang/clang/Makefile (revision 293584) > +++ usr.bin/clang/clang/Makefile (working copy) > @@ -11,7 +11,11 @@ SRCS=3D cc1_main.cpp \ >=20 > .if ${MK_SHARED_TOOLCHAIN} =3D=3D "no" > NO_SHARED?=3D yes > + > +.if ${MACHINE_CPUARCH} =3D=3D "arm" > +CFLAGS+=3D-mlong-calls > .endif > +.endif >=20 > LINKS=3D ${BINDIR}/clang ${BINDIR}/clang++ \ > ${BINDIR}/clang ${BINDIR}/clang-cpp >=20
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?831D8A96-51D6-4E34-B422-A20857B6769E>