summaryrefslogtreecommitdiffstats
path: root/usr.bin/kzip
diff options
context:
space:
mode:
Diffstat (limited to 'usr.bin/kzip')
-rw-r--r--usr.bin/kzip/Makefile6
-rw-r--r--usr.bin/kzip/kzip.875
-rw-r--r--usr.bin/kzip/kzip.c337
3 files changed, 0 insertions, 418 deletions
diff --git a/usr.bin/kzip/Makefile b/usr.bin/kzip/Makefile
deleted file mode 100644
index 8ff6f7f..0000000
--- a/usr.bin/kzip/Makefile
+++ /dev/null
@@ -1,6 +0,0 @@
-# $FreeBSD$
-
-PROG= kzip
-MAN8= kzip.8
-
-.include <bsd.prog.mk>
diff --git a/usr.bin/kzip/kzip.8 b/usr.bin/kzip/kzip.8
deleted file mode 100644
index a966d36..0000000
--- a/usr.bin/kzip/kzip.8
+++ /dev/null
@@ -1,75 +0,0 @@
-.\"
-.\" Copyright (c) 1996 David E. O'Brien
-.\"
-.\" 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 DEVELOPERS ``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 DEVELOPERS 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 15, 1996
-.Os
-.Dt KZIP 8
-.Sh NAME
-.Nm kzip
-.Nd compresses kernels
-.Sh SYNOPSIS
-.Nm
-.Op Fl v
-.Op Fl l Ar loadaddr
-.Ar kernel
-.Sh DESCRIPTION
-This program compresses a kernel using
-.Xr gzip 1
-to reduce its disk storage requirements.
-It does not reduce the memory footprint once loaded into memory.
-You lose all the symbols, so usability is limited.
-Its main usage is making kernels for install and fixit floppies, etc.
-.Pp
-The following options are available:
-.Bl -tag -width flag
-.It Fl v
-Verbose mode, reports how much memory is being used by the kernel
-after compression. Also allows you to check to make sure your kernel
-is not going past the 4MB boundary.
-.It Fl l Ar loadaddr
-Specify the address to load the kernel into memory at.
-.Sh DIAGNOSTICS
-The
-.Nm
-utility returns with exit code 1 if given invalid arguments.
-Exit code two means
-.Nm
-was unable to read or process the kernel file.
-.Sh SEE ALSO
-.Xr gzip 1
-.\" .Sh STANDARDS
-.Sh HISTORY
-The
-.Nm
-command appeared in
-.Fx 2.0.5 .
-Obtained from Linux via 386BSD -- based on tools/build.c by Linus Torvalds,
-and ported to 386BSD by Serge Vakulenko.
-.Sh AUTHORS
-This man page was written by
-.An David E. O'Brien .
-.\" .Sh BUGS
diff --git a/usr.bin/kzip/kzip.c b/usr.bin/kzip/kzip.c
deleted file mode 100644
index 5af945a..0000000
--- a/usr.bin/kzip/kzip.c
+++ /dev/null
@@ -1,337 +0,0 @@
-/*
- * ----------------------------------------------------------------------------
- * "THE BEER-WARE LICENSE" (Revision 42):
- * <phk@login.dknet.dk> wrote this file. As long as you retain this notice you
- * can do whatever you want with this stuff. If we meet some day, and you think
- * this stuff is worth it, you can buy me a beer in return. Poul-Henning Kamp
- * ----------------------------------------------------------------------------
- *
- * Copyright (C) 1993 Hannu Savolainen
- * Ported to 386bsd by Serge Vakulenko
- * based on tools/build.c by Linus Torvalds
- */
-
-#ifndef lint
-static const char rcsid[] =
- "$FreeBSD$";
-#endif /* not lint */
-
-#include <err.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <unistd.h>
-#include <sys/file.h>
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <sys/param.h>
-#include <sys/wait.h>
-#include <a.out.h>
-#include <string.h>
-
-#define MAXIMAGE (2*1024*1024)
- /* This is the limit because a kzip'ed kernel loads at 3Mb and
- * ends up at 1Mb
- */
-static void
-usage()
-{
- fprintf(stderr, "usage: kzip [-v] [ -l loadaddr] kernel\n");
- exit(1);
-}
-
-int
-main(int argc, char **argv)
-{
- pid_t Pext, Pgzip, Ppiggy, Pld;
- int pipe1[2], pipe2[2];
- int status, fdi, fdo, fdn, c, verbose;
- int size;
- struct exec hdr;
- int zip_size, offset;
- struct stat st;
- u_long forceaddr = 0, entry;
- char *kernname;
- char obj[MAXPATHLEN + 1];
- char out[MAXPATHLEN + 1];
- char base[32];
-
- while ((c = getopt(argc, argv, "l:v")) != -1) {
- switch (c) {
- case 'l':
- forceaddr = strtoul(optarg, NULL, 0);
- if (forceaddr == 0)
- errx(1, "invalid load address");
- break;
- case 'v':
- verbose++;
- break;
- default:
- usage();
- }
- }
-
- if ((argc - optind) != 1)
- usage();
-
- argc -= optind;
- argv += optind;
-
- kernname = argv[0];
-
- if (strlen(kernname) > MAXPATHLEN - 3)
- errx(1, "%s: File name too long", kernname);
- strcpy(obj, kernname); strcat(obj,".o");
- strcpy(out, kernname); strcat(out,".kz");
-
- fdi = open(kernname ,O_RDONLY);
- if(fdi<0) {
- warn("%s", kernname);
- return 2;
- }
-
- /* figure out how big the uncompressed image will be */
- if (read (fdi, (char *)&hdr, sizeof(hdr)) != sizeof(hdr))
- err(2, "%s", argv[1]);
-
- size = hdr.a_text + hdr.a_data + hdr.a_bss;
- entry = hdr.a_entry & 0x00FFFFFF;
-
- lseek (fdi, 0, SEEK_SET);
-
- if (verbose) {
- printf("real kernel start address will be: 0x%x\n", entry);
- printf("real kernel end address will be: 0x%x\n", entry+size);
- }
-
-
- fdo = open(obj,O_WRONLY|O_TRUNC|O_CREAT,0666);
- if(fdo<0) {
- warn("%s", obj);
- return 2;
- }
-
- if (pipe(pipe1) < 0) { perror("pipe()"); return 1; }
-
- if (pipe(pipe2) < 0) { perror("pipe()"); return 1; }
-
- Pext = fork();
- if (Pext < 0) { perror("fork()"); return 1; }
- if (!Pext) {
- dup2(fdi,0);
- dup2(pipe1[1],1);
- close(pipe1[0]); close(pipe1[1]);
- close(pipe2[0]); close(pipe2[1]);
- close(fdi); close(fdo);
- extract(kernname);
- exit(0);
- }
-
- Pgzip = fork();
- if (Pgzip < 0) { perror("fork()"); return 1; }
- if (!Pgzip) {
- dup2(pipe1[0],0);
- dup2(pipe2[1],1);
- close(pipe1[0]); close(pipe1[1]);
- close(pipe2[0]); close(pipe2[1]);
- close(fdi); close(fdo);
- execlp("gzip", "gzip", "-9", "-n", 0);
- exit (0);
- }
-
- Ppiggy = fork();
- if (Ppiggy < 0) { warn("fork()"); return 1; }
- if (!Ppiggy) {
- dup2(pipe2[0],0);
- dup2(fdo,1);
- close(pipe1[0]); close(pipe1[1]);
- close(pipe2[0]); close(pipe2[1]);
- close(fdi); close(fdo);
- piggyback(obj);
- exit(0);
- }
-
- close(pipe1[0]); close(pipe1[1]);
- close(pipe2[0]); close(pipe2[1]);
- close(fdi); close(fdo);
-
- if (waitpid(Pext, &status,0) < 0)
- { warn("waitpid(Pextract)"); return 1; }
-
- if(status) {
- warnx("extract returned %x",status);
- return 3;
- }
-
- if (waitpid(Pgzip, &status,0) < 0)
- { perror("waitpid(Pgzip)"); return 1; }
-
- if(status) {
- warnx("gzip returned %x",status);
- return 3;
- }
-
- if (waitpid(Ppiggy, &status,0) < 0)
- { warn("waitpid(Ppiggy)"); return 1; }
-
- if(status) {
- warnx("piggyback returned %x",status);
- return 3;
- }
-
- if (forceaddr)
- offset = forceaddr;
- else {
- /* a kludge to dynamically figure out where to start it */
- if (stat (obj, &st) < 0) {
- warn("cannot get size of compressed data");
- return 3;
- }
- zip_size = (int)st.st_size;
- offset = entry + size - zip_size + 0x8000; /* fudge factor */
- }
- sprintf(base, "0x%x", roundup(offset, 4096));
-
- Pld = fork();
- if (Pld < 0) { warn("fork()"); return 1; }
- if (!Pld) {
- execlp("ld",
- "ld",
- "-aout",
- "-Bstatic",
- "-Z",
- "-T",
- base,
- "-o",
- out,
- "/usr/lib/aout/kzhead.o",
- obj,
- "/usr/lib/aout/kztail.o",
- 0);
- exit(2);
- }
-
- if (waitpid(Pld, &status,0) < 0)
- { warn("waitpid(Pld)"); return 1; }
-
- if(status) {
- warnx("ld returned %x",status);
- return 3;
- }
-
- if (verbose) {
-
- fdn = open(obj ,O_RDONLY);
- if(fdn<0) {
- warn("%s", obj);
- return 3;
- }
-
- /* figure out how big the compressed image is */
- if (read (fdn, (char *)&hdr, sizeof(hdr)) != sizeof(hdr)) {
- warn("%s", obj);
- return 3;
- }
- close(fdn);
-
- size = hdr.a_text + hdr.a_data + hdr.a_bss;
-
- printf("kzip data start address will be: 0x%x\n",offset);
- printf("kzip data end address will be: 0x%x\n",offset+size);
- }
-
- unlink(obj);
- exit(0);
-}
-
-int
-extract (char *file)
-{
- int sz;
- char buf[BUFSIZ];
- struct exec hdr;
-
- if (read (0, (char *)&hdr, sizeof(hdr)) != sizeof(hdr))
- err(2, "%s", file);
- if (hdr.a_magic != ZMAGIC)
- errx(2, "bad magic in file %s, probably not a kernel", file);
- if (lseek (0, N_TXTOFF(hdr), 0) < 0)
- err(2, "%s", file);
-
- sz = N_SYMOFF (hdr) - N_TXTOFF (hdr);
-
- while (sz) {
- int l, n;
-
- l = sz;
- if (l > sizeof(buf))
- l = sizeof(buf);
-
- n = read (0, buf, l);
- if (n != l) {
- if (n == -1)
- err(1, "%s", file);
- else
- errx(1, "unexpected EOF");
- }
-
- write (1, buf, l);
- sz -= l;
- }
- exit(0);
-}
-
-
-char string_names[] = {"_input_data\0_input_len\0"};
-
-struct nlist var_names[2] = { /* Symbol table */
- { { (char*) 4 }, N_EXT|N_TEXT, 0, 0, 0 }, /* _input_data */
- { { (char*) 16 }, N_EXT|N_TEXT, 0, 0, 0 }, /* _input_len */
-};
-
-int
-piggyback(char *file)
-{
- int n, len;
- struct exec hdr; /* object header */
- char image[MAXIMAGE]; /* kernel image buffer */
-
- len = 0;
- while ((n = read (0, &image[len], sizeof(image)-len+1)) > 0)
- len += n;
-
- if (n < 0)
- err(1, "stdin");
-
- if (len >= sizeof(image))
- errx(1, "input too large");
-
- /*
- * Output object header
- */
- memset(&hdr,0,sizeof hdr);
- hdr.a_magic = OMAGIC;
- hdr.a_text = len + sizeof(long);
- hdr.a_syms = sizeof(var_names);
- write (1, (char *)&hdr, sizeof(hdr));
-
- /*
- * Output text segment (compressed system & len)
- */
- write (1, image, len);
- write (1, (char *)&len, sizeof(len));
-
- /*
- * Output symbol table
- */
- var_names[1].n_value = len;
- write (1, (char *)&var_names, sizeof(var_names));
-
- /*
- * Output string table
- */
- len = sizeof(string_names) + sizeof(len);
- write (1, (char *)&len, sizeof(len));
- write (1, string_names, sizeof(string_names));
-
- return (0);
-}
OpenPOWER on IntegriCloud