We've had the linkkit components in the tree for a while, but it has
taken nearly 20 rounds between rpe/tb/myself to get the last few bits
finished.  So that the link kit is cleanly used at reboot, but also
fits in with the practices kernel developers follow.

Here are the remaining pieces.

1) gap.o is now created using a ld.script.  gap.link is created with a
   shell script.  There is a horrible dance required with gapdummy.o
   on some architectures, because binutils input language isn't expressive
   enough to create .o files with the correct ABI, so by linking it
   against a dummy .o with the right ABI, it gains the correct ABI.

2) The trap instructions acting as FILL in the gap have been expanded
   to 4-bytes, since some linker variations do a strange thing of packing
   2 bytes at a time in some sections.

3) The Makefile.* files were getting too nastily divergent, so config(8)
   now helps by creating the various bits..

4) the install target has been cleaned up, so that we can reuse it for
   the relink case...

5) If you "make install" a kernel, the link kit is updated.  Any generic.tgz
   file is deleted, since the compile dir is newer.

6) At snapshot buid time however, it is more convenient to install a
   generic.tgz file.

7) /etc/rc knows how to handle either of these two cases at boot.  It uses
   the targets "newbsd" and "newinstall", which specifically avoid relying
   on src code targets and only use .o file targets.

(config(8) was modified because reaching this point on multiple
architectures was EXCEEEDINGLY PAINFUL.  I am desperately trying to
avoid Makefile.* divergence)

So how does this work in action?

1. install.
   -> kernels will relink each time
2. upgrade
   -> even if it was disabled, kernels will relink each time again
3. make build, reboot without new kernel
   -> kernel is rebuild using older link kit
4. make a snapshot, reboot
   -> a compile.tgz is installed.
   -> at boot, linkkit extracted from compile.tgz, rebuilds next time
5. developer compiles kernel, and uses install target
   # make
   ...
   # make install
   -> kernel installed, /var/db/kernel.SHA256 updated
   -> linkkit is updated along with kernel install
6. developer compiles kernel, and uses "cp obj/bsd /bsd"
   -> at reboot time, /var/db/kernel.SHA256 *mismatches*, and no
   relink occurs
7. developer wants to head back to regular build
   -> use step 5

This is in snapshots, and I will probably commit it soon.  Undecided if
it is worth extracting pieces.

Future work should be to see if we can build a fresh kernel at
install/upgrade time, for that "every computer is unique" feel.

Index: sys/conf/makegap.sh
===================================================================
RCS file: /cvs/src/sys/conf/makegap.sh,v
retrieving revision 1.7
diff -u -p -u -r1.7 makegap.sh
--- sys/conf/makegap.sh 5 Jun 2017 17:47:33 -0000       1.7
+++ sys/conf/makegap.sh 21 Jun 2017 16:12:42 -0000
@@ -1,32 +1,62 @@
 #!/bin/sh -
 
-PADBYTE=$1
+umask 007
 
-cat << __EOF__
-#include <machine/param.h>
-#include <machine/asm.h>
-
-       .text
-       .balign PAGE_SIZE, $PADBYTE
-       .space  $RANDOM, $PADBYTE
-       .balign PAGE_SIZE, $PADBYTE
-
-       .globl  endboot
-endboot:
-       .space  PAGE_SIZE, $PADBYTE
-       .space  $RANDOM % PAGE_SIZE, $PADBYTE
-       .balign 16, $PADBYTE
-
-       /*
-        * Randomly bias future data, bss, and rodata objects,
-        * does not help for objects in locore0.S though
-         */
-       .data
-       .space  $RANDOM % PAGE_SIZE, $PADBYTE
-
-       .section .bss
-       .space  $RANDOM % PAGE_SIZE
-
-       .section .rodata
-       .space  $RANDOM % PAGE_SIZE, $PADBYTE
+PAGE_SIZE=`sysctl -n hw.pagesize`
+PAD=$1
+GAPDUMMY=$2
+
+RANDOM1=$((RANDOM % (3 * PAGE_SIZE)))
+RANDOM2=$((RANDOM % PAGE_SIZE))
+RANDOM3=$((RANDOM % PAGE_SIZE))
+RANDOM4=$((RANDOM % PAGE_SIZE))
+RANDOM5=$((RANDOM % PAGE_SIZE))
+
+cat > gap.link << __EOF__
+
+PHDRS {
+       text PT_LOAD FILEHDR PHDRS;
+       rodata PT_LOAD;
+       data PT_LOAD;
+       bss PT_LOAD;
+}
+
+SECTIONS {
+       .text : ALIGN($PAGE_SIZE) {
+               LONG($PAD);
+               . += 1 + $RANDOM1;
+               . = ALIGN($PAGE_SIZE);
+               endboot = .;
+               PROVIDE (endboot = .);
+               . = ALIGN($PAGE_SIZE);
+               . += $RANDOM2;
+               . = ALIGN(16);
+               *(.text .text.*)
+       } :text =$PAD
+
+       .rodata : {
+               LONG($PAD);
+               . += $RANDOM3;
+               . = ALIGN(16);
+               *(.rodata .rodata.*)
+       } :rodata =$PAD
+
+       .data : {
+               LONG($PAD);
+               . = . + $RANDOM4;       /* fragment of page */
+               . = ALIGN(16);
+               *(.data .data.*)
+       } :data =$PAD
+
+       .bss : {
+               . = . + $RANDOM5;       /* fragment of page */
+               . = ALIGN(16);
+               *(.bss .bss.*)
+       } :bss
+
+       note.ABI-tag 0 : { *(.note.ABI-tag) }
+       .MIPS.options : { *(.MIPS.options) }
+}
 __EOF__
+
+ld -r gap.link $GAPDUMMY -o gap.o
Index: sys/arch/alpha/conf/Makefile.alpha
===================================================================
RCS file: /cvs/src/sys/arch/alpha/conf/Makefile.alpha,v
retrieving revision 1.101
diff -u -p -u -r1.101 Makefile.alpha
--- sys/arch/alpha/conf/Makefile.alpha  13 Jun 2017 16:40:00 -0000      1.101
+++ sys/arch/alpha/conf/Makefile.alpha  21 Jun 2017 16:40:07 -0000
@@ -93,12 +93,6 @@ LINKFLAGS+=  -S
 
 %LOAD
 
-newbsd:
-       ${SYSTEM_LD_HEAD}
-       ${SYSTEM_LD} swapgeneric.o
-       ${SYSTEM_LD_TAIL}
-       mv -f newbsd bsd
-
 # cc's -MD puts the source and output paths in the dependency file;
 # since those are temp files here we need to fix it up.  It also
 # puts the file in /tmp, so we use -MF to put it in the current
@@ -127,19 +121,19 @@ ioconf.o: ioconf.c
 ld.script: ${_machdir}/conf/ld.script
        cp ${_machdir}/conf/ld.script $@
 
+makegap.sh: $S/conf/makegap.sh
+       cp $S/conf/makegap.sh $@
+
+gap.o: Makefile makegap.sh
+       sh makegap.sh 0x00000000
+
 vers.o: ${SYSTEM_DEP:Ngap.o} ${SYSTEM_SWAP_DEP}
        sh $S/conf/newvers.sh
        ${CC} ${CFLAGS} ${CPPFLAGS} ${PROF} -c vers.c
 
