Remove kgzip and kgzldr.
PR: 183666, 229763 Submitted by: Yoshihiro Ota <ota at j.email.ne.jp> Differential Revision: https://reviews.freebsd.org/D20248
This commit is contained in:
parent
a49818787d
commit
5e86bd6073
@ -38,6 +38,11 @@
|
|||||||
# xargs -n1 | sort | uniq -d;
|
# xargs -n1 | sort | uniq -d;
|
||||||
# done
|
# 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.
|
# 20190517: Remove obsolete 10 and 10/100 ethernet drivers.
|
||||||
OLD_FILES+=usr/share/man/man4/bm.4.gz
|
OLD_FILES+=usr/share/man/man4/bm.4.gz
|
||||||
OLD_FILES+=usr/share/man/man4/cs.4.gz
|
OLD_FILES+=usr/share/man/man4/cs.4.gz
|
||||||
|
@ -16,10 +16,6 @@ SUBDIR.yes+= loader_simp
|
|||||||
# special boot programs, 'self-extracting boot2+loader'
|
# special boot programs, 'self-extracting boot2+loader'
|
||||||
SUBDIR.yes+= pxeldr
|
SUBDIR.yes+= pxeldr
|
||||||
|
|
||||||
.if ${MACHINE_CPUARCH} == "i386"
|
|
||||||
SUBDIR.yes+= kgzldr
|
|
||||||
.endif
|
|
||||||
|
|
||||||
SUBDIR.${MK_LOADER_ZFS}+= zfsboot gptzfsboot
|
SUBDIR.${MK_LOADER_ZFS}+= zfsboot gptzfsboot
|
||||||
|
|
||||||
.include <bsd.subdir.mk>
|
.include <bsd.subdir.mk>
|
||||||
|
@ -1,20 +0,0 @@
|
|||||||
# $FreeBSD$
|
|
||||||
|
|
||||||
.include <bsd.init.mk>
|
|
||||||
|
|
||||||
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 <bsd.prog.mk>
|
|
@ -1,12 +0,0 @@
|
|||||||
# $FreeBSD$
|
|
||||||
# Autogenerated - do NOT edit!
|
|
||||||
|
|
||||||
DIRDEPS = \
|
|
||||||
include \
|
|
||||||
|
|
||||||
|
|
||||||
.include <dirdeps.mk>
|
|
||||||
|
|
||||||
.if ${DEP_RELDIR} == ${_DEP_RELDIR}
|
|
||||||
# local dependencies - needed for -jN in clean tree
|
|
||||||
.endif
|
|
@ -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 <sys/cdefs.h>
|
|
||||||
__FBSDID("$FreeBSD$");
|
|
||||||
|
|
||||||
#include <sys/types.h>
|
|
||||||
#include <sys/reboot.h>
|
|
||||||
#include <sys/inflate.h>
|
|
||||||
|
|
||||||
#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;
|
|
||||||
}
|
|
@ -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
|
|
@ -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);
|
|
@ -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 <sys/cdefs.h>
|
|
||||||
__FBSDID("$FreeBSD$");
|
|
||||||
|
|
||||||
#include <sys/types.h>
|
|
||||||
#include <stddef.h>
|
|
||||||
|
|
||||||
#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);
|
|
||||||
}
|
|
||||||
}
|
|
@ -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
|
|
@ -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
|
|
@ -827,7 +827,6 @@ DIRDEPS.i386= \
|
|||||||
usr.sbin/hyperv/tools/kvp \
|
usr.sbin/hyperv/tools/kvp \
|
||||||
usr.sbin/hyperv/tools/vss \
|
usr.sbin/hyperv/tools/vss \
|
||||||
usr.sbin/kgmon \
|
usr.sbin/kgmon \
|
||||||
usr.sbin/kgzip \
|
|
||||||
usr.sbin/lptcontrol \
|
usr.sbin/lptcontrol \
|
||||||
usr.sbin/mptable \
|
usr.sbin/mptable \
|
||||||
usr.sbin/ndiscvt \
|
usr.sbin/ndiscvt \
|
||||||
|
@ -83,7 +83,7 @@ DIRDEPS+= \
|
|||||||
|
|
||||||
DIRDEPS.arm= ${_sys_boot_fdt} ${_sys_boot_efi}
|
DIRDEPS.arm= ${_sys_boot_fdt} ${_sys_boot_efi}
|
||||||
DIRDEPS.arm64= ${_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.powerpc= ${_sys_boot_fdt} stand/libsa32 stand/ofw stand/uboot
|
||||||
DIRDEPS.sparc64= stand/ofw ${_sys_boot_zfs}
|
DIRDEPS.sparc64= stand/ofw ${_sys_boot_zfs}
|
||||||
.endif
|
.endif
|
||||||
|
@ -1,6 +1,5 @@
|
|||||||
# $FreeBSD$
|
# $FreeBSD$
|
||||||
|
|
||||||
# kgzip: builds, but missing support files
|
|
||||||
# mptable: broken (not 64 bit clean)
|
# mptable: broken (not 64 bit clean)
|
||||||
# pnpinfo: crashes (not really useful anyway)
|
# pnpinfo: crashes (not really useful anyway)
|
||||||
.if ${MK_ACPI} != "no"
|
.if ${MK_ACPI} != "no"
|
||||||
|
@ -16,7 +16,6 @@ SUBDIR+= cpucontrol
|
|||||||
SUBDIR+= hyperv
|
SUBDIR+= hyperv
|
||||||
.endif
|
.endif
|
||||||
SUBDIR+= kgmon
|
SUBDIR+= kgmon
|
||||||
SUBDIR+= kgzip
|
|
||||||
SUBDIR+= lptcontrol
|
SUBDIR+= lptcontrol
|
||||||
SUBDIR+= mptable
|
SUBDIR+= mptable
|
||||||
.if ${MK_NDIS} != "no"
|
.if ${MK_NDIS} != "no"
|
||||||
|
@ -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 <bsd.prog.mk>
|
|
@ -1,15 +0,0 @@
|
|||||||
# $FreeBSD$
|
|
||||||
# Autogenerated - do NOT edit!
|
|
||||||
|
|
||||||
DIRDEPS = \
|
|
||||||
include \
|
|
||||||
include/xlocale \
|
|
||||||
lib/${CSU_DIR} \
|
|
||||||
lib/libc \
|
|
||||||
|
|
||||||
|
|
||||||
.include <dirdeps.mk>
|
|
||||||
|
|
||||||
.if ${DEP_RELDIR} == ${_DEP_RELDIR}
|
|
||||||
# local dependencies - needed for -jN in clean tree
|
|
||||||
.endif
|
|
@ -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 <stddef.h>
|
|
||||||
#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 */
|
|
||||||
}
|
|
||||||
};
|
|
@ -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 <a.out.h>
|
|
||||||
#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;
|
|
@ -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 <sys/endian.h>
|
|
||||||
#include <stddef.h>
|
|
||||||
#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 */
|
|
||||||
}
|
|
||||||
};
|
|
@ -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 <sys/types.h>
|
|
||||||
#define __ELF_WORD_SIZE 32
|
|
||||||
#include <sys/elf32.h>
|
|
||||||
#include <sys/elf_generic.h>
|
|
||||||
#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;
|
|
@ -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 <sys/types.h>
|
|
||||||
|
|
||||||
/*
|
|
||||||
* 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_ */
|
|
@ -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 <sys/param.h>
|
|
||||||
#undef _KERNEL
|
|
||||||
#include <sys/types.h>
|
|
||||||
#include <sys/stat.h>
|
|
||||||
#include <sys/wait.h>
|
|
||||||
|
|
||||||
#include <err.h>
|
|
||||||
#include <fcntl.h>
|
|
||||||
#include <stdio.h>
|
|
||||||
#include <stdlib.h>
|
|
||||||
#include <unistd.h>
|
|
||||||
|
|
||||||
#include <a.out.h>
|
|
||||||
|
|
||||||
#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;
|
|
||||||
}
|
|
@ -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.
|
|
@ -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 <sys/types.h>
|
|
||||||
#include <err.h>
|
|
||||||
#include <paths.h>
|
|
||||||
#include <stdio.h>
|
|
||||||
#include <stdlib.h>
|
|
||||||
#include <string.h>
|
|
||||||
#include <unistd.h>
|
|
||||||
|
|
||||||
#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);
|
|
||||||
}
|
|
@ -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);
|
|
@ -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 <sys/types.h>
|
|
||||||
#include <sys/endian.h>
|
|
||||||
#include <sys/wait.h>
|
|
||||||
|
|
||||||
#include <err.h>
|
|
||||||
#include <fcntl.h>
|
|
||||||
#include <stdio.h>
|
|
||||||
#include <stdlib.h>
|
|
||||||
#include <string.h>
|
|
||||||
#include <unistd.h>
|
|
||||||
|
|
||||||
#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);
|
|
||||||
}
|
|
||||||
}
|
|
@ -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 <err.h>
|
|
||||||
#include <string.h>
|
|
||||||
#include <unistd.h>
|
|
||||||
|
|
||||||
#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);
|
|
||||||
}
|
|
Loading…
Reference in New Issue
Block a user