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 :
>>>> 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.
>>> In an amd64 -> TARGET_ARCH=powerpc64 cross build context 
>>> for FreeBSD -r321371 I got a similar report for the:
>>> /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::ValueObject&,
>>>>>>  lldb_private::Stream&, lldb_private::TypeSummaryOptions const&)) in 
>>>>>> archive /usr/obj/usr/src/lib/clang/liblldb/liblldb.a
>>> part of your report (logfile). The context used
>>> devel/powerpc64-binutils :
>>> # /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.
>>> (lld is not yet  working option for powerpc64 as
>>> far as I know.)
>>> For this part of your report I doubt that anything
>>> that you listed is required for the problem to happen.
>>> In my context the error text was:
>>> --- lldb.full ---
>>> /usr/obj/powerpc64vtsc_clang_altbinutils/powerpc.powerpc64/usr/src/lib/clang/liblldb/liblldb.a(Cocoa.o):
>>>  In function 
>>> `lldb_private::formatters::NSNumberSummaryProvider(lldb_private::ValueObject&,
>>>  lldb_private::Stream&, lldb_private::TypeSummaryOptions const&)':
>>> /usr/src/contrib/llvm/tools/lldb/source/Plugins/Language/ObjC/Cocoa.cpp:(.text._ZN12lldb_private10formatters23NSNumberSummaryProviderERNS_11ValueObjectERNS_6StreamERKNS_18TypeSummaryOptionsE+0x398):
>>>  undefined reference to 
>>> `lldb_private::AppleObjCRuntime::GetFoundationVersion()'
>> Hey Mark,
>> 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.
> 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.
> 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


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=powerpc64 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 
 -B/usr/local/powerpc64-freebsd/bin/ -O2 -pipe 
-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 
-DLLVM_HOST_TRIPLE=\"powerpc64-unknown-freebsd12.0\" -DDEFAULT_SYSROOT=\"\" 
-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=c++11 -fno-exceptions -f
 no-rtti -stdlib=libc++ -Wno-c++11-extensions  -Wl,--gc-sections -o lldb.full  
  -ledit  -lpanel  -lncursesw -lz -lpthread;

llvm commands analogous to binutils commands need not be
involved at all, including no need of lld being involved.

Shawn Webb
Cofounder and Security Engineer

GPG Key ID:          0x6A84658F52456EEE
GPG Key Fingerprint: 2ABA B6BD EF6A F486 BE89  3D9E 6A84 658F 5245 6EEE

freebsd-current@freebsd.org mailing list
To unsubscribe, send any mail to "freebsd-current-unsubscr...@freebsd.org"

Reply via email to