[Bug 217648] [lld 4.0.0] WITH_LLD_IS_LD Results

bugzilla-noreply at freebsd.org bugzilla-noreply at freebsd.org
Wed Mar 8 21:36:17 UTC 2017


https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=217648

            Bug ID: 217648
           Summary: [lld 4.0.0] WITH_LLD_IS_LD Results
           Product: Base System
           Version: CURRENT
          Hardware: Any
                OS: Any
            Status: New
          Severity: Affects Only Me
          Priority: ---
         Component: bin
          Assignee: freebsd-bugs at FreeBSD.org
          Reporter: shawn.webb at hardenedbsd.org

Ed Maste asked me to open a bug ticket with results for WITH_LLD_IS_LD testing.
So far, I've found two issues.

1. FreeBSD: Cross building arm64 world on amd64 fails

/usr/obj/arm64.aarch64/scratch/fbsd/tmp/usr/bin/ld: error:
sha512-armv8.pico:(.text+0x10C8): can't create dynamic relocation
R_AARCH64_PREL64 against symbol 'OPENSSL_armcap_P' defined in armcap.pico
/usr/obj/arm64.aarch64/scratch/fbsd/tmp/usr/bin/ld: error:
sha256-armv8.pico:(.text+0xF48): can't create dynamic relocation
R_AARCH64_PREL64 against symbol 'OPENSSL_armcap_P' defined in armcap.pico
/usr/obj/arm64.aarch64/scratch/fbsd/tmp/usr/bin/ld: error:
sha1-armv8.pico:(.text+0x1240): can't create dynamic relocation
R_AARCH64_PREL64 against symbol 'OPENSSL_armcap_P' defined in armcap.pico

2. HardenedBSD: This problem may exist in FreeBSD, but since I can't get past
the OpenSSL linking error above, I can't confirm. It looks like clang/lld is
trying to link with crt1 when linking the EFI loader. Even if I pass in
-nostdlib and -nostartfiles, lld still tries to link with crt1:

cc -target aarch64-unknown-freebsd12.0
--sysroot=/usr/obj/arm64.aarch64/usr/src/tmp -B/usr -O2 -pipe -DHARDENEDBSD
-DSKEIN_LOOP=111 -I/usr/src/sys/boot/efi/loader/../../arm64/libarm64
-msoft-float -mgeneral-regs-only -I/usr/src/sys/boot/efi/loader
-I/usr/src/sys/boot/efi/loader/arch/arm64
-I/usr/src/sys/boot/efi/loader/../include
-I/usr/src/sys/boot/efi/loader/../include/arm64
-I/usr/src/sys/boot/efi/loader/../../../contrib/dev/acpica/include
-I/usr/src/sys/boot/efi/loader/../../..
-I/usr/src/sys/boot/efi/loader/../../i386/libi386
-I/usr/src/sys/boot/efi/loader/../../zfs
-I/usr/src/sys/boot/efi/loader/../../../cddl/boot/zfs
-I/usr/src/sys/boot/efi/loader/../../../crypto/skein -DEFI_ZFS_BOOT -DNO_PCI
-DEFI -DSMBIOS_SERIAL_NUMBERS -DBOOT_FORTH
-I/usr/src/sys/boot/efi/loader/../../ficl
-I/usr/src/sys/boot/efi/loader/../../ficl/aarch64
-I/usr/src/sys/boot/efi/loader/../../fdt
-I/usr/obj/arm64.aarch64/usr/src/sys/boot/efi/loader/../../fdt
-DLOADER_FDT_SUPPORT -DLOADER_DISK_SUPPORT -DLOADER_GPT_SUPPORT
-DLOADER_MBR_SUPPORT -I/usr/src/sys/boot/ficl -I/usr/src/sys/boot/ficl/aarch64
-I/usr/src/sys/boot/ficl/../common -I/usr/src/sys/boot/efi/loader/../../common
-ffreestanding -Wformat -msoft-float -fshort-wchar -fPIC -g -DHAVE_LIBRESSL
-std=gnu99 -Wsystem-headers -Werror -Wall -Wno-format-y2k -W
-Wno-unused-parameter -Wstrict-prototypes -Wmissing-prototypes -Wpointer-arith
-Wno-uninitialized -Wno-pointer-sign -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 -Qunused-arguments -v
-o loader.sym.full autoload.o bootinfo.o conf.o copy.o devicename.o main.o
self_reloc.o smbios.o vers.o zfs.o skein.o skein_block.o exec.o start.o cache.o
boot.o commands.o console.o devopen.o interp.o interp_backslash.o
interp_parse.o ls.o misc.o module.o panic.o load_elf64.o reloc_elf64.o disk.o
part.o crc32.o bcache.o interp_forth.o 
/usr/obj/arm64.aarch64/usr/src/sys/boot/efi/loader/../../ficl/libficl.a
/usr/obj/arm64.aarch64/usr/src/sys/boot/efi/loader/../libefi/libefi.a
/usr/obj/arm64.aarch64/usr/src/sys/boot/efi/loader/../../fdt/libfdt.a
/usr/obj/arm64.aarch64/usr/src/sys/boot/efi/loader/../../efi/fdt/libefi_fdt.a
/usr/obj/arm64.aarch64/usr/src/sys/boot/efi/loader/../../../../lib/libstand/libstand.a
FreeBSD clang version 4.0.0 (branches/release_40 296509) (based on LLVM 4.0.0)
Target: aarch64-unknown-freebsd12.0
Thread model: posix
InstalledDir: /usr/obj/arm64.aarch64/usr/src/tmp/usr/bin
 "/usr/obj/arm64.aarch64/usr/src/tmp/usr/bin/ld"