-gap.S: ${SYSTEM_SWAP_DEP} Makefile
-       umask 007; sh $S/conf/makegap.sh 0x00 > gap.S
-
-gap.o: gap.S
-       umask 007; ${CC} ${AFLAGS} ${CPPFLAGS} ${PROF} -c gap.S
-
 clean:
        rm -f *bsd *bsd.gdb *.[dio] [a-z]*.s assym.* ${DB_STRUCTINFO} \
-           gap.S lorder param.c
+           gap.link ld.script lorder makegap.sh param.c
 
 cleandir: clean
        rm -f Makefile *.h ioconf.c options machine ${_mach} vers.c
@@ -154,16 +148,12 @@ db_structinfo.h: $S/ddb/db_structinfo.c 
 locore0.o: ${_machdir}/${_mach}/locore0.S assym.h
 locore.o: ${_machdir}/${_mach}/locore.s assym.h
 
-# The install target can be redefined by putting a
-# install-kernel-${MACHINE_NAME} target into /etc/mk.conf
-MACHINE_NAME!=  uname -n
-install: install-kernel-${MACHINE_NAME}
-.if !target(install-kernel-${MACHINE_NAME}})
-install-kernel-${MACHINE_NAME}:
+newinstall:
        cmp -s bsd /bsd || ln -f /bsd /obsd
-       umask 077; cp bsd /nbsd
-       mv /nbsd /bsd
-.endif
+       umask 077 && cp bsd /nbsd && mv /nbsd /bsd && \
+           sha256 -h /var/db/kernel.SHA256 /bsd
+
+install: update-link newinstall
 
 # pull in the dependency information
 .if !empty(DB_STRUCTINFO) && !exists(${DB_STRUCTINFO})
Index: sys/arch/amd64/conf/Makefile.amd64
===================================================================
RCS file: /cvs/src/sys/arch/amd64/conf/Makefile.amd64,v
retrieving revision 1.84
diff -u -p -u -r1.84 Makefile.amd64
--- sys/arch/amd64/conf/Makefile.amd64  13 Jun 2017 16:40:01 -0000      1.84
+++ sys/arch/amd64/conf/Makefile.amd64  21 Jun 2017 16:40:05 -0000
@@ -96,12 +96,6 @@ LINKFLAGS+=  -S
 
 %LOAD
 
-newbsd:
-       ${SYSTEM_LD_HEAD}
-       ${SYSTEM_LD} swapgeneric.o
-       ${SYSTEM_LD_TAIL}
-       mv -f newbsd bsd
-
 # cc's -MD puts the source and output paths in the dependency file;
 # since those are temp files here we need to fix it up.  It also
 # puts the file in /tmp, so we use -MF to put it in the current
@@ -130,19 +124,19 @@ ioconf.o: ioconf.c
 ld.script: ${_machdir}/conf/ld.script
        cp ${_machdir}/conf/ld.script $@
 
+makegap.sh: $S/conf/makegap.sh
+       cp $S/conf/makegap.sh $@
+
+gap.o: Makefile makegap.sh
+       sh makegap.sh 0xcccccccc
+
 vers.o: ${SYSTEM_DEP:Ngap.o} ${SYSTEM_SWAP_DEP}
        sh $S/conf/newvers.sh
        ${CC} ${CFLAGS} ${CPPFLAGS} ${PROF} -c vers.c
 
-gap.S: ${SYSTEM_SWAP_DEP} Makefile
-       umask 007; sh $S/conf/makegap.sh 0xcc > gap.S
-
-gap.o: gap.S
-       umask 007; ${CC} ${AFLAGS} ${CPPFLAGS} ${PROF} -c gap.S
-
 clean:
        rm -f *bsd *bsd.gdb *.[dio] [a-z]*.s assym.* ${DB_STRUCTINFO} \
-           gap.S lorder param.c
+           gap.link ld.script lorder makegap.sh param.c
 
 cleandir: clean
        rm -f Makefile *.h ioconf.c options machine ${_mach} vers.c
@@ -158,16 +152,12 @@ locore0.o: ${_machdir}/${_mach}/locore0.
 locore.o mutex.o vector.o copy.o spl.o: assym.h
 mptramp.o acpi_wakecode.o vmm_support.o: assym.h
 
-# The install target can be redefined by putting a
-# install-kernel-${MACHINE_NAME} target into /etc/mk.conf
-MACHINE_NAME!=  uname -n
-install: install-kernel-${MACHINE_NAME}
-.if !target(install-kernel-${MACHINE_NAME}})
-install-kernel-${MACHINE_NAME}:
+newinstall:
        cmp -s bsd /bsd || ln -f /bsd /obsd
-       umask 077; cp bsd /nbsd
-       mv /nbsd /bsd
-.endif
+       umask 077 && cp bsd /nbsd && mv /nbsd /bsd && \
+           sha256 -h /var/db/kernel.SHA256 /bsd
+
+install: update-link newinstall
 
 # pull in the dependency information
 .if !empty(DB_STRUCTINFO) && !exists(${DB_STRUCTINFO})
Index: sys/arch/arm64/conf/Makefile.arm64
===================================================================
RCS file: /cvs/src/sys/arch/arm64/conf/Makefile.arm64,v
retrieving revision 1.14
diff -u -p -u -r1.14 Makefile.arm64
--- sys/arch/arm64/conf/Makefile.arm64  13 Jun 2017 16:40:01 -0000      1.14
+++ sys/arch/arm64/conf/Makefile.arm64  21 Jun 2017 16:23:53 -0000
@@ -94,12 +94,6 @@ LINKFLAGS+=  -S
 
 %LOAD
 
-newbsd:
-       ${SYSTEM_LD_HEAD}
-       ${SYSTEM_LD} swapgeneric.o
-       ${SYSTEM_LD_TAIL}
-       mv -f newbsd bsd
-
 # cc's -MD puts the source and output paths in the dependency file;
 # since those are temp files here we need to fix it up.  It also
 # puts the file in /tmp, so we use -MF to put it in the current
@@ -130,19 +124,23 @@ ld.script: ${_archdir}/conf/kern.ldscrip
            sed -e 's/@KERNEL_BASE_PHYS@/${KERNEL_BASE_PHYS}/' \
            -e 's/@KERNEL_BASE_VIRT@/${KERNEL_BASE_VIRT}/' > ld.script
 
+gapdummy.o:
+       echo 'const char gapdummy;' > gapdummy.c
+       ${CC} -c ${CFLAGS} ${CPPFLAGS} gapdummy.c -o $@
+
+makegap.sh: $S/conf/makegap.sh
+       cp $S/conf/makegap.sh $@
+
+gap.o: Makefile makegap.sh gapdummy.o
+       sh makegap.sh 0xd4d4d4d4 gapdummy.o
+
 vers.o: ${SYSTEM_DEP:Ngap.o} ${SYSTEM_SWAP_DEP}
        sh $S/conf/newvers.sh
        ${CC} ${CFLAGS} ${CPPFLAGS} ${PROF} -c vers.c
 
