diff options
author | rnordier <rnordier@FreeBSD.org> | 2000-11-04 13:02:00 +0000 |
---|---|---|
committer | rnordier <rnordier@FreeBSD.org> | 2000-11-04 13:02:00 +0000 |
commit | 18e0fe6967f684c8adb8dd9db3a8cb24f70e7705 (patch) | |
tree | 796a6ec2a8cda6145d54708de7195fc62b04838a /usr.sbin/kgzip/kgzip.c | |
parent | 2cfec00a84116cb5277eecec357964eb0c113954 (diff) | |
download | FreeBSD-src-18e0fe6967f684c8adb8dd9db3a8cb24f70e7705.zip FreeBSD-src-18e0fe6967f684c8adb8dd9db3a8cb24f70e7705.tar.gz |
Add support for creating a.out output files in addition to ELF.
This allows booting from compressed binaries using older bootstraps.
Thanks to: dwmalone
Diffstat (limited to 'usr.sbin/kgzip/kgzip.c')
-rw-r--r-- | usr.sbin/kgzip/kgzip.c | 20 |
1 files changed, 16 insertions, 4 deletions
diff --git a/usr.sbin/kgzip/kgzip.c b/usr.sbin/kgzip/kgzip.c index 3c3df36..5e96432 100644 --- a/usr.sbin/kgzip/kgzip.c +++ b/usr.sbin/kgzip/kgzip.c @@ -49,6 +49,7 @@ static const char rcsid[] = #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 */ @@ -70,11 +71,11 @@ main(int argc, char *argv[]) tmpdir = getenv("TMPDIR"); if (asprintf(&tname, "%s/kgzXXXXXXXXXX", tmpdir == NULL ? _PATH_TMP : tmpdir) == -1) - errx(1, "Out of memory"); + errx(1, "Out of memory"); output = NULL; cflag = vflag = 0; - while ((c = getopt(argc, argv, "cvl:o:")) != -1) + while ((c = getopt(argc, argv, "cvf:l:o:")) != -1) switch (c) { case 'c': cflag = 1; @@ -82,6 +83,14 @@ main(int argc, char *argv[]) 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; @@ -98,8 +107,11 @@ main(int argc, char *argv[]) atexit(cleanup); mk_fn(cflag, *argv, output, fn); memset(&kh, 0, sizeof(kh)); - if (fn[FN_SRC]) + 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) @@ -159,6 +171,6 @@ static void usage(void) { fprintf(stderr, - "usage: kgzip [-cv] [-l file] [-o filename] file\n"); + "usage: kgzip [-cv] [-f format] [-l file] [-o filename] file\n"); exit(1); } |