--sysroot=/usr/obj/arm64.aarch64/usr/src/tmp --eh-frame-hdr -dynamic-linker
/libexec/ld-elf.so.1 --enable-new-dtags -o loader.sym.full
/usr/obj/arm64.aarch64/usr/src/tmp/usr/lib/crt1.o
/usr/obj/arm64.aarch64/usr/src/tmp/usr/lib/crti.o
/usr/obj/arm64.aarch64/usr/src/tmp/usr/lib/crtbegin.o
-L/usr/obj/arm64.aarch64/usr/src/tmp/usr/lib autoload.o bootinfo.o conf.o
copy.o devicename.o main.o self_reloc.o smbios.o vers.o zfs.o skein.o
skein_block.o exec.o start.o cache.o boot.o commands.o console.o devopen.o
interp.o interp_backslash.o interp_parse.o ls.o misc.o module.o panic.o
load_elf64.o reloc_elf64.o disk.o part.o crc32.o bcache.o interp_forth.o
/usr/obj/arm64.aarch64/usr/src/sys/boot/efi/loader/../../ficl/libficl.a
/usr/obj/arm64.aarch64/usr/src/sys/boot/efi/loader/../libefi/libefi.a
/usr/obj/arm64.aarch64/usr/src/sys/boot/efi/loader/../../fdt/libfdt.a
/usr/obj/arm64.aarch64/usr/src/sys/boot/efi/loader/../../efi/fdt/libefi_fdt.a
/usr/obj/arm64.aarch64/usr/src/sys/boot/efi/loader/../../../../lib/libstand/libstand.a
-lgcc --as-needed -lgcc_s --no-as-needed -lc -lgcc --as-needed -lgcc_s
--no-as-needed /usr/obj/arm64.aarch64/usr/src/tmp/usr/lib/crtend.o
/usr/obj/arm64.aarch64/usr/src/tmp/usr/lib/crtn.o
/usr/obj/arm64.aarch64/usr/src/tmp/usr/bin/ld: error:
/usr/src/sys/boot/efi/loader/arch/arm64/start.S:143: duplicate symbol '_start'
/usr/obj/arm64.aarch64/usr/src/tmp/usr/bin/ld: error:
/usr/src/lib/csu/aarch64/crt1.c:(.text+0x0): previous definition was here
cc: error: linker command failed with exit code 1 (use -v to see invocation)
*** Error code 1

Stop.
make[2]: stopped in /usr/src/sys/boot/efi/loader

-- 
You are receiving this mail because:
You are the assignee for the bug.


More information about the freebsd-bugs mailing list