-gap.S: ${SYSTEM_SWAP_DEP} Makefile
-       umask 007; sh $S/conf/makegap.sh 0xd4 > gap.S
-
-gap.o: gap.S
-       umask 007; ${CC} ${AFLAGS} ${CPPFLAGS} ${PROF} -c gap.S
-
 clean:
        rm -f *bsd *bsd.gdb *.[dio] [a-z]*.s assym.* ${DB_STRUCTINFO} \
-           gap.S lorder param.c
+           gap.link ld.script lorder makegap.sh param.c
 
 cleandir: clean
        rm -f Makefile *.h ioconf.c options machine ${_mach} vers.c
@@ -159,16 +157,12 @@ in_cksum_arm.o fiq_subr.o bcopyinout.o c
 vectors.o cpuswitch.o exception.o bcopy_page.o irq_dispatch.o support.o: 
assym.h
 locore.o: assym.h
 
-# The install target can be redefined by putting a
-# install-kernel-${MACHINE_NAME} target into /etc/mk.conf
-MACHINE_NAME!=  uname -n
-install: install-kernel-${MACHINE_NAME}
-.if !target(install-kernel-${MACHINE_NAME}})
-install-kernel-${MACHINE_NAME}:
+newinstall:
        cmp -s bsd /bsd || ln -f /bsd /obsd
-       umask 077; cp bsd /nbsd
-       mv /nbsd /bsd
-.endif
+       umask 077 && cp bsd /nbsd && mv /nbsd /bsd && \
+           sha256 -h /var/db/kernel.SHA256 /bsd
+
+install: update-link newinstall
 
 # pull in the dependency information
 .if !empty(DB_STRUCTINFO) && !exists(${DB_STRUCTINFO})
Index: sys/arch/armv7/conf/Makefile.armv7
===================================================================
RCS file: /cvs/src/sys/arch/armv7/conf/Makefile.armv7,v
retrieving revision 1.27
diff -u -p -u -r1.27 Makefile.armv7
--- sys/arch/armv7/conf/Makefile.armv7  14 Jun 2017 13:12:49 -0000      1.27
+++ sys/arch/armv7/conf/Makefile.armv7  21 Jun 2017 16:40:00 -0000
@@ -91,12 +91,6 @@ LINKFLAGS+=  -S
 
 %LOAD
 
-newbsd:
-       ${SYSTEM_LD_HEAD}
-       ${SYSTEM_LD} swapgeneric.o
-       ${SYSTEM_LD_TAIL}
-       mv -f newbsd bsd
-
 # cc's -MD puts the source and output paths in the dependency file;
 # since those are temp files here we need to fix it up.  It also
 # puts the file in /tmp, so we use -MF to put it in the current
@@ -128,19 +122,23 @@ ld.script: ${_archdir}/conf/ldscript.hea
            -e 's/@KERNEL_BASE_VIRT@/${KERNEL_BASE_VIRT}/' \
            -e 's/(KERNEL_BASE_phys)/(KERNEL_BASE_virt)/' > ld.script
 
+gapdummy.o:
+       echo 'const char gapdummy;' > gapdummy.c
+       ${CC} -c ${CFLAGS} ${CPPFLAGS} gapdummy.c -o $@
+
+makegap.sh: Makefile $S/conf/makegap.sh
+       cp $S/conf/makegap.sh $@
+
+gap.o: Makefile makegap.sh gapdummy.o
+       sh makegap.sh 0xd4d4d4d4 gapdummy.o
+
 vers.o: ${SYSTEM_DEP:Ngap.o} ${SYSTEM_SWAP_DEP}
        sh $S/conf/newvers.sh
        ${CC} ${CFLAGS} ${CPPFLAGS} ${PROF} -c vers.c
 
-gap.S: ${SYSTEM_SWAP_DEP} Makefile
-       umask 007; sh $S/conf/makegap.sh 0xd4 > gap.S
-
-gap.o: gap.S
-       umask 007; ${CC} ${AFLAGS} ${CPPFLAGS} ${PROF} -c gap.S
-
 clean:
        rm -f *bsd *bsd.gdb *.[dio] [a-z]*.s assym.* ${DB_STRUCTINFO} \
-           gap.S lorder param.c
+           gap.link ld.script lorder makegap.sh param.c
 
 cleandir: clean
        rm -f Makefile *.h ioconf.c options machine ${_mach} vers.c
@@ -157,16 +155,12 @@ in_cksum_arm.o fiq_subr.o bcopyinout.o c
 vectors.o cpuswitch7.o exception.o bcopy_page.o irq_dispatch.o: assym.h
 ${_mach}_start.o locore.o: assym.h
 
-# The install target can be redefined by putting a
-# install-kernel-${MACHINE_NAME} target into /etc/mk.conf
-MACHINE_NAME!=  uname -n
-install: install-kernel-${MACHINE_NAME}
-.if !target(install-kernel-${MACHINE_NAME}})
-install-kernel-${MACHINE_NAME}:
+newinstall:
        cmp -s bsd /bsd || ln -f /bsd /obsd
-       umask 077; cp bsd /nbsd
-       mv /nbsd /bsd
-.endif
+       umask 077 && cp bsd /nbsd && mv /nbsd /bsd && \
+           sha256 -h /var/db/kernel.SHA256 /bsd
+
+install: update-link newinstall
 
 # pull in the dependency information
 .if !empty(DB_STRUCTINFO) && !exists(${DB_STRUCTINFO})
Index: sys/arch/hppa/conf/Makefile.hppa
===================================================================
RCS file: /cvs/src/sys/arch/hppa/conf/Makefile.hppa,v
retrieving revision 1.95
diff -u -p -u -r1.95 Makefile.hppa
--- sys/arch/hppa/conf/Makefile.hppa    13 Jun 2017 16:40:01 -0000      1.95
+++ sys/arch/hppa/conf/Makefile.hppa    21 Jun 2017 16:24:45 -0000
@@ -101,12 +101,6 @@ LINKFLAGS+=        -S
 
 %LOAD
 
-newbsd:
-       ${SYSTEM_LD_HEAD}
-       ${SYSTEM_LD} swapgeneric.o
-       ${SYSTEM_LD_TAIL}
-       mv -f newbsd bsd
-
 # cc's -MD puts the source and output paths in the dependency file;
 # since those are temp files here we need to fix it up.  It also
 # puts the file in /tmp, so we use -MF to put it in the current
@@ -135,19 +129,19 @@ ioconf.o: ioconf.c
 ld.script: ${_machdir}/conf/ld.script
        cp ${_machdir}/conf/ld.script $@
 
+makegap.sh: $S/conf/makegap.sh
+       cp $S/conf/makegap.sh $@
+
+gap.o: Makefile makegap.sh
+       sh makegap.sh 0xcccccccc
+
 vers.o: ${SYSTEM_DEP:Ngap.o} ${SYSTEM_SWAP_DEP}
        sh $S/conf/newvers.sh
        ${CC} ${CFLAGS} ${CPPFLAGS} ${PROF} -c vers.c
 
