Failed to build rescue with gcc 4.9

Craig Rodrigues rodrigc at FreeBSD.org
Thu Apr 2 15:27:06 UTC 2015


On Sat, Mar 28, 2015 at 2:34 PM, Craig Rodrigues <rodrigc at freebsd.org>
wrote:

> Hi,
>
> The build host VM that I used was FreeBSD 10.1-RELEASE, amd64.
>
> I took this patch for libc++ and applied it to my tree:
>
> http://reviews.llvm.org/D8461
>
> I used this script to build with gcc 4.9:
>
>
> https://github.com/freebsd/freebsd-ci/blob/master/scripts/build/cross-build.sh
>
> Building rescue failed.  You can see the full build log here:
>
>
> https://jenkins.freebsd.org/job/FreeBSD_HEAD_external_toolchain_gcc/26/console
>
> The relevant section seems to be this:
>
> --- rescue ---
>  /usr/local/bin/x86_64-portbld-freebsd10.0-gcc -isystem
>
> /builds/FreeBSD_HEAD_external_toolchain_gcc/obj/builds/FreeBSD_HEAD_external_toolchain_gcc/tmp/usr/include
>
> -L/builds/FreeBSD_HEAD_external_toolchain_gcc/obj/builds/FreeBSD_HEAD_external_toolchain_gcc/tmp/usr/lib
>
> --sysroot=/builds/FreeBSD_HEAD_external_toolchain_gcc/obj/builds/FreeBSD_HEAD_external_toolchain_gcc/tmp
> -B/usr/local/x86_64-freebsd/bin/ -static -o rescue rescue.o cat.lo
> chflags.lo chio.lo chmod.lo cp.lo date.lo dd.lo df.lo echo.lo ed.lo
> expr.lo getfacl.lo hostname.lo kenv.lo kill.lo ln.lo ls.lo mkdir.lo
> mv.lo pkill.lo ps.lo pwd.lo realpath.lo rm.lo rmdir.lo setfacl.lo
> sh.lo sleep.lo stty.lo sync.lo test.lo rcp.lo csh.lo badsect.lo
> camcontrol.lo ccdconfig.lo clri.lo devfs.lo dmesg.lo dump.lo dumpfs.lo
> dumpon.lo fsck.lo fsck_ffs.lo fsck_msdosfs.lo fsdb.lo fsirand.lo
> gbde.lo geom.lo ifconfig.lo init.lo kldconfig.lo kldload.lo kldstat.lo
> kldunload.lo ldconfig.lo md5.lo mdconfig.lo mdmfs.lo mknod.lo
> mount.lo mount_cd9660.lo mount_msdosfs.lo mount_nfs.lo mount_nullfs.lo
> mount_udf.lo mount_unionfs.lo newfs.lo newfs_msdos.lo nos-tun.lo
> ping.lo reboot.lo restore.lo rcorder.lo route.lo routed.lo rtquery.lo
> rtsol.lo savecore.lo spppcontrol.lo swapon.lo sysctl.lo tunefs.lo
> umount.lo atmconfig.lo ping6.lo ipf.lo zfs.lo zpool.lo bsdlabel.lo
> fdisk.lo dhclient.lo head.lo mt.lo nc.lo sed.lo tail.lo tee.lo
> gzip.lo bzip2.lo less.lo xz.lo tar.lo vi.lo id.lo zdb.lo chroot.lo
> chown.lo
>
> /builds/FreeBSD_HEAD_external_toolchain_gcc/obj/builds/FreeBSD_HEAD_external_toolchain_gcc/rescue/rescue/../librescue/exec.o
>
> /builds/FreeBSD_HEAD_external_toolchain_gcc/obj/builds/FreeBSD_HEAD_external_toolchain_gcc/rescue/rescue/../librescue/getusershell.o
>
> /builds/FreeBSD_HEAD_external_toolchain_gcc/obj/builds/FreeBSD_HEAD_external_toolchain_gcc/rescue/rescue/../librescue/login_class.o
>
> /builds/FreeBSD_HEAD_external_toolchain_gcc/obj/builds/FreeBSD_HEAD_external_toolchain_gcc/rescue/rescue/../librescue/popen.o
>
> /builds/FreeBSD_HEAD_external_toolchain_gcc/obj/builds/FreeBSD_HEAD_external_toolchain_gcc/rescue/rescue/../librescue/rcmdsh.o
>
> /builds/FreeBSD_HEAD_external_toolchain_gcc/obj/builds/FreeBSD_HEAD_external_toolchain_gcc/rescue/rescue/../librescue/sysctl.o
>
> /builds/FreeBSD_HEAD_external_toolchain_gcc/obj/builds/FreeBSD_HEAD_external_toolchain_gcc/rescue/rescue/../librescue/system.o
> -lcrypt -ledit -ljail -lkvm -ll -ltermcapw -lutil -lxo -lalias -lcam
> -lncursesw -ldevstat -lipsec -llzma -lavl -lzpool -lzfs_core -lzfs
> -lnvpair -lpthread -luutil -lumem -lgeom -lbsdxml -lkiconv -lmt
> -lsbuf -lufs -lz -lbz2 -larchive -lcrypto -lmd -lm cat.lo: file not
> recognized: File truncated collect2: error: ld returned 1 exit
> status *** [rescue] Error code 1
>
> make[5]: stopped in
>
> /builds/FreeBSD_HEAD_external_toolchain_gcc/obj/builds/FreeBSD_HEAD_external_toolchain_gcc/rescue/rescue
> 1 error
>
>
> I double checked.  cat.lo is not a truncated file.
> # ls -l cat.lo ; file cat.lo
> -rw-r--r--  1 jenkins  wheel  13112 Mar 28 21:17 cat.lo
> cat.lo: ELF 64-bit LSB relocatable, x86-64, version 1 (FreeBSD), stripped
>
> Any ideas?
> --
> Craig
>
>

