Re: FreeBSD/powerpc and FreeBSD/powerpcspe toolchain update

Mark Millard via freebsd-ppc <[email protected]>
Newsgroups gmane.os.freebsd.devel.ppc
Message-ID <[email protected]>
[I retried, adjusting src.conf.powerpc-clang-bootstrap.amd64-host to
be lld based this time. It is a different failure: ld rejects the
attempted use of --secure-plt .]

On 2019-Jun-27, at 16:19, Mark Millard <marklmi at yahoo.com> wrote:

> [I used src.conf.powerpc-clang-bootstrap.amd64-host which uses
> WITHOUT_LLD_BOOTSTRAP= and  WITH_BINUTILS_BOOTSTRAP= and so
> LLD was not in use.] 
> 
> On 2019-Jun-27, at 15:03, Mark Millard <marklmi at yahoo.com> wrote:
> 
>> 
>> 
>> On 2019-Jun-27, at 14:53, Mark Millard <marklmi at yahoo.com> wrote:
>> 
>> 
>> 
>>> On 2019-Jun-27, at 12:53, Justin Hibbits <jrh29 at alumni.cwru.edu> wrote:
>>> 
>>>> On Thu, 27 Jun 2019 12:03:05 -0700
>>>> Mark Millard <[email protected]> wrote:
>>>> 
>>>>> On 2019-Jun-24, at 19:40, Justin Hibbits <[email protected]>
>>>>> wrote:
>>>>> 
>>>>>> As of r349351 32-bit powerpc toolchains need to be rebuilt as part
>>>>>> of buildworld, in order to take advantage of the new Secure
>>>>>> Procedure Linkage Table (Secure-PLT) format.  This can be done by
>>>>>> passing "WITHOUT_SYSTEM_TOOLCHAIN=" on the 'make buildworld'
>>>>>> command line.
>>>>>> 
>>>>>> Cross-building should work fine with no changes, as that already
>>>>>> builds a new toolchain.  If building with an external toolchain,
>>>>>> such as gcc8, add 'CFLAGS+= -msecure-plt' to /etc/src.conf to
>>>>>> ensure the new PLT is used, otherwise it will default to BSS-PLT,
>>>>>> which is fully compatible, but not as secure.  There is breakage
>>>>>> intended at all, so please let me know if there are any problems.  
>>>>> 
>>>>> My attempt to amd64->powerpc (32-bit) cross build from/to head
>>>>> -r349444 via system clang and lld got the following. This may not be
>>>>> a recent change.
> 
> 
> Gack: Looking at the src.conf.powerpc-clang-bootstrap.amd64-host
> text I'd originally included but has been dropped later in this
> exchange, there is:
> 
> WITHOUT_SYSTEM_LINKER=
> . . .
> WITHOUT_LLD_BOOTSTRAP=
> WITH_BINUTILS_BOOTSTRAP=
> WITH_ELFTOOLCHAIN_BOOTSTRAP=
> 
> So lld was not in use as I intended: wrong src.conf.* file.
> I did not end up testing what I intended to test.
> 
> So this is actually about ld from WITH_BINUTILS_BOOTSTRAP :
> 
> # /usr/obj/powerpcvtsc_clang/powerpc.powerpc/usr/src/powerpc.powerpc/tmp/usr/bin/ld -v
> GNU ld 2.17.50 [FreeBSD] 2007-07-03
> 
> Sorry for the misdirection.
> 
>> . . .

# uname -apKU
FreeBSD FBSDFSSD 13.0-CURRENT FreeBSD 13.0-CURRENT #22 r349444M: Wed Jun 26 16:00:44 PDT 2019     markmi@FBSDFSSD:/usr/obj/amd64_clang/amd64.amd64/usr/src/amd64.amd64/sys/GENERIC-NODBG  amd64 amd64 1300034 1300034

Is:

QUOTE
SYSTEM_LINKER: Determined that LD=ld matches the source tree.  Not bootstrapping a cross-linker
END QUOTE

a problem for amd64->powerpc (32-bit) cross builds?

The different failing result for actual lld use for head -349444
amd64->powerpc cross build is that it rejects the use of --secure-plt :