-gap.S: ${SYSTEM_SWAP_DEP} Makefile
-       umask 007; sh $S/conf/makegap.sh 0xcc > gap.S
-
-gap.o: gap.S
-       umask 007; ${CC} ${AFLAGS} ${CPPFLAGS} ${PROF} -c gap.S
-
 clean:
        rm -f *bsd *bsd.gdb *.[dio] [a-z]*.s assym.* ${DB_STRUCTINFO} \
-           gap.S lorder param.c
+           gap.link ld.script lorder makegap.sh param.c
 
 cleandir: clean
        rm -f Makefile *.h ioconf.c options machine ${_mach} vers.c
@@ -163,16 +157,12 @@ locore0.o: ${_machdir}/${_mach}/locore0.
 locore.o: ${_machdir}/${_mach}/locore.S assym.h
 fpemu.o spcopy.o: assym.h
 
-# The install target can be redefined by putting a
-# install-kernel-${MACHINE_NAME} target into /etc/mk.conf
-MACHINE_NAME!=  uname -n
-install: install-kernel-${MACHINE_NAME}
-.if !target(install-kernel-${MACHINE_NAME}})
-install-kernel-${MACHINE_NAME}:
+newinstall:
        cmp -s bsd /bsd || ln -f /bsd /obsd
-       umask 077; cp bsd /nbsd
-       mv /nbsd /bsd
-.endif
+       umask 077 && cp bsd /nbsd && mv /nbsd /bsd && \
+           sha256 -h /var/db/kernel.SHA256 /bsd
+
+install: update-link newinstall
 
 # pull in the dependency information
 .if !empty(DB_STRUCTINFO) && !exists(${DB_STRUCTINFO})
Index: sys/arch/i386/conf/Makefile.i386
===================================================================
RCS file: /cvs/src/sys/arch/i386/conf/Makefile.i386,v
retrieving revision 1.110
diff -u -p -u -r1.110 Makefile.i386
--- sys/arch/i386/conf/Makefile.i386    13 Jun 2017 16:40:01 -0000      1.110
+++ sys/arch/i386/conf/Makefile.i386    21 Jun 2017 16:39:57 -0000
@@ -97,12 +97,6 @@ LINKFLAGS+=  -S
 
 %LOAD
 
-newbsd:
-       ${SYSTEM_LD_HEAD}
-       ${SYSTEM_LD} swapgeneric.o
-       ${SYSTEM_LD_TAIL}
-       mv -f newbsd bsd
-
 # cc's -MD puts the source and output paths in the dependency file;
 # since those are temp files here we need to fix it up.  It also
 # puts the file in /tmp, so we use -MF to put it in the current
@@ -131,19 +125,19 @@ ioconf.o: ioconf.c
 ld.script: ${_machdir}/conf/ld.script
        cp ${_machdir}/conf/ld.script $@
 
+makegap.sh: $S/conf/makegap.sh
+       cp $S/conf/makegap.sh $@
+
+gap.o: Makefile makegap.sh
+       sh makegap.sh 0xcccccccc
+
 vers.o: ${SYSTEM_DEP:Ngap.o} ${SYSTEM_SWAP_DEP}
        sh $S/conf/newvers.sh
        ${CC} ${CFLAGS} ${CPPFLAGS} ${PROF} -c vers.c
 
-gap.S: ${SYSTEM_SWAP_DEP} Makefile
-       umask 007; sh $S/conf/makegap.sh 0xcc > gap.S
-
-gap.o: gap.S
-       umask 007; ${CC} ${AFLAGS} ${CPPFLAGS} ${PROF} -c gap.S
-
 clean:
        rm -f *bsd *bsd.gdb *.[dio] [a-z]*.s assym.* ${DB_STRUCTINFO} \
-           gap.S lorder param.c
+           gap.link ld.script lorder makegap.sh param.c
 
 cleandir: clean
        rm -f Makefile *.h ioconf.c options machine ${_mach} vers.c
@@ -159,16 +153,12 @@ locore0.o: ${_machdir}/${_mach}/locore0.
 locore.o mutex.o in_cksum.o mptramp.o: assym.h
 kvm86call.o acpi_wakecode.o vmm_support.o: assym.h
 
-# The install target can be redefined by putting a
-# install-kernel-${MACHINE_NAME} target into /etc/mk.conf
-MACHINE_NAME!=  uname -n
-install: install-kernel-${MACHINE_NAME}
-.if !target(install-kernel-${MACHINE_NAME}})
-install-kernel-${MACHINE_NAME}:
+newinstall:
        cmp -s bsd /bsd || ln -f /bsd /obsd
-       umask 077; cp bsd /nbsd
-       mv /nbsd /bsd
-.endif
+       umask 077 && cp bsd /nbsd && mv /nbsd /bsd && \
+           sha256 -h /var/db/kernel.SHA256 /bsd
+
+install: update-link newinstall
 
 # pull in the dependency information
 .if !empty(DB_STRUCTINFO) && !exists(${DB_STRUCTINFO})
Index: sys/arch/landisk/conf/Makefile.landisk
===================================================================
RCS file: /cvs/src/sys/arch/landisk/conf/Makefile.landisk,v
retrieving revision 1.67
diff -u -p -u -r1.67 Makefile.landisk
--- sys/arch/landisk/conf/Makefile.landisk      13 Jun 2017 16:40:01 -0000      
1.67
+++ sys/arch/landisk/conf/Makefile.landisk      21 Jun 2017 16:36:17 -0000
@@ -93,12 +93,6 @@ LINKFLAGS+=  -S
 
 %LOAD
 
-newbsd:
-       ${SYSTEM_LD_HEAD}
-       ${SYSTEM_LD} swapgeneric.o
-       ${SYSTEM_LD_TAIL}
-       mv -f newbsd bsd
-
 # cc's -MD puts the source and output paths in the dependency file;
 # since those are temp files here we need to fix it up.  It also
 # puts the file in /tmp, so we use -MF to put it in the current
@@ -127,19 +121,19 @@ ioconf.o: ioconf.c
 ld.script: ${_machdir}/conf/ld.script
        cp ${_machdir}/conf/ld.script $@
 
+makegap.sh: $S/conf/makegap.sh
+       cp $S/conf/makegap.sh $@
+
+gap.o: Makefile makegap.sh
+       sh makegap.sh 0xc3c3c3c3
+
 vers.o: ${SYSTEM_DEP:Ngap.o} ${SYSTEM_SWAP_DEP}
        sh $S/conf/newvers.sh
        ${CC} ${CFLAGS} ${CPPFLAGS} ${PROF} -c vers.c
 
-gap.S: ${SYSTEM_SWAP_DEP} Makefile
-       umask 007; sh $S/conf/makegap.sh 0xc3 > gap.S
-
-gap.o: gap.S
-       umask 007; ${CC} ${AFLAGS} ${CPPFLAGS} ${PROF} -c gap.S
-
 clean:
        rm -f *bsd *bsd.gdb *.[dio] [a-z]*.s assym.* ${DB_STRUCTINFO} \
-           gap.S lorder param.c
+           gap.link ld.script lorder makegap.sh param.c
 
 cleandir: clean
        rm -f Makefile *.h ioconf.c options machine ${_mach} vers.c
