objcopy: open objcopy failed: Text file busy

From: Paul Mather <paul_at_gromit.dlib.vt.edu>
Date: Fri, 23 Sep 2022 14:44:54 UTC
For a while now, when I do a "make buildworld" on -STABLE, if the /usr/obj directory is not empty I will have the build error out with "objcopy: open objcopy failed: Text file busy" part way through.  It isn't ultimately fatal, because I can just run the buildworld again and it will pick up where it left off.  As I say, it doesn't do this if /usr/obj is empty before running buildworld.  It would be nice to have the incremental build complete all in one go.

Is this a problem anyone else is seeing, or is it some peculiar misconfiguration at my end?

Here is my /etc/src-env.conf:

===== /etc/src-env.conf =====
WITH_META_MODE=yes
=====

And this is my /etc/src.conf:

===== /etc/src.conf =====
WITH_SYSTEM_COMPILER=yes
WITHOUT_CROSS_COMPILER=yes
WITHOUT_LLVM_TARGET_ALL=yes
WITHOUT_TESTS=yes
WITHOUT_ATM=yes
WITHOUT_BLUETOOTH=yes
WITHOUT_CXGBETOOL=yes
WITHOUT_FDT=yes
WITHOUT_FLOPPY=yes
WITHOUT_HTML=yes
WITHOUT_HYPERV=yes
WITHOUT_IPFILTER=yes
WITHOUT_LOADER_OFW=yes
WITHOUT_LOADER_UBOOT=yes
WITHOUT_MLX5TOOL=yes
WITHOUT_NDIS=yes
WITHOUT_NVME=yes
WITHOUT_PORTSNAP=yes
WITHOUT_PPP=yes
WITHOUT_PROFILE=yes
WITHOUT_ROUTED=yes
WITHOUT_SENDMAIL=yes
WITHOUT_TALK=yes
WITHOUT_WIRELESS=yes
WITHOUT_WPA_SUPPLICANT_EAPOL=yes
=====

Finally, here is the error I got today in updating my 13.1-STABLE (stable/13-n252248-adbcdbee602d) system:

=====
[[...]]
--- all_subdir_usr.bin/clang ---
Building /usr/obj/usr/src/amd64.amd64/usr.bin/clang/lld/ELF/Target.o
--- all_subdir_usr.bin/objcopy ---
Building /usr/obj/usr/src/amd64.amd64/usr.bin/objcopy/segments.o
Building /usr/obj/usr/src/amd64.amd64/usr.bin/objcopy/symbols.o
Building /usr/obj/usr/src/amd64.amd64/usr.bin/objcopy/objcopy.full
Building /usr/obj/usr/src/amd64.amd64/usr.bin/objcopy/objcopy.1
Building /usr/obj/usr/src/amd64.amd64/usr.bin/objcopy/strip.1.gz
Building /usr/obj/usr/src/amd64.amd64/usr.bin/objcopy/objcopy.debug
Building /usr/obj/usr/src/amd64.amd64/usr.bin/objcopy/objcopy.1.gz
Building /usr/obj/usr/src/amd64.amd64/usr.bin/objcopy/objcopy
--- objcopy ---
objcopy: open objcopy failed: Text file busy
*** [objcopy] Error code 1
make[4]: *** objcopy removed

make[4]: stopped in /usr/src/usr.bin/objcopy                                                        .ERROR_TARGET='objcopy'
.ERROR_META_FILE='/usr/obj/usr/src/amd64.amd64/usr.bin/objcopy/objcopy.meta'
.MAKE.LEVEL='4'
MAKEFILE=''
.MAKE.MODE='meta missing-filemon=yes missing-meta=yes silent=yes verbose'
_ERROR_CMD='objcopy --strip-debug --add-gnu-debuglink=objcopy.debug  objcopy.full objcopy;'
.CURDIR='/usr/src/usr.bin/objcopy'                                                                  
.MAKE='make'
.OBJDIR='/usr/obj/usr/src/amd64.amd64/usr.bin/objcopy'
.TARGETS='all'
DESTDIR='/usr/obj/usr/src/amd64.amd64/tmp'
LD_LIBRARY_PATH=''
MACHINE='amd64'
MACHINE_ARCH='amd64'
MAKEOBJDIRPREFIX=''
MAKESYSPATH='/usr/src/share/mk'
MAKE_VERSION='20220208'
PATH='/usr/obj/usr/src/amd64.amd64/tmp/bin:/usr/obj/usr/src/amd64.amd64/tmp/usr/sbin:/usr/obj/usr/src/amd64.amd64/tmp/usr/bin:/usr/obj/usr/src/amd64.amd64/tmp/legacy/usr/sbin:/usr/obj/usr/src/amd64.amd64/tmp/legacy/usr/bin:/usr/obj/usr/src/amd64.amd64/tmp/legacy/bin:/usr/obj/usr/src/amd64.amd64/tmp/legacy/usr/libexec::/sbin:/bin:/usr/sbin:/usr/bin'
SRCTOP='/usr/src'
OBJTOP='/usr/obj/usr/src/amd64.amd64'                                                      [13/1968]
.MAKE.MAKEFILES='/usr/src/share/mk/sys.mk /usr/src/share/mk/local.sys.env.mk /usr/src/share/mk/src.sys.env.mk /etc/src-env.conf /usr/src/share/mk/bsd.mkopt.mk /usr/src/share/mk/src.sys.obj.mk /usr/src/share/mk/auto.obj.mk /usr/src/share/mk/bsd.suffixes.mk /etc/make.conf /usr/src/share/mk/local.sys.mk /usr/src/share/mk/src.sys.mk /etc/src.conf /usr/src/usr.bin/objcopy/Makefile /usr/src/share/mk/src.opts.mk /usr/src/share/mk/bsd.own.mk /usr/src/share/mk/bsd.opts.mk /usr/src/share/mk/bsd.cpu.mk /usr/src/share/mk/bsd.compiler.mk /usr/src/share/mk/bsd.linker.mk /usr/src/share/mk/bsd.prog.mk /usr/src/share/mk/bsd.init.mk /usr/src/share/mk/local.init.mk /usr/src/share/mk/src.init.mk /usr/src/usr.bin/objcopy/../Makefile.inc /usr/src/share/mk/bsd.libnames.mk /usr/src/share/mk/src.libnames.mk /usr/src/share/mk/bsd.nls.mk /usr/src/share/mk/bsd.confs.mk /usr/src/share/mk/bsd.files.mk /usr/src/share/mk/bsd.dirs.mk /usr/src/share/mk/bsd.incs.mk /usr/src/share/mk/bsd.links.mk /usr/src/share/mk/bsd.man.mk /usr/src/share/mk/bsd.dep.mk /usr/src/share/mk/bsd.clang-analyze.mk /usr/src/share/mk/bsd.obj.mk /usr/src/share/mk/bsd.subdir.mk /usr/src/share/mk/bsd.sys.mk /dev/null'.PATH='. /usr/src/usr.bin/objcopy /usr/src/contrib/elftoolchain/elfcopy'
1 error