# Meta data file /usr/obj/powerpcvtsc_clang/powerpc.powerpc/usr/src/powerpc.powerpc/lib/libc/libc.so.7.full.meta
CMD @echo building shared library libc.so.7
CMD @rm -f libc.so.7 libc.so
CMD cc -target powerpc-unknown-freebsd13.0 \
--sysroot=/usr/obj/powerpcvtsc_clang/powerpc.powerpc/usr/src/powerpc.powerpc/tmp \
-B/usr/obj/powerpcvtsc_clang/powerpc.powerpc/usr/src/powerpc.powerpc/tmp/usr/bin  \
-Wl,--secure-plt -nodefaultlibs -Wl,--version-script=Version.map -Wl,--no-threads   \
-shared -Wl,-x -Wl,--fatal-warnings -Wl,--warn-shared-textrel  \
-o libc.so.7.full -Wl,-soname,libc.so.7  \
`NM='nm' NMFLAGS='' lorder  . . . wmemset.pico |  tsort -q`  -lcompiler_rt  -lssp_nonshared
CWD /usr/obj/powerpcvtsc_clang/powerpc.powerpc/usr/src/powerpc.powerpc/lib/libc
TARGET libc.so.7.full
-- command output --
building shared library libc.so.7
ld: error: unknown argument: --secure-plt
cc: error: linker command failed with exit code 1 (use -v to see invocation)

*** Error code 1

-- filemon acquired metadata --
. . .



Looking at the -Wl,--secure-plt use via:

# cc -### -target powerpc-unknown-freebsd13.0 -Wl,--secure-plt 
FreeBSD clang version 8.0.1 (branches/release_80 363030) (based on LLVM 8.0.1)
Target: powerpc-unknown-freebsd13.0
Thread model: posix
InstalledDir: /usr/bin
 "/usr/bin/ld" "--eh-frame-hdr" "-dynamic-linker" "/libexec/ld-elf.so.1" "--enable-new-dtags" "-m" "elf32ppc_fbsd" "-o" "a.out" "/usr/lib32/crt1.o" "/usr/lib32/crti.o" "/usr/lib32/crtbegin.o" "-L/usr/lib32" "--secure-plt" "-lgcc" "--as-needed" "-lgcc_s" "--no-as-needed" "-lc" "-lgcc" "--as-needed" "-lgcc_s" "--no-as-needed" "/usr/lib32/crtend.o" "/usr/lib32/crtn.o"

Then trying the ld command it reported:

# "/usr/bin/ld" "--eh-frame-hdr" "-dynamic-linker" "/libexec/ld-elf.so.1" "--enable-new-dtags" "-m" "elf32ppc_fbsd" "-o" "a.out" "/usr/lib32/crt1.o" "/usr/lib32/crti.o" "/usr/lib32/crtbegin.o" "-L/usr/lib32" "--secure-plt" "-lgcc" "--as-needed" "-lgcc_s" "--no-as-needed" "-lc" "-lgcc" "--as-needed" "-lgcc_s" "--no-as-needed" "/usr/lib32/crtend.o" "/usr/lib32/crtn.o"
ld: error: unknown argument: --secure-plt



The buildworld log report of the failure looks like:

--- libc.so.7.full ---
ld: error: unknown argument: --secure-plt
cc: error: linker command failed with exit code 1 (use -v to see invocation)
*** [libc.so.7.full] Error code 1

make[4]: stopped in /usr/src/lib/libc
.ERROR_TARGET='libc.so.7.full'
.ERROR_META_FILE='/usr/obj/powerpcvtsc_clang/powerpc.powerpc/usr/src/powerpc.powerpc/lib/libc/libc.so.7.full.meta'
.MAKE.LEVEL='4'
MAKEFILE=''
.MAKE.MODE='meta missing-filemon=yes missing-meta=yes silent=yes verbose'
_ERROR_CMD='@echo building shared library libc.so.7; @rm -f libc.so.7 libc.so; cc -target powerpc-unknown-freebsd13.0 --sysroot=/usr/obj/powerpcvtsc_clang/powerpc.powerpc/usr/src/powerpc.powerpc/tmp -B/usr/obj/powerpcvtsc_clang/powerpc.powerpc/usr/src/powerpc.powerpc/tmp/usr/bin  -Wl,--secure-plt -nodefaultlibs -Wl,--version-script=Version.map -Wl,--no-threads   -shared -Wl,-x -Wl,--fatal-warnings -Wl,--warn-shared-textrel  -o libc.so.7.full -Wl,-soname,libc.so.7  `NM='nm' NMFLAGS='' lorder trivial-vdso_tc.pico
. . .
.CURDIR='/usr/src/lib/libc'
.MAKE='make'
.OBJDIR='/usr/obj/powerpcvtsc_clang/powerpc.powerpc/usr/src/powerpc.powerpc/lib/libc'
.TARGETS='all'
DESTDIR='/usr/obj/powerpcvtsc_clang/powerpc.powerpc/usr/src/powerpc.powerpc/tmp'
LD_LIBRARY_PATH=''
MACHINE='powerpc'
MACHINE_ARCH='powerpc'
MAKEOBJDIRPREFIX=''
MAKESYSPATH='/usr/src/share/mk'
MAKE_VERSION='20181221'
PATH='/usr/obj/powerpcvtsc_clang/powerpc.powerpc/usr/src/powerpc.powerpc/tmp/usr/sbin:/usr/obj/powerpcvtsc_clang/powerpc.powerpc/usr/src/powerpc.powerpc/tmp/usr/bin:/usr/obj/powerpcvtsc_clang/powerpc.powerpc/usr/src/powerpc.powerpc/tmp/legacy/usr/sbin:/usr/obj/powerpcvtsc_clang/powerpc.powerpc/usr/src/powerpc.powerpc/tmp/legacy/usr/bin:/usr/obj/powerpcvtsc_clang/powerpc.powerpc/usr/src/powerpc.powerpc/tmp/legacy/bin::/sbin:/bin:/usr/sbin:/usr/bin'
SRCTOP='/usr/src'
OBJTOP='/usr/obj/powerpcvtsc_clang/powerpc.powerpc/usr/src/powerpc.powerpc'
.MAKE.MAKEFILES='/usr/src/share/mk/sys.mk /usr/src/share/mk/local.sys.env.mk /usr/src/share/mk/src.sys.env.mk
. . .
1 error