@@ -155,16 +149,12 @@ locore.o: ${_machdir}/${_mach}/locore.S 
 locore0.o: ${_machdir}/${_mach}/locore0.S assym.h
 locore_subr.o vectors.o in_cksum.o: assym.h
 
-# The install target can be redefined by putting a
-# install-kernel-${MACHINE_NAME} target into /etc/mk.conf
-MACHINE_NAME!=  uname -n
-install: install-kernel-${MACHINE_NAME}
-.if !target(install-kernel-${MACHINE_NAME}})
-install-kernel-${MACHINE_NAME}:
+newinstall:
        cmp -s bsd /bsd || ln -f /bsd /obsd
-       umask 077; cp bsd /nbsd
-       mv /nbsd /bsd
-.endif
+       umask 077 && cp bsd /nbsd && mv /nbsd /bsd && \
+           sha256 -h /var/db/kernel.SHA256 /bsd
+
+install: update-link newinstall
 
 # pull in the dependency information
 .if !empty(DB_STRUCTINFO) && !exists(${DB_STRUCTINFO})
Index: sys/arch/loongson/conf/Makefile.loongson
===================================================================
RCS file: /cvs/src/sys/arch/loongson/conf/Makefile.loongson,v
retrieving revision 1.60
diff -u -p -u -r1.60 Makefile.loongson
--- sys/arch/loongson/conf/Makefile.loongson    13 Jun 2017 16:40:01 -0000      
1.60
+++ sys/arch/loongson/conf/Makefile.loongson    21 Jun 2017 16:22:59 -0000
@@ -98,12 +98,6 @@ LINKFLAGS+=  -S
 
 %LOAD
 
-newbsd:
-       ${SYSTEM_LD_HEAD}
-       ${SYSTEM_LD} swapgeneric.o
-       ${SYSTEM_LD_TAIL}
-       mv -f newbsd bsd
-
 # cc's -MD puts the source and output paths in the dependency file;
 # since those are temp files here we need to fix it up.  It also
 # puts the file in /tmp, so we use -MF to put it in the current
@@ -132,19 +126,23 @@ ioconf.o: ioconf.c
 ld.script: ${_machdir}/conf/ld.script
        cp ${_machdir}/conf/ld.script $@
 
+gapdummy.o:
+       echo 'const char gapdummy;' > gapdummy.c
+       ${CC} -c ${CFLAGS} ${CPPFLAGS} gapdummy.c -o $@
+
+makegap.sh: Makefile $S/conf/makegap.sh
+       cp $S/conf/makegap.sh $@
+
+gap.o: Makefile makegap.sh gapdummy.o
+       sh makegap.sh 0xefefefef gapdummy.o
+
 vers.o: ${SYSTEM_DEP:Ngap.o} ${SYSTEM_SWAP_DEP}
        sh $S/conf/newvers.sh
        ${CC} ${CFLAGS} ${CPPFLAGS} ${PROF} -c vers.c
 
-gap.S: ${SYSTEM_SWAP_DEP} Makefile $S/conf/makegap.sh
-       umask 007; sh $S/conf/makegap.sh 0xef > gap.S
-
-gap.o: gap.S
-       umask 007; ${CC} ${AFLAGS} ${CPPFLAGS} ${PROF} -c gap.S
-
 clean:
        rm -f *bsd *bsd.gdb *.[dio] [a-z]*.s assym.* ${DB_STRUCTINFO} \
-           gap.S lorder param.c
+           gap.link ld.script lorder makegap.sh param.c
 
 cleandir: clean
        rm -f Makefile *.h ioconf.c options machine ${_mach} vers.c
@@ -165,16 +163,12 @@ context.o cp0access.o exception.o locore
 lcore_access.o lcore_ddb.o lcore_float.o tlbhandler.o: assym.h
 pmon32.o: assym.h
 
-# The install target can be redefined by putting a
-# install-kernel-${MACHINE_NAME} target into /etc/mk.conf
-MACHINE_NAME!=  uname -n
-install: install-kernel-${MACHINE_NAME}
-.if !target(install-kernel-${MACHINE_NAME}})
-install-kernel-${MACHINE_NAME}:
+newinstall:
        cmp -s bsd /bsd || ln -f /bsd /obsd
-       umask 077; cp bsd /nbsd
-       mv /nbsd /bsd
-.endif
+       umask 077 && cp bsd /nbsd && mv /nbsd /bsd && \
+           sha256 -h /var/db/kernel.SHA256 /bsd
+
+install: update-link newinstall
 
 # pull in the dependency information
 .if !empty(DB_STRUCTINFO) && !exists(${DB_STRUCTINFO})
Index: sys/arch/luna88k/conf/Makefile.luna88k
===================================================================
RCS file: /cvs/src/sys/arch/luna88k/conf/Makefile.luna88k,v
retrieving revision 1.70
diff -u -p -u -r1.70 Makefile.luna88k
--- sys/arch/luna88k/conf/Makefile.luna88k      11 Jun 2017 22:51:21 -0000      
1.70
+++ sys/arch/luna88k/conf/Makefile.luna88k      21 Jun 2017 04:31:00 -0000
@@ -120,12 +120,16 @@ ioconf.o: ioconf.c
 ld.script: ${_machdir}/conf/ld.script
        cp ${_machdir}/conf/ld.script $@
 
+makegap.sh: $S/conf/makegap.sh
+       cp $S/conf/makegap.sh $@
+
 vers.o: ${SYSTEM_DEP:Ngap.o} ${SYSTEM_SWAP_DEP}
        sh $S/conf/newvers.sh
        ${CC} ${CFLAGS} ${CPPFLAGS} ${PROF} -c vers.c
 
 clean:
-       rm -f *bsd *bsd.gdb *.[dio] [a-z]*.s assym.* ${DB_STRUCTINFO} param.c
+       rm -f *bsd *bsd.gdb *.[dio] [a-z]*.s assym.* ${DB_STRUCTINFO} \
+           gap.link ld.script lorder makegap.sh param.c
 
 cleandir: clean
        rm -f Makefile *.h ioconf.c options machine ${_mach} vers.c
@@ -140,16 +144,12 @@ db_structinfo.h: $S/ddb/db_structinfo.c 
 locore.o: ${_machdir}/${_mach}/locore.S assym.h
 eh.o mutex.o process.o subr.o: assym.h
 
-# The install target can be redefined by putting a
-# install-kernel-${MACHINE_NAME} target into /etc/mk.conf
-MACHINE_NAME!=  uname -n
-install: install-kernel-${MACHINE_NAME}
-.if !target(install-kernel-${MACHINE_NAME}})
-install-kernel-${MACHINE_NAME}:
+newinstall:
        cmp -s bsd /bsd || ln -f /bsd /obsd
-       umask 077; cp bsd /nbsd
-       mv /nbsd /bsd
-.endif
+       umask 077 && cp bsd /nbsd && mv /nbsd /bsd && \
+           sha256 -h /var/db/kernel.SHA256 /bsd
+
+install: update-link newinstall
 
 # pull in the dependency information
 .if !empty(DB_STRUCTINFO) && !exists(${DB_STRUCTINFO})