make[4]: stopped in /usr/src/usr.bin/objcopy
.ERROR_TARGET='objcopy'
.ERROR_META_FILE='/usr/obj/usr/src/amd64.amd64/usr.bin/objcopy/objcopy.meta'
.MAKE.LEVEL='4'
MAKEFILE=''
.MAKE.MODE='meta missing-filemon=yes missing-meta=yes silent=yes verbose'
_ERROR_CMD='objcopy --strip-debug --add-gnu-debuglink=objcopy.debug  objcopy.full objcopy;'
.CURDIR='/usr/src/usr.bin/objcopy'
.MAKE='make'
.OBJDIR='/usr/obj/usr/src/amd64.amd64/usr.bin/objcopy'
.TARGETS='all'
DESTDIR='/usr/obj/usr/src/amd64.amd64/tmp'
LD_LIBRARY_PATH=''
MACHINE='amd64'
MACHINE_ARCH='amd64'
MAKEOBJDIRPREFIX=''
MAKESYSPATH='/usr/src/share/mk'
MAKE_VERSION='20220208'
PATH='/usr/obj/usr/src/amd64.amd64/tmp/bin:/usr/obj/usr/src/amd64.amd64/tmp/usr/sbin:/usr/obj/usr/src/amd64.amd64/tmp/usr/bin:/usr/obj/usr/src/amd64.amd64/tmp/legacy/usr/sbin:/usr/obj/usr/src/amd64.amd64/tmp/legacy/usr/bin:/usr/obj/usr/src/amd64.amd64/tmp/legacy/bin:/usr/obj/usr/src/amd64.amd64/tmp/legacy/usr/libexec::/sbin:/bin:/usr/sbin:/usr/bin'
SRCTOP='/usr/src'
OBJTOP='/usr/obj/usr/src/amd64.amd64'
.MAKE.MAKEFILES='/usr/src/share/mk/sys.mk /usr/src/share/mk/local.sys.env.mk /usr/src/share/mk/src.sys.env.mk /etc/src-env.conf /usr/src/share/mk/bsd.mkopt.mk /usr/src/share/mk/src.sys.obj.mk /usr/src/share/mk/auto.obj.mk /usr/src/share/mk/bsd.suffixes.mk /etc/make.conf /usr/src/share/mk/local.sys.mk /usr/src/share/mk/src.sys.mk /etc/src.conf /usr/src/usr.bin/objcopy/Makefile /usr/src/share/mk/src.opts.mk /usr/src/share/mk/bsd.own.mk /usr/src/share/mk/bsd.opts.mk /usr/src/share/mk/bsd.cpu.mk /usr/src/share/mk/bsd.compiler.mk /usr/src/share/mk/bsd.linker.mk /usr/src/share/mk/bsd.prog.mk /usr/src/share/mk/bsd.init.mk /usr/src/share/mk/local.init.mk /usr/src/share/mk/src.init.mk /usr/src/usr.bin/objcopy/../Makefile.inc /usr/src/share/mk/bsd.libnames.mk /usr/src/share/mk/src.libnames.mk /usr/src/share/mk/bsd.nls.mk /usr/src/share/mk/bsd.confs.mk /usr/src/share/mk/bsd.files.mk /usr/src/share/mk/bsd.dirs.mk /usr/src/share/mk/bsd.incs.mk /usr/src/share/mk/bsd.links.mk /usr/src/share/mk/bsd.man.mk /usr/src/share/mk/bsd.dep.mk /usr/src/share/mk/bsd.clang-analyze.mk /usr/src/share/mk/bsd.obj.mk /usr/src/share/mk/bsd.subdir.mk /usr/src/share/mk/bsd.sys.mk /dev/null'
.PATH='. /usr/src/usr.bin/objcopy /usr/src/contrib/elftoolchain/elfcopy'

make[3]: stopped in /usr/src/usr.bin
--- all_subdir_usr.bin/clang ---

make[4]: stopped in /usr/src/usr.bin/clang
--- all_subdir_usr.bin/readelf ---

make[3]: stopped in /usr/src/usr.bin
--- all_subdir_usr.bin/clang ---

make[3]: stopped in /usr/src/usr.bin

make[2]: stopped in /usr/src

make[1]: stopped in /usr/src

make: stopped in /usr/src
=====

Note: I am running "make -j8 buildworld" when building world.

Cheers,

Paul.