Testing the libz size fix in ofwboot.net showed that rebuilding ofwboot
after updating libz sources did not relink ofwboot as it should, imho:
$ cd sys/arch/sparc64/stand
$ make
...
$ touch ../../../lib/libz/crc32.c
$ make
===> bootblk
===> libsa
===> libz
cc -O2 -pipe -g -fno-stack-protector -msoft-float -ffreestanding -MD
-MP -D_LP64 -g -Wa,-Av9a -I/usr/src/sys/arch/sparc64/stand/libz/../../../..
-fno-pie -DSLOW -DSMALL -DNOBYFOUR -DNO_GZIP -I. -D_STANDALONE -DSUN4U -I.
-DDYNAMIC_CRC_TABLE -DBUILDFIXED -c
/usr/src/sys/arch/sparc64/stand/libz/../../../../lib/libz/crc32.c -o crc32.o
building standard z library
ranlib libz.a
===> ofwboot
===> ofwboot.net
===> ofwbootfd
ofwboot/Makefile defines LIBSA and LIBZ as prerequisite for PROG, but the
two former variables are not defined until <bsd.prog.mk> which includes
"../Makefile.inc" which defines them.
It still works because a) libsa and libz are always built before ofwboot,
thus the intended but effectively missing dependency is always there, and
b) make(1) variables inside commands are evaluated lazily at run-time,
while those in targets and prerequisites are evaluated at parse-time:
$ make -C ofwboot -p | grep -C1 ^ofwboot
ofwboot : /usr/lib/crt0.o srt0.o Locore.o alloc.o boot.o
elf64_exec.o arc4.o net.o netif_of.o ofdev.o vers.o diskprobe.o
softraid_sparc64.o strlcpy.o strcmp.o strlcat.o strlen.o ffs.o aes_xts.o
bcrypt_pbkdf.o blowfish.o explicit_bzero.o hmac_sha1.o pkcs5_pbkdf2.o
rijndael.o sha1.o sha2.o softraid.o /usr/lib/libc.a /usr/lib/crtbegin.o
/usr/lib/crtend.o
${LD} -N -Ttext ${RELOC} -e ${ENTRY} -o ${PROG} -nopie
-znorelro ${OBJS} -L${LIBSADIR} ${LIBSA} -L${LIBZDIR} ${LIBZ}
Diff below fixes this, but I doubt this is the way to go:
# make -C ofwboot -p | grep -C1 ^ofwboot
# parent targets: all
ofwboot :
/usr/src/sys/arch/sparc64/stand/ofwboot/../libsa//libsa.a
/usr/src/sys/arch/sparc64/stand/ofwboot/../libz//libz.a /usr/lib/crt0.o srt0.o
Locore.o alloc.o boot.o elf64_exec.o arc4.o net.o netif_of.o ofdev.o vers.o
diskprobe.o softraid_sparc64.o strlcpy.o strcmp.o strlcat.o strlen.o ffs.o
aes_xts.o bcrypt_pbkdf.o blowfish.o explicit_bzero.o hmac_sha1.o pkcs5_pbkdf2.o
rijndael.o sha1.o sha2.o softraid.o /usr/lib/libc.a /usr/lib/crtbegin.o
/usr/lib/crtend.o
${LD} -N -Ttext ${RELOC} -e ${ENTRY} -o ${PROG} -nopie
-znorelro ${OBJS} -L${LIBSADIR} ${LIBSA} -L${LIBZDIR} ${LIBZ}
# touch ../../../lib/libz/crc32.c
# make
===> bootblk
===> libsa
===> libz
cc -O2 -pipe -g -fno-stack-protector -msoft-float -ffreestanding -MD
-MP -D_LP64 -g -Wa,-Av9a -I/usr/src/sys/arch/sparc64/stand/libz/../../../..
-fno-pie -DSLOW -DSMALL -DNOBYFOUR -DNO_GZIP -I. -D_STANDALONE -DSUN4U -I.
-DDYNAMIC_CRC_TABLE -DBUILDFIXED -c
/usr/src/sys/arch/sparc64/stand/libz/../../../../lib/libz/crc32.c -o crc32.o
building standard z library
ranlib libz.a
===> ofwboot
Warning: target
/usr/src/sys/arch/sparc64/stand/ofwboot/../libsa//libsa.a (prerequisite of:
ofwboot) does not have any command (BUG)
Warning: target /usr/src/sys/arch/sparc64/stand/ofwboot/../libz//libz.a
(prerequisite of: ofwboot) does not have any command (BUG)
ld -N -Ttext 100000 -e _start -o ofwboot -nopie -znorelro srt0.o
Locore.o alloc.o boot.o elf64_exec.o arc4.o net.o netif_of.o ofdev.o vers.o
diskprobe.o softraid_sparc64.o strlcpy.o strcmp.o strlcat.o strlen.o ffs.o
aes_xts.o bcrypt_pbkdf.o blowfish.o explicit_bzero.o hmac_sha1.o pkcs5_pbkdf2.o
rijndael.o sha1.o sha2.o softraid.o
-L/usr/src/sys/arch/sparc64/stand/ofwboot/../libsa
/usr/src/sys/arch/sparc64/stand/ofwboot/../libsa/obj/libsa.a
-L/usr/src/sys/arch/sparc64/stand/ofwboot/../libz
/usr/src/sys/arch/sparc64/stand/ofwboot/../libz/obj/libz.a
===> ofwboot.net
Warning: target
/usr/src/sys/arch/sparc64/stand/ofwboot.net/../libsa//libsa.a (prerequisite of:
ofwboot.net) does not have any command (BUG)
Warning: target
/usr/src/sys/arch/sparc64/stand/ofwboot.net/../libz//libz.a (prerequisite of:
ofwboot.net) does not have any command (BUG)
ld -N -Ttext 100000 -e _start -o ofwboot.net -nopie -znorelro srt0.o
Locore.o alloc.o boot.o elf64_exec.o arc4.o net.o netif_of.o ofdev.o vers.o
strlcpy.o strcmp.o strlcat.o strlen.o ffs.o
-L/usr/src/sys/arch/sparc64/stand/ofwboot.net/../libsa
/usr/src/sys/arch/sparc64/stand/ofwboot.net/../libsa/obj/libsa.a
-L/usr/src/sys/arch/sparc64/stand/ofwboot.net/../libz
/usr/src/sys/arch/sparc64/stand/ofwboot.net/../libz/obj/libz.a
===> ofwbootfd
Warning: target
/usr/src/sys/arch/sparc64/stand/ofwbootfd/../libsa//libsa.a (prerequisite of:
ofwbootfd) does not have any command (BUG)
Warning: target
/usr/src/sys/arch/sparc64/stand/ofwbootfd/../libz//libz.a (prerequisite of:
ofwbootfd) does not have any command (BUG)
ld -N -Ttext 100000 -e _start -o ofwbootfd -nopie -znorelro srt0.o
Locore.o alloc.o boot.o elf64_exec.o arc4.o net.o netif_of.o ofdev.o vers.o
strlcpy.o strcmp.o strlcat.o strlen.o ffs.o
-L/usr/src/sys/arch/sparc64/stand/ofwbootfd/../libsa
/usr/src/sys/arch/sparc64/stand/ofwbootfd/../libsa/obj/libsa.a
-L/usr/src/sys/arch/sparc64/stand/ofwbootfd/../libz
/usr/src/sys/arch/sparc64/stand/ofwbootfd/../libz/obj/libz.a
Any betters ideas?
Can this make warning be fixed or ignored?
sys/arch/amd64/stand/pxeboot for example doesn't have this problem since it
handles the libz dependency itself, i.e. no sys/arch/amd64/stand/libz/.
Index: sys/arch/sparc64/stand/ofwboot/Makefile
===================================================================
RCS file: /cvs/src/sys/arch/sparc64/stand/ofwboot/Makefile,v
retrieving revision 1.27
diff -u -p -r1.27 Makefile
--- sys/arch/sparc64/stand/ofwboot/Makefile 29 Oct 2019 02:55:52 -0000
1.27
+++ sys/arch/sparc64/stand/ofwboot/Makefile 11 Oct 2022 20:20:00 -0000
@@ -73,6 +73,7 @@ CPPFLAGS+= -DSOFTRAID
@([ -h machine ] || ln -s ${.CURDIR}/../../include machine)
.endif
+.include "../Makefile.inc"
${PROG}: ${OBJS} ${LIBSA} ${LIBZ}
${LD} -N -Ttext ${RELOC} -e ${ENTRY} -o ${PROG} -nopie -znorelro \
${OBJS} -L${LIBSADIR} ${LIBSA} \