Index: sys/arch/macppc/conf/Makefile.macppc
===================================================================
RCS file: /cvs/src/sys/arch/macppc/conf/Makefile.macppc,v
retrieving revision 1.83
diff -u -p -u -r1.83 Makefile.macppc
--- sys/arch/macppc/conf/Makefile.macppc        13 Jun 2017 01:44:27 -0000      
1.83
+++ sys/arch/macppc/conf/Makefile.macppc        21 Jun 2017 16:36:56 -0000
@@ -93,12 +93,6 @@ LINKFLAGS+=  -S
 
 %LOAD
 
-newbsd:
-       ${SYSTEM_LD_HEAD}
-       ${SYSTEM_LD} swapgeneric.o
-       ${SYSTEM_LD_TAIL}
-       mv -f newbsd bsd
-
 # cc's -MD puts the source and output paths in the dependency file;
 # since those are temp files here we need to fix it up.  It also
 # puts the file in /tmp, so we use -MF to put it in the current
@@ -127,19 +121,19 @@ ioconf.o: ioconf.c
 ld.script: ${_machdir}/conf/ld.script
        cp ${_machdir}/conf/ld.script $@
 
+makegap.sh: $S/conf/makegap.sh
+       cp $S/conf/makegap.sh $@
+
+gap.o: Makefile makegap.sh
+       sh makegap.sh 0xcccccccc
+
 vers.o: ${SYSTEM_DEP:Ngap.o} ${SYSTEM_SWAP_DEP}
        sh $S/conf/newvers.sh
        ${CC} ${CFLAGS} ${CPPFLAGS} ${PROF} -c vers.c
 
-gap.S: ${SYSTEM_SWAP_DEP} Makefile
-       umask 007; sh $S/conf/makegap.sh 0xcc > gap.S
-
-gap.o: gap.S
-       umask 007; ${CC} ${AFLAGS} ${CPPFLAGS} ${PROF} -c gap.S
-
 clean:
        rm -f *bsd *bsd.gdb *.[dio] [a-z]*.s assym.* ${DB_STRUCTINFO} \
-           gap.S lorder param.c
+           gap.link ld.script lorder makegap.sh param.c
 
 cleandir: clean
        rm -f Makefile *.h ioconf.c options machine ${_mach} vers.c
@@ -155,16 +149,12 @@ locore0.o: ${_machdir}/${_mach}/locore0.
 locore.o: ${_machdir}/${_mach}/locore.S assym.h
 mutex.o: assym.h
 
-# The install target can be redefined by putting a
-# install-kernel-${MACHINE_NAME} target into /etc/mk.conf
-MACHINE_NAME!=  uname -n
-install: install-kernel-${MACHINE_NAME}
-.if !target(install-kernel-${MACHINE_NAME}})
-install-kernel-${MACHINE_NAME}:
+newinstall:
        cmp -s bsd /bsd || ln -f /bsd /obsd
-       umask 077; cp bsd /nbsd
-       mv /nbsd /bsd
-.endif
+       umask 077 && cp bsd /nbsd && mv /nbsd /bsd && \
+           sha256 -h /var/db/kernel.SHA256 /bsd
+
+install: update-link newinstall
 
 # pull in the dependency information
 .if !empty(DB_STRUCTINFO) && !exists(${DB_STRUCTINFO})
Index: sys/arch/octeon/conf/Makefile.octeon
===================================================================
RCS file: /cvs/src/sys/arch/octeon/conf/Makefile.octeon,v
retrieving revision 1.36
diff -u -p -u -r1.36 Makefile.octeon
--- sys/arch/octeon/conf/Makefile.octeon        13 Jun 2017 16:40:01 -0000      
1.36
+++ sys/arch/octeon/conf/Makefile.octeon        21 Jun 2017 16:22:25 -0000
@@ -99,12 +99,6 @@ LINKFLAGS+=  -S
 
 %LOAD
 
-newbsd:
-       ${SYSTEM_LD_HEAD}
-       ${SYSTEM_LD} swapgeneric.o
-       ${SYSTEM_LD_TAIL}
-       mv -f newbsd bsd
-
 # cc's -MD puts the source and output paths in the dependency file;
 # since those are temp files here we need to fix it up.  It also
 # puts the file in /tmp, so we use -MF to put it in the current
@@ -133,19 +127,23 @@ ioconf.o: ioconf.c
 ld.script: ${_machdir}/conf/ld.script
        cp ${_machdir}/conf/ld.script $@
 
+gapdummy.o:
+       echo 'const char gapdummy;' > gapdummy.c
+       ${CC} -c ${CFLAGS} ${CPPFLAGS} gapdummy.c -o $@
+
+makegap.sh: Makefile $S/conf/makegap.sh
+       cp $S/conf/makegap.sh $@
+
+gap.o: Makefile makegap.sh gapdummy.o
+       sh makegap.sh 0xefefefef gapdummy.o
+
 vers.o: ${SYSTEM_DEP:Ngap.o} ${SYSTEM_SWAP_DEP}
        sh $S/conf/newvers.sh
        ${CC} ${CFLAGS} ${CPPFLAGS} ${PROF} -c vers.c
 
-gap.S: ${SYSTEM_SWAP_DEP} Makefile $S/conf/makegap.sh
-       umask 007; sh $S/conf/makegap.sh 0xef > gap.S
-
-gap.o: gap.S
-       umask 007; ${CC} ${AFLAGS} ${CPPFLAGS} ${PROF} -c gap.S
-
 clean:
        rm -f *bsd *bsd.gdb *.[dio] [a-z]*.s assym.* ${DB_STRUCTINFO} \
-           gap.S lorder param.c
+           gap.link ld.script lorder makegap.sh param.c
 
 cleandir: clean
        rm -f Makefile *.h ioconf.c options machine ${_mach} vers.c
@@ -166,16 +164,12 @@ context.o cp0access.o exception.o locore
 lcore_access.o lcore_ddb.o lcore_float.o tlbhandler.o: assym.h
 mips64r2.o: assym.h
 
-# The install target can be redefined by putting a
-# install-kernel-${MACHINE_NAME} target into /etc/mk.conf
-MACHINE_NAME!=  uname -n
-install: install-kernel-${MACHINE_NAME}
-.if !target(install-kernel-${MACHINE_NAME}})
-install-kernel-${MACHINE_NAME}:
+newinstall:
        cmp -s bsd /bsd || ln -f /bsd /obsd
-       umask 077; cp bsd /nbsd
-       mv /nbsd /bsd
-.endif
+       umask 077 && cp bsd /nbsd && mv /nbsd /bsd && \
+           sha256 -h /var/db/kernel.SHA256 /bsd
+
+install: update-link newinstall gapdummy.o
 
 # pull in the dependency information
 .if !empty(DB_STRUCTINFO) && !exists(${DB_STRUCTINFO})