This report is based on the following that does use lld:

TO_TYPE=powerpc
#
KERNCONF=GENERICvtsc-NODBG
TARGET=${TO_TYPE}
.if ${.MAKE.LEVEL} == 0
TARGET_ARCH=${TO_TYPE}
.export TARGET_ARCH
.endif
#
WITH_CROSS_COMPILER=
WITH_SYSTEM_COMPILER=
WITH_SYSTEM_LINKER=
#
# llvm's libunwind for 32-bit powerpc:
# Two of its .S files get tons of error reports.
# So avoid llvm's libunwind for now.
#WITHOUT_LLVM_LIBUNWIND=
WITH_LIBCPLUSPLUS=
WITH_LLD_BOOTSTRAP=
WITHOUT_BINUTILS_BOOTSTRAP=
WITH_ELFTOOLCHAIN_BOOTSTRAP=
#Disables avoiding bootstrap: WITHOUT_LLVM_TARGET_ALL=
WITHOUT_LLVM_TARGET_AARCH64=
WITHOUT_LLVM_TARGET_ARM=
WITHOUT_LLVM_TARGET_MIPS=
WITH_LLVM_TARGET_POWERPC=
WITHOUT_LLVM_TARGET_SPARC=
WITHOUT_LLVM_TARGET_X86=
WITH_CLANG_BOOTSTRAP=
WITH_CLANG=
WITH_CLANG_IS_CC=
WITH_CLANG_FULL=
WITH_CLANG_EXTRAS=
WITH_LLD=
WITH_LLD_IS_LD=
WITHOUT_BINTUILS=
# lldb requires missing atomic 8-byte operations for powerpc (non-64)
WITHOUT_LLDB=
#
WITH_BOOT=
WITHOUT_LIB32=
#
LOADER_DEFAULT_INTERP=4th
#
WITHOUT_GCC_BOOTSTRAP=
WITHOUT_GCC=
WITHOUT_GCC_IS_CC=
WITHOUT_GNUCXX=
#
NO_WERROR=
#
# Use WERROR to avoid stopping at the likes of:
# error: implicit conversion from 'int' to 'int8_t' (aka 'signed char') changes value from 128 to -128 [-Werror,-Wconstant-conversion]
WERROR=
MALLOC_PRODUCTION=
#
# Avoid stripping but do not control host -g status as well:
DEBUG_FLAGS+=
#
WITH_REPRODUCIBLE_BUILD=
WITH_DEBUG_FILES=

Note:

--- buildworld ---
make[1]: "/usr/src/Makefile.inc1" line 347: SYSTEM_COMPILER: Determined that CC=cc matches the source tree.  Not bootstrapping a cross-compiler.
make[1]: "/usr/src/Makefile.inc1" line 352: SYSTEM_LINKER: Determined that LD=ld matches the source tree.  Not bootstrapping a cross-linker.



===
Mark Millard
marklmi at yahoo.com
( dsl-only.net went
away in early 2018-Mar)

_______________________________________________
[email protected] mailing list
https://lists.freebsd.org/mailman/listinfo/freebsd-ppc
To unsubscribe, send any mail to "[email protected]"
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.