diff options
| author | ad <ad@NetBSD.org> | 2008-05-04 23:50:32 +0000 |
|---|---|---|
| committer | ad <ad@NetBSD.org> | 2008-05-04 23:50:32 +0000 |
| commit | b68bfe3ffa8cbc2b0789eaf53140cc11c606a59a (patch) | |
| tree | 00404cc4ee3c72ba4aa5e5e331d4f04f8a86ecd2 /sys/dev/microcode/tools | |
| parent | e724ef3c860f55beb9a62f0e454eebb0a0286e85 (diff) | |
A couple of dumb utilities:
array2bin: take array[] from array.h and spit it out as a binary.
bin2blob: take a binary file and output a compressed image as a C array.
Diffstat (limited to 'sys/dev/microcode/tools')
| -rw-r--r-- | sys/dev/microcode/tools/Makefile | 14 | ||||
| -rw-r--r-- | sys/dev/microcode/tools/array2bin.c | 61 | ||||
| -rw-r--r-- | sys/dev/microcode/tools/bin2blob.c | 112 |
3 files changed, 187 insertions, 0 deletions
diff --git a/sys/dev/microcode/tools/Makefile b/sys/dev/microcode/tools/Makefile new file mode 100644 index 00000000000..c7fedf1d5e3 --- /dev/null +++ b/sys/dev/microcode/tools/Makefile @@ -0,0 +1,14 @@ +# $NetBSD: Makefile,v 1.1 2008/05/04 23:50:32 ad Exp $ + +BIN= bin2blob array2bin + +all: ${BIN} + +bin2blob: bin2blob.c + cc -Wall -O2 -lz -o bin2blob bin2blob.c + +array2bin: array2bin.c + cc -Wall -O2 -lz -o array2bin array2bin.c + +clean: + rm -f ${BIN} *~ diff --git a/sys/dev/microcode/tools/array2bin.c b/sys/dev/microcode/tools/array2bin.c new file mode 100644 index 00000000000..34c962ed1b4 --- /dev/null +++ b/sys/dev/microcode/tools/array2bin.c @@ -0,0 +1,61 @@ +/* $NetBSD: array2bin.c,v 1.1 2008/05/04 23:50:32 ad Exp $ */ + +/*- + * Copyright (c) 2008 The NetBSD Foundation, 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 NETBSD FOUNDATION, INC. 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 FOUNDATION 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. + */ + +/* + * Takes an array from array.h named array[], and spits it out as a + * binary image. NO DECOMPRESSION IS DONE. This is for taking existing + * images formatted as C arrays, for convertion to binary files. + */ + +#include <sys/cdefs.h> +#ifndef lint +__RCSID("$NetBSD: array2bin.c,v 1.1 2008/05/04 23:50:32 ad Exp $"); +#endif /* !lint */ + +#include <sys/module.h> +#include <sys/stat.h> + +#include <stdio.h> +#include <stdlib.h> +#include <unistd.h> +#include <string.h> +#include <err.h> +#include <zlib.h> + +#include "array.h" + +int main(int, char **); + +int +main(int argc, char **argv) +{ + + write(STDOUT_FILENO, array, sizeof(array)); + + return 0; +} diff --git a/sys/dev/microcode/tools/bin2blob.c b/sys/dev/microcode/tools/bin2blob.c new file mode 100644 index 00000000000..19a348abeb0 --- /dev/null +++ b/sys/dev/microcode/tools/bin2blob.c @@ -0,0 +1,112 @@ +/* $NetBSD: bin2blob.c,v 1.1 2008/05/04 23:50:32 ad Exp $ */ + +/*- + * Copyright (c) 2008 The NetBSD Foundation, 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 NETBSD FOUNDATION, INC. 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 FOUNDATION 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. + */ + +/* + * Reads data from stdin (must be a regular file so we can do stat()), and + * outputs a 32-bit array of format: + * + * [0] signature: BLOB + * [1] original, uncompressed length + * [2] length of compressed data that follows, unpadded + * [n] zlib compressed data, padded to 4 bytes + */ + +#include <sys/cdefs.h> +#ifndef lint +__RCSID("$NetBSD: bin2blob.c,v 1.1 2008/05/04 23:50:32 ad Exp $"); +#endif /* !lint */ + +#include <sys/module.h> +#include <sys/stat.h> + +#include <stdio.h> +#include <stdlib.h> +#include <unistd.h> +#include <string.h> +#include <err.h> +#include <zlib.h> + +int main(int, char **); + +#define SIG 0x424c4f42 + +void +put(uint32_t val) +{ + static int n; + + switch (n) { + case 6: + putc('\n', stdout); + n = 0; + /* FALLTHROUGH */ + case 0: + putc('\t', stdout); + break; + } + printf("0x%08x,", val); + n++; +} + +int +main(int argc, char **argv) +{ + struct stat sb; + uint8_t *src, *dst; + u_long slen, dlen; + uint32_t *dp; + + if (fstat(STDIN_FILENO, &sb) < 0) + err(1, "stat(stdin)"); + + src = malloc(sb.st_size); + dlen = sb.st_size * 1002 / 1000 + 12 + 3 + 4*2; + dst = malloc(dlen); + if (src == NULL || dst == NULL) + errx(1, "malloc"); + + if (read(STDIN_FILENO, src, sb.st_size) != sb.st_size) + errx(1, "read"); + + slen = sb.st_size; + memset(dst, 0, dlen); + if (compress2(dst, &dlen, src, slen, 9) != Z_OK) + errx(1, "compress2"); + + printf("static const uint32_t blob[] = {\n"); + put(SIG); + put(slen); + put(dlen); + dlen = ((dlen + 3) & ~3) >> 2; + dp = (uint32_t *)dst; + while (dlen--) + put(*dp++); + printf("\n};\n"); + + exit(EXIT_SUCCESS); +} |