Index: sys/arch/sgi/conf/Makefile.sgi
===================================================================
RCS file: /cvs/src/sys/arch/sgi/conf/Makefile.sgi,v
retrieving revision 1.84
diff -u -p -u -r1.84 Makefile.sgi
--- sys/arch/sgi/conf/Makefile.sgi      13 Jun 2017 16:40:01 -0000      1.84
+++ sys/arch/sgi/conf/Makefile.sgi      21 Jun 2017 16:21:52 -0000
@@ -98,12 +98,6 @@ LINKFLAGS+=  -S
 
 %LOAD
 
-newbsd:
-       ${SYSTEM_LD_HEAD}
-       ${SYSTEM_LD} swapgeneric.o
-       ${SYSTEM_LD_TAIL}
-       mv -f newbsd bsd
-
 # cc's -MD puts the source and output paths in the dependency file;
 # since those are temp files here we need to fix it up.  It also
 # puts the file in /tmp, so we use -MF to put it in the current
@@ -132,19 +126,23 @@ ioconf.o: ioconf.c
 ld.script: ${_machdir}/conf/ld.script
        cp ${_machdir}/conf/ld.script $@
 
+gapdummy.o:
+       echo 'const char gapdummy;' > gapdummy.c
+       ${CC} -c ${CFLAGS} ${CPPFLAGS} gapdummy.c -o $@
+
+makegap.sh: $S/conf/makegap.sh
+       cp $S/conf/makegap.sh $@
+
+gap.o: Makefile makegap.sh gapdummy.o
+       sh makegap.sh 0xefefefef gapdummy.o
+
 vers.o: ${SYSTEM_DEP:Ngap.o} ${SYSTEM_SWAP_DEP}
        sh $S/conf/newvers.sh
        ${CC} ${CFLAGS} ${CPPFLAGS} ${PROF} -c vers.c
 
-gap.S: ${SYSTEM_SWAP_DEP} Makefile $S/conf/makegap.sh
-       umask 007; sh $S/conf/makegap.sh 0xef > gap.S
-
-gap.o: gap.S
-       umask 007; ${CC} ${AFLAGS} ${CPPFLAGS} ${PROF} -c gap.S
-
 clean:
        rm -f *bsd *bsd.gdb *.[dio] [a-z]*.s assym.* ${DB_STRUCTINFO} \
-           gap.S lorder param.c
+           gap.link ld.script lorder makegap.sh param.c
 
 cleandir: clean
        rm -f Makefile *.h ioconf.c options machine ${_mach} vers.c
@@ -166,16 +164,12 @@ lcore_access.o lcore_ddb.o lcore_float.o
 tlb_tfp.o tlbhandler.o: assym.h
 cache_tfp_subr.o ip30_nmi.o: assym.h
 
-# The install target can be redefined by putting a
-# install-kernel-${MACHINE_NAME} target into /etc/mk.conf
-MACHINE_NAME!=  uname -n
-install: install-kernel-${MACHINE_NAME}
-.if !target(install-kernel-${MACHINE_NAME}})
-install-kernel-${MACHINE_NAME}:
+newinstall:
        cmp -s bsd /bsd || ln -f /bsd /obsd
-       umask 077; cp bsd /nbsd
-       mv /nbsd /bsd
-.endif
+       umask 077 && cp bsd /nbsd && mv /nbsd /bsd && \
+           sha256 -h /var/db/kernel.SHA256 /bsd
+
+install: update-link newinstall
 
 # pull in the dependency information
 .if !empty(DB_STRUCTINFO) && !exists(${DB_STRUCTINFO})
Index: sys/arch/sparc64/conf/Makefile.sparc64
===================================================================
RCS file: /cvs/src/sys/arch/sparc64/conf/Makefile.sparc64,v
retrieving revision 1.87
diff -u -p -u -r1.87 Makefile.sparc64
--- sys/arch/sparc64/conf/Makefile.sparc64      13 Jun 2017 16:40:01 -0000      
1.87
+++ sys/arch/sparc64/conf/Makefile.sparc64      21 Jun 2017 16:36:53 -0000
@@ -91,12 +91,6 @@ LINKFLAGS+=  -S
 
 %LOAD
 
-newbsd:
-       ${SYSTEM_LD_HEAD}
-       ${SYSTEM_LD} swapgeneric.o
-       ${SYSTEM_LD_TAIL}
-       mv -f newbsd bsd
-
 # cc's -MD puts the source and output paths in the dependency file;
 # since those are temp files here we need to fix it up.  It also
 # puts the file in /tmp, so we use -MF to put it in the current
@@ -125,19 +119,19 @@ ioconf.o: ioconf.c
 ld.script: ${_machdir}/conf/ld.script
        cp ${_machdir}/conf/ld.script $@
 
+makegap.sh: $S/conf/makegap.sh
+       cp $S/conf/makegap.sh $@
+
+gap.o: Makefile makegap.sh
+       sh makegap.sh 0x00000000
+
 vers.o: ${SYSTEM_DEP:Ngap.o} ${SYSTEM_SWAP_DEP}
        sh $S/conf/newvers.sh
        ${CC} ${CFLAGS} ${CPPFLAGS} ${PROF} -c vers.c
 
-gap.S: ${SYSTEM_SWAP_DEP} Makefile
-       umask 007; sh $S/conf/makegap.sh 0x00 > gap.S
-
-gap.o: gap.S
-       umask 007; ${CC} ${AFLAGS} ${CPPFLAGS} ${PROF} -c gap.S
-
 clean:
        rm -f *bsd *bsd.gdb *.[dio] [a-z]*.s assym.* ${DB_STRUCTINFO} \
-           gap.S lorder param.c
+           gap.link ld.script lorder makegap.sh param.c
 
 cleandir: clean
        rm -f Makefile *.h ioconf.c options machine ${_mach} vers.c
@@ -152,16 +146,12 @@ db_structinfo.h: $S/ddb/db_structinfo.c 
 locore.o: ${_machdir}/${_mach}/locore.s assym.h
 hvcall.o in_cksum.o mutex.o: assym.h
 
-# The install target can be redefined by putting a
-# install-kernel-${MACHINE_NAME} target into /etc/mk.conf
-MACHINE_NAME!=  uname -n
-install: install-kernel-${MACHINE_NAME}
-.if !target(install-kernel-${MACHINE_NAME}})
-install-kernel-${MACHINE_NAME}:
+newinstall:
        cmp -s bsd /bsd || ln -f /bsd /obsd
-       umask 077; cp bsd /nbsd
-       mv /nbsd /bsd
-.endif
+       umask 077 && cp bsd /nbsd && mv /nbsd /bsd && \
+           sha256 -h /var/db/kernel.SHA256 /bsd
+
+install: update-link newinstall
 
 # pull in the dependency information
 .if !empty(DB_STRUCTINFO) && !exists(${DB_STRUCTINFO})
