Index: head/ObsoleteFiles.inc =================================================================== --- head/ObsoleteFiles.inc +++ head/ObsoleteFiles.inc @@ -38,6 +38,11 @@ # xargs -n1 | sort | uniq -d; # done +# 20190523: Remove obsolete kgzip and support files +OLD_FILES+=usr/sbin/kgzip +OLD_FILES+=usr/lib/kgzldr.o +OLD_FILES+=usr/share/man/man8/kgzip.8.gz + # 20190517: Remove obsolete 10 and 10/100 ethernet drivers. OLD_FILES+=usr/share/man/man4/bm.4.gz OLD_FILES+=usr/share/man/man4/cs.4.gz Index: head/stand/i386/Makefile =================================================================== --- head/stand/i386/Makefile +++ head/stand/i386/Makefile @@ -16,10 +16,6 @@ # special boot programs, 'self-extracting boot2+loader' SUBDIR.yes+= pxeldr -.if ${MACHINE_CPUARCH} == "i386" -SUBDIR.yes+= kgzldr -.endif - SUBDIR.${MK_LOADER_ZFS}+= zfsboot gptzfsboot .include Index: head/stand/i386/kgzldr/Makefile =================================================================== --- head/stand/i386/kgzldr/Makefile +++ head/stand/i386/kgzldr/Makefile @@ -1,20 +0,0 @@ -# $FreeBSD$ - -.include - -PROG= kgzldr.o -STRIP= -BINMODE=${LIBMODE} -BINDIR= ${LIBDIR} - -SRCS= start.S boot.c subr_inflate.c lib.c crt.S sio.S -CFLAGS= -Os -CFLAGS+=-DKZIP -NO_SHARED= -LDFLAGS+=-Wl,-r -.PATH: ${SYSDIR}/kern - -BOOT_COMCONSOLE_PORT?= 0x3f8 -ACFLAGS+=-Wa,-defsym,SIO_PRT=${BOOT_COMCONSOLE_PORT} - -.include Index: head/stand/i386/kgzldr/Makefile.depend =================================================================== --- head/stand/i386/kgzldr/Makefile.depend +++ head/stand/i386/kgzldr/Makefile.depend @@ -1,12 +0,0 @@ -# $FreeBSD$ -# Autogenerated - do NOT edit! - -DIRDEPS = \ - include \ - - -.include - -.if ${DEP_RELDIR} == ${_DEP_RELDIR} -# local dependencies - needed for -jN in clean tree -.endif Index: head/stand/i386/kgzldr/boot.c =================================================================== --- head/stand/i386/kgzldr/boot.c +++ head/stand/i386/kgzldr/boot.c @@ -1,129 +0,0 @@ -/*- - * Copyright (c) 1999 Global Technology Associates, Inc. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR - * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS - * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, - * OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT - * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR - * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, - * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE - * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, - * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#include -__FBSDID("$FreeBSD$"); - -#include -#include -#include - -#include "kgzldr.h" - -#define KGZ_HEAD 0xa /* leading bytes to ignore */ -#define KGZ_TAIL 0x8 /* trailing bytes to ignore */ - -#define E_FMT 1 /* Error: Invalid format */ -#define E_MEM 2 /* Error: Out of memory */ - -struct kgz_hdr { - char ident[4]; /* identification */ - uint32_t dload; /* decoded image load address */ - uint32_t dsize; /* decoded image size */ - uint32_t isize; /* image size in memory */ - uint32_t entry; /* program entry point */ - uint32_t nsize; /* encoded image size */ -}; -extern struct kgz_hdr kgz; /* header */ -extern uint8_t kgz_ndata[]; /* encoded image */ - -static const char *const msg[] = { - "done", - "invalid format", - "out of memory" -}; - -static const u_char *ip; /* input pointer */ -static u_char *op; /* output pointer */ - -static struct inflate infl; /* inflate() parameters */ - -static int decode(void); -static int input(void *); -static int output(void *, u_char *, u_long); - -/* - * Uncompress and boot a kernel. - */ -int -boot(int howto) -{ - int err; - - kgz_con = howto & RB_SERIAL ? KGZ_SIO : KGZ_CRT; - putstr("Uncompressing ... "); - err = decode(); - putstr(msg[err]); - putstr("\n"); - if (err) { - putstr("System halted"); - for (;;) - ; - } - return err; -} - -/* - * Interface with inflate() to uncompress the data. - */ -static int -decode(void) -{ - static u_char slide[GZ_WSIZE]; - int err; - - ip = kgz_ndata + KGZ_HEAD; - op = (u_char *)kgz.dload; - infl.gz_input = input; - infl.gz_output = output; - infl.gz_slide = slide; - err = inflate(&infl); - return err ? err == 3 ? E_MEM : E_FMT : 0; -} - -/* - * Read a byte. - */ -static int -input(void *dummy) -{ - if ((size_t)(ip - kgz_ndata) + KGZ_TAIL > kgz.nsize) - return GZ_EOF; - return *ip++; -} - -/* - * Write some bytes. - */ -static int -output(void *dummy, u_char * ptr, u_long len) -{ - if (op - (u_char *)kgz.dload + len > kgz.dsize) - return -1; - while (len--) - *op++ = *ptr++; - return 0; -} Index: head/stand/i386/kgzldr/crt.S =================================================================== --- head/stand/i386/kgzldr/crt.S +++ head/stand/i386/kgzldr/crt.S @@ -1,83 +0,0 @@ -# -# Copyright (c) 1999 Global Technology Associates, Inc. -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions -# are met: -# 1. Redistributions of source code must retain the above copyright -# notice, this list of conditions and the following disclaimer. -# 2. Redistributions in binary form must reproduce the above copyright -# notice, this list of conditions and the following disclaimer in the -# documentation and/or other materials provided with the distribution. -# -# THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS``AS IS'' AND -# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS -# BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, -# OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT -# OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR -# BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, -# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE -# OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, -# EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# -# From: btx.s 1.10 1999/02/25 16:27:41 rnordier -# $FreeBSD$ -# - -# Screen defaults and assumptions. - - .set SCR_MAT,0x7 # Mode/attribute - .set SCR_COL,0x50 # Columns per row - .set SCR_ROW,0x19 # Rows per screen - -# BIOS Data Area locations. - - .set BDA_SCR,0x449 # Video mode - .set BDA_POS,0x450 # Cursor position - - .globl crt_putchr - -# void crt_putchr(int c) - -crt_putchr: movb 0x4(%esp,1),%al # Get character - pusha # Save - xorl %ecx,%ecx # Zero for loops - movb $SCR_MAT,%ah # Mode/attribute - movl $BDA_POS,%ebx # BDA pointer - movw (%ebx),%dx # Cursor position - movl $0xb8000,%edi # Regen buffer (color) - cmpb %ah,BDA_SCR-BDA_POS(%ebx) # Mono mode? - jne crt_putchr.1 # No - xorw %di,%di # Regen buffer (mono) -crt_putchr.1: cmpb $0xa,%al # New line? - je crt_putchr.2 # Yes - xchgl %eax,%ecx # Save char - movb $SCR_COL,%al # Columns per row - mulb %dh # * row position - addb %dl,%al # + column - adcb $0x0,%ah # position - shll %eax # * 2 - xchgl %eax,%ecx # Swap char, offset - movw %ax,(%edi,%ecx,1) # Write attr:char - incl %edx # Bump cursor - cmpb $SCR_COL,%dl # Beyond row? - jb crt_putchr.3 # No -crt_putchr.2: xorb %dl,%dl # Zero column - incb %dh # Bump row -crt_putchr.3: cmpb $SCR_ROW,%dh # Beyond screen? - jb crt_putchr.4 # No - leal 2*SCR_COL(%edi),%esi # New top line - movw $(SCR_ROW-1)*SCR_COL/2,%cx # Words to move - rep # Scroll - movsl # screen - movb $' ',%al # Space - movb $SCR_COL,%cl # Columns to clear - rep # Clear - stosw # line - movb $SCR_ROW-1,%dh # Bottom line -crt_putchr.4: movw %dx,(%ebx) # Update position - popa # Restore - ret # To caller Index: head/stand/i386/kgzldr/kgzldr.h =================================================================== --- head/stand/i386/kgzldr/kgzldr.h +++ head/stand/i386/kgzldr/kgzldr.h @@ -1,41 +0,0 @@ -/* - * Copyright (c) 1999 Global Technology Associates, Inc. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR - * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS - * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, - * OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT - * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR - * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, - * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE - * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, - * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * $FreeBSD$ - */ - -#define KGZ_CRT 0x1 /* Video console */ -#define KGZ_SIO 0x2 /* Serial console */ - -extern int kgz_con; - -int boot(int); - -unsigned char *kzipmalloc(int); -void kzipfree(void *); -void putstr(const char *); - -void crt_putchr(int); -void sio_putchr(int); Index: head/stand/i386/kgzldr/lib.c =================================================================== --- head/stand/i386/kgzldr/lib.c +++ head/stand/i386/kgzldr/lib.c @@ -1,88 +0,0 @@ -/*- - * Copyright (c) 1999 Global Technology Associates, Inc. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR - * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS - * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, - * OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT - * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR - * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, - * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE - * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, - * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#include -__FBSDID("$FreeBSD$"); - -#include -#include - -#include "kgzldr.h" - -#define MEMSIZ 0x8000 /* Memory pool size */ - -int kgz_con; /* Console control */ - -static size_t memtot; /* Memory allocated: bytes */ -static u_int memcnt; /* Memory allocated: blocks */ - -/* - * Library functions required by inflate(). - */ - -/* - * Allocate memory block. - */ -unsigned char * -kzipmalloc(int size) -{ - static u_char mem[MEMSIZ]; - void *ptr; - - if (memtot + size > MEMSIZ) - return NULL; - ptr = mem + memtot; - memtot += size; - memcnt++; - return ptr; -} - -/* - * Free allocated memory block. - */ -void -kzipfree(void *ptr) -{ - memcnt--; - if (!memcnt) - memtot = 0; -} - -/* - * Write a string to the console. - */ -void -putstr(const char *str) -{ - int c; - - while ((c = *str++)) { - if (kgz_con & KGZ_CRT) - crt_putchr(c); - if (kgz_con & KGZ_SIO) - sio_putchr(c); - } -} Index: head/stand/i386/kgzldr/sio.S =================================================================== --- head/stand/i386/kgzldr/sio.S +++ head/stand/i386/kgzldr/sio.S @@ -1,44 +0,0 @@ -# -# Copyright (c) 1999 Global Technology Associates, Inc. -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions -# are met: -# 1. Redistributions of source code must retain the above copyright -# notice, this list of conditions and the following disclaimer. -# 2. Redistributions in binary form must reproduce the above copyright -# notice, this list of conditions and the following disclaimer in the -# documentation and/or other materials provided with the distribution. -# -# THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS``AS IS'' AND -# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS -# BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, -# OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT -# OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR -# BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, -# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE -# OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, -# EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# -# From: sio.s 1.3 1999/01/10 14:48:03 rnordier -# $FreeBSD$ -# - - .globl sio_putchr - -# void sio_putchr(int c) - -sio_putchr: movw $SIO_PRT+0x5,%dx # Line status reg - xor %ecx,%ecx # Timeout - movb $0x40,%ch # counter -sio_putchr.1: inb %dx,%al # Transmitter - testb $0x20,%al # buffer empty? - loopz sio_putchr.1 # No - jz sio_putchr.2 # If timeout - movb 0x4(%esp,1),%al # Get character - subb $0x5,%dl # Transmitter hold reg - outb %al,%dx # Write character -sio_putchr.2: ret # To caller Index: head/stand/i386/kgzldr/start.S =================================================================== --- head/stand/i386/kgzldr/start.S +++ head/stand/i386/kgzldr/start.S @@ -1,45 +0,0 @@ -# -# Copyright (c) 1999 Global Technology Associates, Inc. -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions -# are met: -# 1. Redistributions of source code must retain the above copyright -# notice, this list of conditions and the following disclaimer. -# 2. Redistributions in binary form must reproduce the above copyright -# notice, this list of conditions and the following disclaimer in the -# documentation and/or other materials provided with the distribution. -# -# THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS``AS IS'' AND -# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS -# BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, -# OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT -# OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR -# BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, -# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE -# OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, -# EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# -# $FreeBSD$ -# - - .set entry,0x10 # kgz.entry - - .globl _start - -# C startup code for kgzldr. - -_start: cld # String ops inc - movl $_edata,%edi # Start of bss - movl $_end,%ecx # Compute - subl %edi,%ecx # size - xorl %eax,%eax # Zero - rep # Clear - stosb # bss - pushl 0x4(%esp) # Pass howto flags - call boot # Call C code - popl %ecx # Clear stack - jmp *kgz+entry # To loaded code Index: head/targets/pseudo/userland/Makefile.depend =================================================================== --- head/targets/pseudo/userland/Makefile.depend +++ head/targets/pseudo/userland/Makefile.depend @@ -827,7 +827,6 @@ usr.sbin/hyperv/tools/kvp \ usr.sbin/hyperv/tools/vss \ usr.sbin/kgmon \ - usr.sbin/kgzip \ usr.sbin/lptcontrol \ usr.sbin/mptable \ usr.sbin/ndiscvt \ Index: head/targets/pseudo/userland/misc/Makefile.depend =================================================================== --- head/targets/pseudo/userland/misc/Makefile.depend +++ head/targets/pseudo/userland/misc/Makefile.depend @@ -83,7 +83,7 @@ DIRDEPS.arm= ${_sys_boot_fdt} ${_sys_boot_efi} DIRDEPS.arm64= ${_sys_boot_fdt} ${_sys_boot_efi} -DIRDEPS.i386= ${DIRDEPS.x86sys} ${_sys_boot_efi} stand/i386/kgzldr +DIRDEPS.i386= ${DIRDEPS.x86sys} ${_sys_boot_efi} DIRDEPS.powerpc= ${_sys_boot_fdt} stand/libsa32 stand/ofw stand/uboot DIRDEPS.sparc64= stand/ofw ${_sys_boot_zfs} .endif Index: head/usr.sbin/Makefile.amd64 =================================================================== --- head/usr.sbin/Makefile.amd64 +++ head/usr.sbin/Makefile.amd64 @@ -1,6 +1,5 @@ # $FreeBSD$ -# kgzip: builds, but missing support files # mptable: broken (not 64 bit clean) # pnpinfo: crashes (not really useful anyway) .if ${MK_ACPI} != "no" Index: head/usr.sbin/Makefile.i386 =================================================================== --- head/usr.sbin/Makefile.i386 +++ head/usr.sbin/Makefile.i386 @@ -16,7 +16,6 @@ SUBDIR+= hyperv .endif SUBDIR+= kgmon -SUBDIR+= kgzip SUBDIR+= lptcontrol SUBDIR+= mptable .if ${MK_NDIS} != "no" Index: head/usr.sbin/kgzip/Makefile =================================================================== --- head/usr.sbin/kgzip/Makefile +++ head/usr.sbin/kgzip/Makefile @@ -1,9 +0,0 @@ -# $FreeBSD$ - -PROG= kgzip -MAN= kgzip.8 -SRCS= kgzip.c aouthdr.c elfhdr.c kgzcmp.c kgzld.c xio.c - -WARNS?= 3 - -.include Index: head/usr.sbin/kgzip/Makefile.depend =================================================================== --- head/usr.sbin/kgzip/Makefile.depend +++ head/usr.sbin/kgzip/Makefile.depend @@ -1,15 +0,0 @@ -# $FreeBSD$ -# Autogenerated - do NOT edit! - -DIRDEPS = \ - include \ - include/xlocale \ - lib/${CSU_DIR} \ - lib/libc \ - - -.include - -.if ${DEP_RELDIR} == ${_DEP_RELDIR} -# local dependencies - needed for -jN in clean tree -.endif Index: head/usr.sbin/kgzip/aouthdr.h =================================================================== --- head/usr.sbin/kgzip/aouthdr.h +++ head/usr.sbin/kgzip/aouthdr.h @@ -1,61 +0,0 @@ -/*- - * SPDX-License-Identifier: BSD-2-Clause-FreeBSD - * - * Copyright (c) 2000 Robert Nordier - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS - * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE - * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER - * IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR - * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN - * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * $FreeBSD$ - */ - -#include -#include "kgz.h" - -/* Relocatable header: part 0 */ -struct kgz_aouthdr0 { - struct exec a; -}; - -/* Symbol table entries */ -#define KGZ__STNUM 2 - -/* Symbol table strings */ -#define KGZ__STR_KGZ "_kgz" -#define KGZ__STR_KGZ_NDATA "_kgz_ndata" - -/* String table */ -struct kgz__strtab { - unsigned long length; - char kgz[sizeof(KGZ__STR_KGZ)]; - char kgz_ndata[sizeof(KGZ__STR_KGZ_NDATA)]; -}; - -/* Relocatable header: part 1 */ -struct kgz_aouthdr1 { - struct nlist st[KGZ__STNUM]; - struct kgz__strtab strtab; -}; - -extern const struct kgz_aouthdr0 aouthdr0; -extern const struct kgz_aouthdr1 aouthdr1; Index: head/usr.sbin/kgzip/aouthdr.c =================================================================== --- head/usr.sbin/kgzip/aouthdr.c +++ head/usr.sbin/kgzip/aouthdr.c @@ -1,81 +0,0 @@ -/*- - * SPDX-License-Identifier: BSD-2-Clause-FreeBSD - * - * Copyright (c) 2000 Robert Nordier - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS - * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE - * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER - * IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR - * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN - * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * $FreeBSD$ - */ - -#include -#include "aouthdr.h" - -#define KGZ_FIX_NSIZE 0 /* Run-time fixup */ - -const struct kgz_aouthdr0 aouthdr0 = { - /* a.out header */ - { - MID_I386 << 020 | OMAGIC, /* a_midmag */ - 0, /* a_text */ - sizeof(struct kgz_hdr) + KGZ_FIX_NSIZE, /* a_data */ - 0, /* a_bss */ - sizeof(struct nlist) * KGZ__STNUM, /* a_syms */ - 0, /* a_entry */ - 0, /* a_trsize */ - 0 /* a_drsize */ - } -}; - -const struct kgz_aouthdr1 aouthdr1 = { - /* Symbol table */ - { - { - { - (char *)offsetof(struct kgz__strtab, - kgz) /* n_un */ - }, - N_DATA | N_EXT, /* n_type */ - AUX_OBJECT, /* n_other */ - 0, /* n_desc */ - 0 /* n_value */ - }, - { - { - (char *)offsetof(struct kgz__strtab, - kgz_ndata) /* n_un */ - }, - N_DATA | N_EXT, /* n_type */ - AUX_OBJECT, /* n_other */ - 0, /* n_desc */ - sizeof(struct kgz_hdr) /* n_value */ - } - }, - /* String table */ - { - sizeof(struct kgz__strtab), /* length */ - KGZ__STR_KGZ, /* kgz */ - KGZ__STR_KGZ_NDATA /* kgz_ndata */ - } -}; Index: head/usr.sbin/kgzip/elfhdr.h =================================================================== --- head/usr.sbin/kgzip/elfhdr.h +++ head/usr.sbin/kgzip/elfhdr.h @@ -1,86 +0,0 @@ -/*- - * SPDX-License-Identifier: BSD-2-Clause-FreeBSD - * - * Copyright (c) 1999 Global Technology Associates, Inc. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR - * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS - * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, - * OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT - * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR - * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, - * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE - * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, - * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * $FreeBSD$ - */ - -#include -#define __ELF_WORD_SIZE 32 -#include -#include -#include "kgz.h" - -/* Section header indices */ -#define KGZ_SH_SYMTAB 1 -#define KGZ_SH_SHSTRTAB 2 -#define KGZ_SH_STRTAB 3 -#define KGZ_SH_DATA 4 -#define KGZ_SHNUM 5 - -/* Section header strings */ -#define KGZ_SHSTR_ZERO "" -#define KGZ_SHSTR_SYMTAB ".symtab" -#define KGZ_SHSTR_SHSTRTAB ".shstrtab" -#define KGZ_SHSTR_STRTAB ".strtab" -#define KGZ_SHSTR_DATA ".data" - -/* Section header string table */ -struct kgz_shstrtab { - char zero[sizeof(KGZ_SHSTR_ZERO)]; - char symtab[sizeof(KGZ_SHSTR_SYMTAB)]; - char shstrtab[sizeof(KGZ_SHSTR_SHSTRTAB)]; - char strtab[sizeof(KGZ_SHSTR_STRTAB)]; - char data[sizeof(KGZ_SHSTR_DATA)]; -}; - -/* Symbol table indices */ -#define KGZ_ST_KGZ 1 -#define KGZ_ST_KGZ_NDATA 2 -#define KGZ_STNUM 3 - -/* Symbol table strings */ -#define KGZ_STR_ZERO "" -#define KGZ_STR_KGZ "kgz" -#define KGZ_STR_KGZ_NDATA "kgz_ndata" - -/* String table */ -struct kgz_strtab { - char zero[sizeof(KGZ_STR_ZERO)]; - char kgz[sizeof(KGZ_STR_KGZ)]; - char kgz_ndata[sizeof(KGZ_STR_KGZ_NDATA)]; -}; - -/* Relocatable header format */ -struct kgz_elfhdr { - Elf32_Ehdr e; - Elf32_Shdr sh[KGZ_SHNUM]; - Elf32_Sym st[KGZ_STNUM]; - struct kgz_shstrtab shstrtab; - struct kgz_strtab strtab; -}; - -extern const struct kgz_elfhdr elfhdr; Index: head/usr.sbin/kgzip/elfhdr.c =================================================================== --- head/usr.sbin/kgzip/elfhdr.c +++ head/usr.sbin/kgzip/elfhdr.c @@ -1,166 +0,0 @@ -/*- - * SPDX-License-Identifier: BSD-2-Clause-FreeBSD - * - * Copyright (c) 1999 Global Technology Associates, Inc. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR - * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS - * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, - * OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT - * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR - * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, - * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE - * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, - * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * $FreeBSD$ - */ - -#include -#include -#include "elfhdr.h" - -#define KGZ_FIX_NSIZE 0 /* Run-time fixup */ - -/* - * Relocatable header template. - */ -const struct kgz_elfhdr elfhdr = { - /* ELF header */ - { - { - ELFMAG0, ELFMAG1, ELFMAG2, ELFMAG3, /* e_ident */ - ELFCLASS32, ELFDATA2LSB, EV_CURRENT, 0, - 'F', 'r', 'e', 'e', 'B', 'S', 'D', 0 - }, - htole16(ET_EXEC), /* e_type */ - htole16(EM_386), /* e_machine */ - htole32(EV_CURRENT), /* e_version */ - 0, /* e_entry */ - 0, /* e_phoff */ - htole32(offsetof(struct kgz_elfhdr, sh)), /* e_shoff */ - 0, /* e_flags */ - htole16(sizeof(Elf32_Ehdr)), /* e_ehsize */ - 0, /* e_phentsize */ - 0, /* e_phnum */ - htole16(sizeof(Elf32_Shdr)), /* e_shentsize */ - htole16(KGZ_SHNUM), /* e_shnum */ - htole16(KGZ_SH_SHSTRTAB) /* e_shstrndx */ - }, - /* Section header */ - { - { - 0, /* sh_name */ - htole32(SHT_NULL), /* sh_type */ - 0, /* sh_flags */ - 0, /* sh_addr */ - 0, /* sh_offset */ - 0, /* sh_size */ - htole32(SHN_UNDEF), /* sh_link */ - 0, /* sh_info */ - 0, /* sh_addralign */ - 0 /* sh_entsize */ - }, - { - htole32(offsetof(struct kgz_shstrtab, symtab)), /* sh_name */ - htole32(SHT_SYMTAB), /* sh_type */ - 0, /* sh_flags */ - 0, /* sh_addr */ - htole32(offsetof(struct kgz_elfhdr, st)), /* sh_offset */ - htole32(sizeof(Elf32_Sym) * KGZ_STNUM), /* sh_size */ - htole32(KGZ_SH_STRTAB), /* sh_link */ - htole32(1), /* sh_info */ - htole32(4), /* sh_addralign */ - htole32(sizeof(Elf32_Sym)) /* sh_entsize */ - }, - { - htole32(offsetof(struct kgz_shstrtab, shstrtab)), /* sh_name */ - htole32(SHT_STRTAB), /* sh_type */ - 0, /* sh_flags */ - 0, /* sh_addr */ - htole32(offsetof(struct kgz_elfhdr, shstrtab)), /* sh_offset */ - htole32(sizeof(struct kgz_shstrtab)), /* sh_size */ - htole32(SHN_UNDEF), /* sh_link */ - 0, /* sh_info */ - htole32(1), /* sh_addralign */ - 0 /* sh_entsize */ - }, - { - htole32(offsetof(struct kgz_shstrtab, strtab)), /* sh_name */ - htole32(SHT_STRTAB), /* sh_type */ - 0, /* sh_flags */ - 0, /* sh_addr */ - htole32(offsetof(struct kgz_elfhdr, strtab)), /* sh_offset */ - htole32(sizeof(struct kgz_strtab)), /* sh_size */ - htole32(SHN_UNDEF), /* sh_link */ - 0, /* sh_info */ - htole32(1), /* sh_addralign */ - 0 /* sh_entsize */ - }, - { - htole32(offsetof(struct kgz_shstrtab, data)), /* sh_name */ - htole32(SHT_PROGBITS), /* sh_type */ - htole32(SHF_ALLOC | SHF_WRITE), /* sh_flags */ - 0, /* sh_addr */ - htole32(sizeof(struct kgz_elfhdr)), /* sh_offset */ - htole32(sizeof(struct kgz_hdr) + KGZ_FIX_NSIZE), /* sh_size */ - htole32(SHN_UNDEF), /* sh_link */ - 0, /* sh_info */ - htole32(4), /* sh_addralign */ - 0 /* sh_entsize */ - } - }, - /* Symbol table */ - { - { - 0, /* st_name */ - 0, /* st_value */ - 0, /* st_size */ - 0, /* st_info */ - 0, /* st_other */ - htole16(SHN_UNDEF) /* st_shndx */ - }, - { - htole32(offsetof(struct kgz_strtab, kgz)), /* st_name */ - 0, /* st_value */ - htole32(sizeof(struct kgz_hdr)), /* st_size */ - ELF32_ST_INFO(STB_GLOBAL, STT_OBJECT), /* st_info */ - 0, /* st_other */ - htole16(KGZ_SH_DATA) /* st_shndx */ - }, - { - htole32(offsetof(struct kgz_strtab, kgz_ndata)), /* st_name */ - htole32(sizeof(struct kgz_hdr)), /* st_value */ - htole32(KGZ_FIX_NSIZE), /* st_size */ - ELF32_ST_INFO(STB_GLOBAL, STT_OBJECT), /* st_info */ - 0, /* st_other */ - htole16(KGZ_SH_DATA) /* st_shndx */ - } - }, - /* Section header string table */ - { - KGZ_SHSTR_ZERO, /* zero */ - KGZ_SHSTR_SYMTAB, /* symtab */ - KGZ_SHSTR_SHSTRTAB, /* shstrtab */ - KGZ_SHSTR_STRTAB, /* strtab */ - KGZ_SHSTR_DATA /* data */ - }, - /* String table */ - { - KGZ_STR_ZERO, /* zero */ - KGZ_STR_KGZ, /* kgz */ - KGZ_STR_KGZ_NDATA /* kgz_ndata */ - } -}; Index: head/usr.sbin/kgzip/kgz.h =================================================================== --- head/usr.sbin/kgzip/kgz.h +++ head/usr.sbin/kgzip/kgz.h @@ -1,59 +0,0 @@ -/*- - * SPDX-License-Identifier: BSD-2-Clause-FreeBSD - * - * Copyright (c) 1999 Global Technology Associates, Inc. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR - * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS - * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, - * OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT - * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR - * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, - * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE - * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, - * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * $FreeBSD$ - */ - -#ifndef _KGZ_H_ -#define _KGZ_H_ - -#include - -/* - * KGZ definitions: kgzip(8) output. - */ - -/* Values for ident[]. */ -#define KGZ_ID0 'K' -#define KGZ_ID1 'G' -#define KGZ_ID2 'Z' -#define KGZ_ID3 '\0' - -/* KGZ header. */ -struct kgz_hdr { - char ident[4]; /* identification */ - uint32_t dload; /* decoded image load address */ - uint32_t dsize; /* decoded image size */ - uint32_t isize; /* image size in memory */ - uint32_t entry; /* program entry point */ - uint32_t nsize; /* encoded image size */ -}; - -extern struct kgz_hdr kgz; /* header */ -extern uint8_t kgz_ndata[]; /* encoded image */ - -#endif /* !_KGZ_H_ */ Index: head/usr.sbin/kgzip/kgzcmp.c =================================================================== --- head/usr.sbin/kgzip/kgzcmp.c +++ head/usr.sbin/kgzip/kgzcmp.c @@ -1,239 +0,0 @@ -/*- - * SPDX-License-Identifier: BSD-2-Clause-FreeBSD - * - * Copyright (c) 1999 Global Technology Associates, Inc. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR - * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS - * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, - * OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT - * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR - * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, - * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE - * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, - * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * $FreeBSD$ - */ - -#define _KERNEL -#include -#undef _KERNEL -#include -#include -#include - -#include -#include -#include -#include -#include - -#include - -#include "aouthdr.h" -#include "elfhdr.h" -#include "kgzip.h" - -static void mk_data(const struct iodesc *i, const struct iodesc *, - struct kgz_hdr *, size_t); -static int ld_elf(const struct iodesc *, const struct iodesc *, - struct kgz_hdr *, const Elf32_Ehdr *); -static int ld_aout(const struct iodesc *, const struct iodesc *, - struct kgz_hdr *, const struct exec *); - -/* - * Compress executable and output it in relocatable object format. - */ -void -kgzcmp(struct kgz_hdr *kh, const char *f1, const char *f2) -{ - struct iodesc idi, ido; - struct kgz_hdr khle; - - if ((idi.fd = open(idi.fname = f1, O_RDONLY)) == -1) - err(1, "%s", idi.fname); - if ((ido.fd = open(ido.fname = f2, O_CREAT | O_TRUNC | O_WRONLY, - 0666)) == -1) - err(1, "%s", ido.fname); - kh->ident[0] = KGZ_ID0; - kh->ident[1] = KGZ_ID1; - kh->ident[2] = KGZ_ID2; - kh->ident[3] = KGZ_ID3; - mk_data(&idi, &ido, kh, - (format == F_AOUT ? sizeof(struct kgz_aouthdr0) : - sizeof(struct kgz_elfhdr)) + - sizeof(struct kgz_hdr)); - kh->dload &= 0xffffff; - kh->entry &= 0xffffff; - if (format == F_AOUT) { - struct kgz_aouthdr0 ahdr0 = aouthdr0; - struct kgz_aouthdr1 ahdr1 = aouthdr1; - unsigned x = (sizeof(struct kgz_hdr) + kh->nsize) & (16 - 1); - if (x) { - x = 16 - x; - xzero(&ido, x); - } - xwrite(&ido, &ahdr1, sizeof(ahdr1)); - ahdr0.a.a_data += kh->nsize + x; - xseek(&ido, 0); - xwrite(&ido, &ahdr0, sizeof(ahdr0)); - } else { - struct kgz_elfhdr ehdr = elfhdr; - ehdr.st[KGZ_ST_KGZ_NDATA].st_size = htole32(kh->nsize); - ehdr.sh[KGZ_SH_DATA].sh_size = - htole32(le32toh(ehdr.sh[KGZ_SH_DATA].sh_size) + kh->nsize); - xseek(&ido, 0); - xwrite(&ido, &ehdr, sizeof(ehdr)); - } - khle = *kh; - khle.dload = htole32(khle.dload); - khle.dsize = htole32(khle.dsize); - khle.isize = htole32(khle.isize); - khle.entry = htole32(khle.entry); - khle.nsize = htole32(khle.nsize); - xwrite(&ido, &khle, sizeof(khle)); - xclose(&ido); - xclose(&idi); -} - -/* - * Make encoded (compressed) data. - */ -static void -mk_data(const struct iodesc * idi, const struct iodesc * ido, - struct kgz_hdr * kh, size_t off) -{ - union { - struct exec ex; - Elf32_Ehdr ee; - } hdr; - struct stat sb; - struct iodesc idp; - int fd[2]; - pid_t pid; - size_t n; - int fmt, status, e; - - n = xread(idi, &hdr, sizeof(hdr), 0); - fmt = 0; - if (n >= sizeof(hdr.ee) && IS_ELF(hdr.ee)) - fmt = F_ELF; - else if (n >= sizeof(hdr.ex) && N_GETMAGIC(hdr.ex) == ZMAGIC) - fmt = F_AOUT; - if (!fmt) - errx(1, "%s: Format not supported", idi->fname); - xseek(ido, off); - if (pipe(fd)) - err(1, NULL); - switch (pid = fork()) { - case -1: - err(1, NULL); - case 0: - close(fd[1]); - dup2(fd[0], STDIN_FILENO); - close(fd[0]); - close(idi->fd); - dup2(ido->fd, STDOUT_FILENO); - close(ido->fd); - execlp("gzip", "gzip", "-9n", (char *)NULL); - warn(NULL); - _exit(1); - default: - close(fd[0]); - idp.fname = "(pipe)"; - idp.fd = fd[1]; - e = fmt == F_ELF ? ld_elf(idi, &idp, kh, &hdr.ee) : - fmt == F_AOUT ? ld_aout(idi, &idp, kh, &hdr.ex) : -1; - close(fd[1]); - if ((pid = waitpid(pid, &status, 0)) == -1) - err(1, NULL); - if (WIFSIGNALED(status) || WEXITSTATUS(status)) - exit(1); - } - if (e) - errx(1, "%s: Invalid format", idi->fname); - if (fstat(ido->fd, &sb)) - err(1, "%s", ido->fname); - kh->nsize = sb.st_size - off; -} - -/* - * "Load" an ELF-format executable. - */ -static int -ld_elf(const struct iodesc * idi, const struct iodesc * ido, - struct kgz_hdr * kh, const Elf32_Ehdr * e) -{ - Elf32_Phdr p; - size_t load, addr, n; - unsigned x, i; - - load = addr = n = 0; - for (x = i = 0; i < e->e_phnum; i++) { - if (xread(idi, &p, sizeof(p), - e->e_phoff + i * e->e_phentsize) != e->e_phentsize) - return -1; - if (p.p_type != PT_LOAD) - continue; - if (!x) - load = addr = p.p_vaddr; - else { - if (p.p_vaddr < addr) - return -1; - n = p.p_vaddr - addr; - if (n) { - xzero(ido, n); - addr += n; - } - } - if (p.p_memsz < p.p_filesz) - return -1; - n = p.p_memsz - p.p_filesz; - xcopy(idi, ido, p.p_filesz, p.p_offset); - addr += p.p_filesz; - x++; - } - if (!x) - return -1; - kh->dload = load; - kh->dsize = addr - load; - kh->isize = kh->dsize + n; - kh->entry = e->e_entry; - return 0; -} - -/* - * "Load" an a.out-format executable. - */ -static int -ld_aout(const struct iodesc * idi, const struct iodesc * ido, - struct kgz_hdr * kh, const struct exec * a) -{ - size_t load, addr; - - load = addr = N_TXTADDR(*a); - xcopy(idi, ido, le32toh(a->a_text), N_TXTOFF(*a)); - addr += le32toh(a->a_text); - if (N_DATADDR(*a) != addr) - return -1; - xcopy(idi, ido, le32toh(a->a_data), N_DATOFF(*a)); - addr += le32toh(a->a_data); - kh->dload = load; - kh->dsize = addr - load; - kh->isize = kh->dsize + le32toh(a->a_bss); - kh->entry = le32toh(a->a_entry); - return 0; -} Index: head/usr.sbin/kgzip/kgzip.h =================================================================== --- head/usr.sbin/kgzip/kgzip.h +++ head/usr.sbin/kgzip/kgzip.h @@ -1,53 +0,0 @@ -/*- - * SPDX-License-Identifier: BSD-2-Clause-FreeBSD - * - * Copyright (c) 1999 Global Technology Associates, Inc. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR - * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS - * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, - * OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT - * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR - * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, - * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE - * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, - * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * $FreeBSD$ - */ - -#include "kgz.h" - -#define F_AOUT 1 /* Format: a.out */ -#define F_ELF 2 /* Format: ELF32 */ - -/* Used by I/O routines */ -struct iodesc { - const char *fname; /* File name */ - int fd; /* File descriptor */ -}; - -extern const char *loader; /* Default loader */ -extern int format; /* Output format */ - -void kgzcmp(struct kgz_hdr *, const char *, const char *); -void kgzld(struct kgz_hdr *, const char *, const char *); - -void xclose(const struct iodesc *); -void xcopy(const struct iodesc *, const struct iodesc *, size_t, off_t); -void xzero(const struct iodesc *, size_t); -size_t xread(const struct iodesc *, void *, size_t, off_t); -void xwrite(const struct iodesc *, const void *, size_t); -void xseek(const struct iodesc *, off_t); Index: head/usr.sbin/kgzip/kgzip.8 =================================================================== --- head/usr.sbin/kgzip/kgzip.8 +++ head/usr.sbin/kgzip/kgzip.8 @@ -1,156 +0,0 @@ -.\" Copyright (c) 1999 Global Technology Associates, Inc. -.\" All rights reserved. -.\" -.\" Redistribution and use in source and binary forms, with or without -.\" modification, are permitted provided that the following conditions -.\" are met: -.\" 1. Redistributions of source code must retain the above copyright -.\" notice, this list of conditions and the following disclaimer. -.\" 2. Redistributions in binary form must reproduce the above copyright -.\" notice, this list of conditions and the following disclaimer in the -.\" documentation and/or other materials provided with the distribution. -.\" -.\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS``AS IS'' AND -.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -.\" PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS -.\" BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, -.\" OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT -.\" OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR -.\" BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, -.\" WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE -.\" OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, -.\" EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -.\" -.\" $FreeBSD$ -.\" -.Dd August 2, 2016 -.Dt KGZIP 8 -.Os -.Sh NAME -.Nm kgzip -.Nd compress a kernel -.Sh SYNOPSIS -.Nm -.Op Fl cv -.Op Fl f Ar format -.Op Fl l Ar loader -.Op Fl o Ar output -.Ar file -.Sh DESCRIPTION -.Bf -symbolic -This utility is deprecated. -Users are advised to use -.Xr loader 8 -and compress the kernel with -.Xr gzip 1 . -.Ef -.Pp -The -.Nm -utility compresses a kernel or some other bootable binary. -Operation -is in two phases as follows: -.Bl -enum -.It -A load image of the executable file is built which omits all but -the -.Sq text -and -.Sq data -segments. -This image is compressed using -.Xr gzip 1 -and output as data in relocatable object format. -.It -The object file is linked with a special self-hosting loader, producing -an executable suitable for booting with either the second- or -third-level bootstraps. -.El -.Pp -Supported object formats are 32-bit ELF and a.out ZMAGIC. -.Pp -If the -.Ar file -operand has a -.Sq .o -suffix, input is assumed to be for the link phase, and the first phase -is omitted. -.Pp -The options are: -.Bl -tag -width Fl -.It Fl c -Omit the link phase. -.It Fl v -Display object file information. -.It Fl f Ar format -Use -.Ar format -as the output format, where -.Ar format -is -.Sq aout -or -.Sq elf . -The default format is ELF. -.It Fl l Ar loader -Link -.Ar loader -as the loader. -.It Fl o Ar output -Name the output file -.Ar output . -The default is to use the input name with the suffix -.Sq .o -(for relocatables) or -.Sq .kgz -(for executables). -.El -.Sh NOTES -Global variables equivalent to the following are defined in the output: -.Bd -literal -struct kgz_hdr { - char ident[4]; /* identification: "KGZ" */ - uint32_t dload; /* decoded image load address */ - uint32_t dsize; /* decoded image size */ - uint32_t isize; /* image size in memory */ - uint32_t entry; /* entry point */ - uint32_t nsize; /* encoded image size */ -} kgz; - -uint8_t kgz_ndata[]; /* encoded data */ -.Ed -.Pp -The encoded data is simply -.Xr gzip 1 -output: a header (with no optional fields); compressed data; and 32-bit -CRC and size values. -.Sh FILES -.Bl -tag -width /usr/lib/kgzldr.o -compact -.It Pa /usr/lib/kgzldr.o -The default loader -.El -.Sh EXIT STATUS -.Ex -std -.Sh SEE ALSO -.Xr gzip 1 , -.Xr ld 1 , -.Xr a.out 5 , -.Xr elf 5 , -.Xr boot 8 , -.Xr loader 8 -.Sh AUTHORS -.An Robert Nordier Aq Mt rnordier@FreeBSD.org -.Sh BUGS -As symbols are lost, the usefulness of this utility for compressing -kernels is limited to situations where -.Xr loader 8 -cannot be used. -.Pp -.Pa kgzldr.o -is only available for the i386 architecture. -.Pp -The preferred method of compressing a kernel -is simply to -.Xr gzip 1 -it. Index: head/usr.sbin/kgzip/kgzip.c =================================================================== --- head/usr.sbin/kgzip/kgzip.c +++ head/usr.sbin/kgzip/kgzip.c @@ -1,178 +0,0 @@ -/*- - * SPDX-License-Identifier: BSD-2-Clause-FreeBSD - * - * Copyright (c) 1999 Global Technology Associates, Inc. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR - * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS - * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, - * OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT - * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR - * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, - * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE - * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, - * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#ifndef lint -static const char rcsid[] = - "$FreeBSD$"; -#endif /* not lint */ - -#include -#include -#include -#include -#include -#include -#include - -#include "kgzip.h" - -#define FN_SRC 0 /* Filename: source */ -#define FN_OBJ 1 /* Filename: relocatable */ -#define FN_KGZ 2 /* Filename: executable */ -#define FN_CNT 3 /* Number of filenames */ - -#define SFX_OBJ ".o" /* Filename suffix: relocatable */ -#define SFX_KGZ ".kgz" /* Filename suffix: executable */ -#define SFX_MAX 5 /* Size of larger filename suffix */ - -const char *loader = "/usr/lib/kgzldr.o"; /* Default loader */ -int format; /* Output format */ - -char *tname; /* Name of temporary file */ - -static void cleanup(void); -static void mk_fn(int, const char *, const char *, char *[]); -static void usage(void); - -/* - * Compress a kernel. - */ -int -main(int argc, char *argv[]) -{ - static char *fn[FN_CNT]; - struct kgz_hdr kh; - const char *output; - char *tmpdir; - int cflag, vflag, c; - - tmpdir = getenv("TMPDIR"); - if (asprintf(&tname, "%s/kgzXXXXXXXXXX", - tmpdir == NULL ? _PATH_TMP : tmpdir) == -1) - errx(1, "Out of memory"); - output = NULL; - cflag = vflag = 0; - while ((c = getopt(argc, argv, "cvf:l:o:")) != -1) - switch (c) { - case 'c': - cflag = 1; - break; - case 'v': - vflag = 1; - break; - case 'f': - if (!strcmp(optarg, "aout")) - format = F_AOUT; - else if (!strcmp(optarg, "elf")) - format = F_ELF; - else - errx(1, "%s: Unknown format", optarg); - break; - case 'l': - loader = optarg; - break; - case 'o': - output = optarg; - break; - default: - usage(); - } - argc -= optind; - argv += optind; - if (argc != 1) - usage(); - atexit(cleanup); - mk_fn(cflag, *argv, output, fn); - memset(&kh, 0, sizeof(kh)); - if (fn[FN_SRC]) { - if (!format) - format = F_ELF; - kgzcmp(&kh, fn[FN_SRC], fn[FN_OBJ]); - } - if (!cflag) - kgzld(&kh, fn[FN_OBJ], fn[FN_KGZ]); - if (vflag) - printf("dload=%#x dsize=%#x isize=%#x entry=%#x nsize=%#x\n", - kh.dload, kh.dsize, kh.isize, kh.entry, kh.nsize); - return 0; -} - -/* - * Clean up after processing. - */ -static void -cleanup(void) -{ - if (tname) - unlink(tname); -} - -/* - * Make the required filenames. - */ -static void -mk_fn(int cflag, const char *f1, const char *f2, char *fn[]) -{ - const char *p, *s; - size_t n; - int i, fd; - - i = 0; - s = strrchr(f1, 0); - n = sizeof(SFX_OBJ) - 1; - if ((size_t)(s - f1) > n && !memcmp(s - n, SFX_OBJ, n)) { - s -= n; - i++; - } - fn[i++] = (char *)f1; - if (i == FN_OBJ && !cflag) { - if ((fd = mkstemp(tname)) == -1) - err(1, NULL); - close(fd); - fn[i++] = tname; - } - if (!(fn[i] = (char *)f2)) { - p = (p = strrchr(f1, '/')) ? p + 1 : f1; - n = (size_t)(s - p); - if (!(fn[i] = malloc(n + SFX_MAX))) - err(1, NULL); - memcpy(fn[i], p, n); - strcpy(fn[i] + n, i == FN_OBJ ? SFX_OBJ : SFX_KGZ); - } -} - -/* - * Display usage information. - */ -static void -usage(void) -{ - fprintf(stderr, - "usage: kgzip [-cv] [-f format] [-l loader] [-o output] file\n"); - exit(1); -} Index: head/usr.sbin/kgzip/kgzld.c =================================================================== --- head/usr.sbin/kgzip/kgzld.c +++ head/usr.sbin/kgzip/kgzld.c @@ -1,103 +0,0 @@ -/*- - * SPDX-License-Identifier: BSD-2-Clause-FreeBSD - * - * Copyright (c) 1999 Global Technology Associates, Inc. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR - * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS - * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, - * OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT - * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR - * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, - * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE - * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, - * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * $FreeBSD$ - */ - -#include -#include -#include - -#include -#include -#include -#include -#include -#include - -#include "aouthdr.h" -#include "elfhdr.h" -#include "kgzip.h" - -#define align(x, y) (((x) + (y) - 1) & ~((y) - 1)) - -/* - * Link KGZ file and loader. - */ -void -kgzld(struct kgz_hdr * kh, const char *f1, const char *f2) -{ - char addr[16]; - struct iodesc idi; - pid_t pid; - size_t n; - int status; - - if (strcmp(kh->ident, "KGZ")) { - if ((idi.fd = open(idi.fname = f1, O_RDONLY)) == -1) - err(1, "%s", idi.fname); - if (!format) { - union { - struct exec ex; - Elf32_Ehdr ee; - } hdr; - n = xread(&idi, &hdr, sizeof(hdr), 0); - if (n >= sizeof(hdr.ee) && IS_ELF(hdr.ee)) - format = F_ELF; - else if (n >= sizeof(hdr.ex) && - N_GETMAGIC(hdr.ex) == OMAGIC) - format = F_AOUT; - if (!format) - errx(1, "%s: Format not supported", idi.fname); - } - n = xread(&idi, kh, sizeof(*kh), - format == F_AOUT ? sizeof(struct kgz_aouthdr0) - : sizeof(struct kgz_elfhdr)); - xclose(&idi); - if (n != sizeof(*kh) || strcmp(kh->ident, "KGZ")) - errx(1, "%s: Invalid format", idi.fname); - } - sprintf(addr, "%#x", align(kh->dload + kh->dsize, 0x1000)); - switch (pid = fork()) { - case -1: - err(1, NULL); - case 0: - if (format == F_AOUT) - execlp("ld", "ld", "-aout", "-Z", "-T", addr, "-o", f2, - loader, f1, (char *)NULL); - else - execlp("ld", "ld", "-Ttext", addr, "-o", f2, loader, f1, - (char *)NULL); - warn(NULL); - _exit(1); - default: - if ((pid = waitpid(pid, &status, 0)) == -1) - err(1, NULL); - if (WIFSIGNALED(status) || WEXITSTATUS(status)) - exit(1); - } -} Index: head/usr.sbin/kgzip/xio.c =================================================================== --- head/usr.sbin/kgzip/xio.c +++ head/usr.sbin/kgzip/xio.c @@ -1,123 +0,0 @@ -/*- - * SPDX-License-Identifier: BSD-2-Clause-FreeBSD - * - * Copyright (c) 1999 Global Technology Associates, Inc. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR - * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS - * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, - * OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT - * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR - * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, - * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE - * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, - * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * $FreeBSD$ - */ - -#include -#include -#include - -#include "kgzip.h" - -/* - * Close a file. - */ -void -xclose(const struct iodesc *id) -{ - if (close(id->fd)) - err(1, "%s", id->fname); -} - -/* - * Copy bytes from one file to another. - */ -void -xcopy(const struct iodesc * idi, const struct iodesc * ido, - size_t nbyte, off_t offset) -{ - char buf[8192]; - size_t n; - - while (nbyte) { - if ((n = sizeof(buf)) > nbyte) - n = nbyte; - if (xread(idi, buf, n, offset) != n) - errx(1, "%s: Short read", idi->fname); - xwrite(ido, buf, n); - nbyte -= n; - offset = -1; - } -} - -/* - * Write binary zeroes to a file. - */ -void -xzero(const struct iodesc * id, size_t nbyte) -{ - char buf[8192]; - size_t n; - - memset(buf, 0, sizeof(buf)); - while (nbyte) { - if ((n = sizeof(buf)) > nbyte) - n = nbyte; - xwrite(id, buf, n); - nbyte -= n; - } -} - -/* - * Read from a file. - */ -size_t -xread(const struct iodesc * id, void *buf, size_t nbyte, off_t offset) -{ - ssize_t n; - - if (offset != -1 && lseek(id->fd, offset, SEEK_SET) != offset) - err(1, "%s", id->fname); - if ((n = read(id->fd, buf, nbyte)) == -1) - err(1, "%s", id->fname); - return (size_t)n; -} - -/* - * Write to a file. - */ -void -xwrite(const struct iodesc * id, const void *buf, size_t nbyte) -{ - ssize_t n; - - if ((n = write(id->fd, buf, nbyte)) == -1) - err(1, "%s", id->fname); - if ((size_t)n != nbyte) - errx(1, "%s: Short write", id->fname); -} - -/* - * Reposition within a file. - */ -void -xseek(const struct iodesc *id, off_t offset) -{ - if (lseek(id->fd, offset, SEEK_SET) != offset) - err(1, "%s", id->fname); -}