When I tried replicating Craig Rodrigues's efforts at building head
with the amd64-xtoolchain-gcc package, I noticed that during the build32
stage it still uses the base system ld and objcopy:
[...] --- lib/csu/i386-elf__L --- ld -m elf_i386_fbsd -Y P,/usr/obj/home/dim/head/lib32/usr/lib32 -o crt1.o -r crt1_s.o crt1_c.o [...] --- lib/csu/i386-elf__L --- objcopy --localize-symbol _start1 crt1.o [...] --- lib/csu/i386-elf__L --- ld -m elf_i386_fbsd -Y P,/usr/obj/home/dim/head/lib32/usr/lib32 -o Scrt1.o -r crt1_s.o Scrt1_c.o [...] --- lib/csu/i386-elf__L --- objcopy --localize-symbol _start1 Scrt1.o
And a bunch more of those. I went through the various Makefiles I could
find, replacing literal 'objcopy' with ${OBJCOPY}, which fixes the case
for objcopy.
Also, I changed LD=${LD} and AS=${AS} to use their X variants in the
definition of LIB32WMAKEFLAGS in Makefile.inc1, and added
OBJCOPY=${XOBJCOPY} to the list.
Together, these changes should ensure that the cross tools are always
used instead of the base system tools.