Index: usr.sbin/config/config.h
===================================================================
RCS file: /cvs/src/usr.sbin/config/config.h,v
retrieving revision 1.29
diff -u -p -u -r1.29 config.h
--- usr.sbin/config/config.h    16 Oct 2016 09:35:40 -0000      1.29
+++ usr.sbin/config/config.h    21 Jun 2017 04:31:00 -0000
@@ -266,6 +266,7 @@ struct objects {
 struct hashtab;
 
 const char *conffile;          /* source file, e.g., "GENERIC.sparc" */
+const char *last_component;
 const char *machine;           /* machine type, e.g., "sparc" or "sun3" */
 const char *machinearch;       /* machine arch, e.g., "sparc" or "m68k" */
 const char *srcdir;            /* path to source directory (rel. to build) */
Index: usr.sbin/config/main.c
===================================================================
RCS file: /cvs/src/usr.sbin/config/main.c,v
retrieving revision 1.58
diff -u -p -u -r1.58 main.c
--- usr.sbin/config/main.c      19 Jun 2017 17:35:04 -0000      1.58
+++ usr.sbin/config/main.c      21 Jun 2017 04:31:00 -0000
@@ -97,7 +97,6 @@ int
 main(int argc, char *argv[])
 {
        char *p;
-       const char *last_component;
        char *outfile = NULL;
        int ch, eflag, uflag, fflag;
        char dirbuffer[PATH_MAX];
Index: usr.sbin/config/mkmakefile.c
===================================================================
RCS file: /cvs/src/usr.sbin/config/mkmakefile.c,v
retrieving revision 1.42
diff -u -p -u -r1.42 mkmakefile.c
--- usr.sbin/config/mkmakefile.c        16 Oct 2016 17:50:00 -0000      1.42
+++ usr.sbin/config/mkmakefile.c        21 Jun 2017 13:20:40 -0000
@@ -429,7 +429,7 @@ emitrules(FILE *fp)
            ".SUFFIXES:\n"
            ".SUFFIXES: .s .S .c .o\n\n"
 
-           ".PHONY: depend all install clean tags\n\n"
+           ".PHONY: depend all install clean tags newbsd update-link\n\n"
 
            ".c.o:\n"
            "\t${NORMAL_C}\n\n"
@@ -508,6 +508,27 @@ emitload(FILE *fp)
                                return (1);
                }
                if (fputs("\t${NORMAL_C}\n\n", fp) < 0)
+                       return (1);
+
+               if (fprintf(fp, "new%s: gap.o\n", nm) < 0)
+                       return (1);
+               if (fprintf(fp,
+                   "\t${SYSTEM_LD_HEAD}\n"
+                   "\t${SYSTEM_LD} swap%s.o\n"
+                   "\t${SYSTEM_LD_TAIL}\n"
+                   "\tmv -f new%s %s\n\n",
+                   swname, nm, nm) < 0)
+                       return (1);
+
+               if (fprintf(fp, "update-link:\n") < 0)
+                       return (1);
+               if (fprintf(fp,
+                   "\tmkdir -p -m 700 /usr/share/compile\n"
+                   "\trm -rf /usr/share/compile/%s /usr/share/compile.tgz\n"
+                   "\tmkdir /usr/share/compile/%s\n"
+                   "\ttar -chf - Makefile makegap.sh ld.script *.o | \\\n"
+                   "\t    tar -C /usr/share/compile/%s -xf -\n\n",
+                   last_component, last_component, last_component) < 0)
                        return (1);
        }
        return (0);
Index: etc/Makefile
===================================================================
RCS file: /cvs/src/etc/Makefile,v
retrieving revision 1.458
diff -u -p -u -r1.458 Makefile
--- etc/Makefile        13 Jun 2017 17:09:52 -0000      1.458
+++ etc/Makefile        21 Jun 2017 04:31:00 -0000
@@ -32,8 +32,7 @@ kernels: ${ALL_KERNELS}
        cd ${.CURDIR}/../sys/arch/${MACHINE}/compile/ && \
                tar -chzf ${DESTDIR}/usr/share/compile.tgz -s ',/obj/,/,' \
                GENERIC*/obj/*.o GENERIC*/obj/Makefile \
-               GENERIC*/obj/ld.script GENERIC*/obj/gap.S \
-               GENERIC*/obj/machine
+               GENERIC*/obj/ld.script GENERIC*/obj/makegap.sh
        chown root:wheel ${DESTDIR}/usr/share/compile.tgz
        chmod 644 ${DESTDIR}/usr/share/compile.tgz
 
@@ -273,6 +272,7 @@ do-release:
 release-sets:
        su ${BUILDUSER} -c 'exec ${MAKE} distribution'
        su ${BUILDUSER} -c 'exec ${MAKE} kernels'
+       cp -p ${DESTDIR}/usr/share/compile.tgz /usr/share/compile.tgz
        ${MAKE} bootblocks
        cd ${RELEASEDIR} && rm -f SHA256
        cd ../distrib/sets && exec su ${BUILDUSER} -c 'exec sh maketars 
${OSrev}'
Index: etc/rc
===================================================================
RCS file: /cvs/src/etc/rc,v
retrieving revision 1.503
diff -u -p -u -r1.503 rc
--- etc/rc      19 Jun 2017 22:50:50 -0000      1.503
+++ etc/rc      21 Jun 2017 04:31:00 -0000
@@ -228,7 +228,7 @@ reorder_kernel() {
        _kernel=$(sysctl -n kern.osversion)
        _kernel=${_kernel%#*}   _kernel_dir=$_compile_dir/$_kernel
-       _sha256=$_kernel_dir/SHA256
+       _sha256=/var/db/kernel.SHA256
 
        if [[ -f /usr/share/compile.tgz ]]; then
                rm -rf $_compile_dir
@@ -237,12 +237,12 @@ reorder_kernel() {
                rm -f /usr/share/compile.tgz
        fi
 
-       [[ -f $_sha256 ]] && sha256 -q -C $_sha256 /bsd
+       sha256 -q -C $_sha256 /bsd
 
        cd $_kernel_dir
        make newbsd   >$_kernel_dir/log 2>&1
-       make install >>$_kernel_dir/log 2>&1
-       sha256 -h $_sha256 /bsd
+       make newinstall >>$_kernel_dir/log 2>&1
+       (umask 077 && sha256 -h $_sha256 /bsd)
 
        (echo "Kernel has been relinked and is active on next reboot\n"; \
                cat $_sha256; echo "\nRelink log:\n"; cat $_kernel_dir/log ) |
Index: distrib/miniroot/install.sub
===================================================================
RCS file: /cvs/src/distrib/miniroot/install.sub,v
retrieving revision 1.1014
diff -u -p -u -r1.1014 install.sub
--- distrib/miniroot/install.sub        3 Jun 2017 22:27:41 -0000       1.1014
+++ distrib/miniroot/install.sub        21 Jun 2017 12:36:06 -0000
@@ -2633,6 +2633,14 @@ finish_up() {
                mv /mnt/bsd.mp /mnt/bsd
        fi
 
+       # Create/update kernel.SHA256 matching the just installed kernel.
+       # Fix path in kernel.SHA256 to ensure it references the kernel as /bsd.
+       (
+               umask 077
+               sha256 -h /mnt/var/db/kernel.SHA256 /mnt/bsd
+               sed -i 's,(/mnt,(,' /mnt/var/db/kernel.SHA256
+       )
+
        # Ensure that sysmerge in batch mode is run on reboot.
        [[ $MODE == upgrade ]] &&
                echo "/usr/sbin/sysmerge -b" >>/mnt/etc/rc.sysmerge

Reply via email to