On Tue, Mar 31, 2015 at 1:41 PM, Dimitry Andric <dim at freebsd.org> wrote:

>
> I'm suspecting this might have something to do with crunchide, or least,
> the copy of crunchide that is run for this:
>
> --- cat.lo ---
> /usr/local/x86_64-freebsd/bin/ld -dc -r -o cat.lo cat_stub.o
> /builds/FreeBSD_HEAD_external_toolchain_gcc/obj/builds/FreeBSD_HEAD_external_toolchain_gcc/rescue/rescue//builds/FreeBSD_HEAD_external_toolchain_gcc/bin/cat/cat.o
> crunchide -k _crunched_cat_stub cat.lo
>
> If I look at my own build logs, it seems to pick the crunchide
> executable in /usr/bin, and Makefile.inc1 does *not* build it during the
> cross-tools stage if ${TARGET_ARCH} is the same as ${MACHINE_ARCH}:
>
> .if ${TARGET_ARCH} != ${MACHINE_ARCH}
> .if ${MK_RESCUE} != "no" || defined(RELEASEDIR)
> _crunchide=     usr.sbin/crunch/crunchide
> .endif
>
> However, this does not explain why my /usr/bin/crunchide seems to not
> screw up cat.lo, while yours does.  As far as I can see, we're both
> building this on a stable/10 amd64 box...
>
> Maybe, as a hack, you can force cross-tools to build crunchide, by
> patching Makefile.inc1 to ignore the arch check, and see what that
> results in?
>
>
Actually, I am building on a 10.1-RELEASE box.

I was able to get this successful build:
https://jenkins.freebsd.org/job/FreeBSD_HEAD_external_toolchain_gcc/38/console

by applying this  patch (the ${TARGET_ARCH} != ${MACHINE_ARCH} checks
seemed wrong to me):

Index: Makefile.inc1
===================================================================
--- Makefile.inc1       (revision 280979)
+++ Makefile.inc1       (working copy)
@@ -1457,12 +1457,9 @@
 # we get done with the earlier stages. It is the last set of tools needed
 # to begin building the target binaries.
 #
-.if ${TARGET_ARCH} != ${MACHINE_ARCH}
 .if ${TARGET_ARCH} == "amd64" || ${TARGET_ARCH} == "i386"
 _btxld=                usr.sbin/btxld
 .endif
-.endif
-.if ${TARGET_ARCH} != ${MACHINE_ARCH}
 .if ${MK_RESCUE} != "no" || defined(RELEASEDIR)
 _crunchide=    usr.sbin/crunch/crunchide
 .endif
@@ -1469,7 +1466,6 @@
 .if ${TARGET_ARCH} == "i386" && defined(RELEASEDIR)
 _kgzip=                usr.sbin/kgzip
 .endif
-.endif

 # If we're given an XAS, don't build binutils.
 .if ${XAS:M/*} == ""


 --
Craig


More information about the freebsd-testing mailing list