Date: Sun, 23 Jul 2017 19:56:24 -0700 From: Mark Millard <markmi@dsl-only.net> To: Shawn Webb <shawn.webb@hardenedbsd.org> Cc: FreeBSD Current <freebsd-current@freebsd.org>, Dimitry Andric <dim@FreeBSD.org> Subject: Re: HEADS-UP: Merged llvm/clang 5.0.0 into -CURRENT (as of r321369) Message-ID: <D114BD31-85D8-4604-AD49-2AB7C3729CC3@dsl-only.net> In-Reply-To: <20170724011613.radyrjpsaqwjfc6t@mutt-hbsd> References: <CBE9BADF-CE6D-4317-9868-945A0FDB65BE@dsl-only.net> <20170723233447.3qqb7sbonlhirwt5@mutt-hbsd> <20170724011613.radyrjpsaqwjfc6t@mutt-hbsd>
next in thread | previous in thread | raw e-mail | index | archive | help
On 2017-Jul-23, at 6:16 PM, Shawn Webb <shawn.webb at hardenedbsd.org> = wrote: > On Sun, Jul 23, 2017 at 07:34:47PM -0400, Shawn Webb wrote: >> On Sun, Jul 23, 2017 at 04:13:18PM -0700, Mark Millard wrote: >>> Shawn Webb shawn.webb at hardenedbsd.org wrote on >>> Sat Jul 22 15:33:14 UTC 2017 : >>>=20 >>>> I haven't nailed down whether it's SafeStack, CFI, or using lld as = the >>>> default linker, but it looks like we in HardenedBSD are getting an >>>> undefined symbol during buildworld. >>>=20 >>> In an amd64 -> TARGET_ARCH=3Dpowerpc64 cross build context=20 >>> for FreeBSD -r321371 I got a similar report for the: >>>=20 >>> /usr/obj/usr/src/tmp/usr/bin/ld: error: undefined symbol: = lldb_private::AppleObjCRuntime::GetFoundationVersion() >>>>>> referenced by = /usr/src/contrib/llvm/tools/lldb/source/Plugins/Language/ObjC/Cocoa.cpp >>>>>> = Cocoa.o:(lldb_private::formatters::NSNumberSummaryProvider(lldb_private::V= alueObject&, lldb_private::Stream&, lldb_private::TypeSummaryOptions = const&)) in archive /usr/obj/usr/src/lib/clang/liblldb/liblldb.a >>>=20 >>> part of your report (logfile). The context used >>> devel/powerpc64-binutils : >>>=20 >>> # /usr/local/powerpc64-freebsd/bin/ld --version >>> GNU ld (GNU Binutils) 2.28 >>> Copyright (C) 2017 Free Software Foundation, Inc. >>> This program is free software; you may redistribute it under the = terms of >>> the GNU General Public License version 3 or (at your option) a later = version. >>> This program has absolutely no warranty. >>>=20 >>> (lld is not yet working option for powerpc64 as >>> far as I know.) >>>=20 >>> For this part of your report I doubt that anything >>> that you listed is required for the problem to happen. >>>=20 >>> In my context the error text was: >>>=20 >>> --- lldb.full --- >>> = /usr/obj/powerpc64vtsc_clang_altbinutils/powerpc.powerpc64/usr/src/lib/cla= ng/liblldb/liblldb.a(Cocoa.o): In function = `lldb_private::formatters::NSNumberSummaryProvider(lldb_private::ValueObje= ct&, lldb_private::Stream&, lldb_private::TypeSummaryOptions const&)': >>> = /usr/src/contrib/llvm/tools/lldb/source/Plugins/Language/ObjC/Cocoa.cpp:(.= text._ZN12lldb_private10formatters23NSNumberSummaryProviderERNS_11ValueObj= ectERNS_6StreamERKNS_18TypeSummaryOptionsE+0x398): undefined reference = to `lldb_private::AppleObjCRuntime::GetFoundationVersion()' >>=20 >> Hey Mark, >>=20 >> I wasn't doing a cross-build, but rather a native build for amd64. = I'm >> getting errors again. In fact, I'm getting the same error you just >> posted above. I have no clue why the error's happening. That you're >> also getting the error shows that the issue isn't specific to >> HardenedBSD at the very least. >=20 > I've figured out how to fully reproduce. The following assumes world > still is at clang/llvm 4.0. The following also assumes the source tree > is at /usr/src and is latest FreeBSD HEAD. And MAKEOBJDIRPREFIX is = unset > or left as default. Native build on amd64. >=20 > 1. Set ld.lld as the linker: > a. rm /usr/bin/ld > b. ln -s ld.lld /usr/bin/ld > c. Verify: `ld -version` should show: > LLD 4.0.0 (FreeBSD 297347) (compatible with GNU linkers) > 2. Ensure the object tree is clean: > a. rm -rf /usr/obj/usr/src > 3. Build world: > a. make -sj$(sysctl -n hw.ncpu) buildworld > 4. Relax, grab a drink, eat some Skittles > 5. Come back to buildworld failing to link lldb.full in > usr.bin/clang/lldb FYI: This may be sufficient but it is not necessary for the: error: undefined symbol: = lldb_private::AppleObjCRuntime::GetFoundationVersion() type of message, at least for some TARGET_ARCH 's. (I've not seen the = other undefined symbols yet in my activities so I make no claims for them.) My powerpc64 example was using ld V2.28 (and other binutils) from devel/powerpc64-binutils (/usr/local/powerpc64-freebsd/bin/ld and such), not lld. (lld does not work overall for powerpc64: it is not even an option for TARGET_ARCH=3Dpowerpc64 last I knew. Nor does the older type of system ld work overall for powerpc64.) So -B/usr/local/powerpc64-freebsd/bin/ was in use in the c++ command that ran the linker: c++ -target powerpc64-unknown-freebsd12.0 = --sysroot=3D/usr/obj/powerpc64vtsc_clang_altbinutils/powerpc.powerpc64/usr= /src/tmp -B/usr/local/powerpc64-freebsd/bin/ -O2 -pipe = -I/usr/src/contrib/llvm/tools/lldb/include = -I/usr/src/contrib/llvm/tools/clang/include -DCLANG_ENABLE_ARCMT = -DCLANG_ENABLE_STATIC_ANALYZER -I/usr/src/lib/clang/include = -I/usr/src/contrib/llvm/include -DLLVM_BUILD_GLOBAL_ISEL = -D__STDC_LIMIT_MACROS -D__STDC_CONSTANT_MACROS = -DLLVM_DEFAULT_TARGET_TRIPLE=3D\"powerpc64-unknown-freebsd12.0\" = -DLLVM_HOST_TRIPLE=3D\"powerpc64-unknown-freebsd12.0\" = -DDEFAULT_SYSROOT=3D\"\" -ffunction-sections -fdata-sections -g = -fstack-protector-strong -Wno-empty-body -Wno-string-plus-int = -Wno-unused-const-variable -Wno-tautological-compare -Wno-unused-value = -Wno-parentheses-equality -Wno-unused-function -Wno-enum-conversion = -Wno-unused-local-typedef -Wno-address-of-packed-member -Wno-switch = -Wno-switch-enum -Wno-knr-promoted-parameter -Wno-parentheses = -Qunused-arguments -std=3Dc++11 -fno-exceptions -fno-rtti -stdlib=3Dlibc++= -Wno-c++11-extensions -Wl,--gc-sections -o lldb.full Driver.o = /usr/obj/powerpc64vtsc_clang_altbinutils/powerpc.powerpc64/usr/src/lib/cla= ng/liblldb/liblldb.a = /usr/obj/powerpc64vtsc_clang_altbinutils/powerpc.powerpc64/usr/src/lib/cla= ng/libclang/libclang.a = /usr/obj/powerpc64vtsc_clang_altbinutils/powerpc.powerpc64/usr/src/lib/cla= ng/libllvm/libllvm.a -ledit -lpanel -lncursesw -lz -lpthread; llvm commands analogous to binutils commands need not be involved at all, including no need of lld being involved. --=20 Shawn Webb Cofounder and Security Engineer HardenedBSD GPG Key ID: 0x6A84658F52456EEE GPG Key Fingerprint: 2ABA B6BD EF6A F486 BE89 3D9E 6A84 658F 5245 6EEE
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?D114BD31-85D8-4604-AD49-2AB7C3729CC3>