From 26a9c7b7e1e82804f3da47e90ec13ac67f727a27 Mon Sep 17 00:00:00 2001 From: Jake Burkholder Date: Mon, 13 May 2002 02:52:35 +0000 Subject: [PATCH] These were repo-copied to dump_machdep.c. --- sys/alpha/alpha/alphadump.c | 116 -------------- sys/i386/i386/i386dump.c | 123 --------------- sys/ia64/ia64/ia64dump.c | 299 ------------------------------------ 3 files changed, 538 deletions(-) delete mode 100644 sys/alpha/alpha/alphadump.c delete mode 100644 sys/i386/i386/i386dump.c delete mode 100644 sys/ia64/ia64/ia64dump.c diff --git a/sys/alpha/alpha/alphadump.c b/sys/alpha/alpha/alphadump.c deleted file mode 100644 index aff15945ca14..000000000000 --- a/sys/alpha/alpha/alphadump.c +++ /dev/null @@ -1,116 +0,0 @@ -/*- - * Copyright (c) 2002 Poul-Henning Kamp - * Copyright (c) 2002 Networks Associates Technology, Inc. - * All rights reserved. - * - * This software was developed for the FreeBSD Project by Poul-Henning Kamp - * and NAI Labs, the Security Research Division of Network Associates, Inc. - * under DARPA/SPAWAR contract N66001-01-C-8035 ("CBOSS"), as part of the - * DARPA CHATS research program. - * - * 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. - * 3. The names of the authors may not be used to endorse or promote - * products derived from this software without specific prior written - * permission. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - * $FreeBSD$ - */ - -#include -#include -#include -#include -#include -#include -#include -#include - -CTASSERT(sizeof(struct kerneldumpheader) == 512); - -static struct kerneldumpheader kdh; - -void -dumpsys(struct dumperinfo *di) -{ - off_t dumplo; - vm_offset_t a, addr; - u_int count, left, u; - void *va; - int i, mb; - - printf("Dumping %u MB\n", Maxmem / (1024*1024 / PAGE_SIZE)); - - /* Fill in the kernel dump header */ - strcpy(kdh.magic, KERNELDUMPMAGIC); - strcpy(kdh.architecture, "alpha"); - kdh.version = htod32(KERNELDUMPVERSION); - kdh.architectureversion = htod32(KERNELDUMP_ALPHA_VERSION); - kdh.dumplength = htod64(Maxmem * (off_t)PAGE_SIZE); - kdh.dumptime = htod64(time_second); - kdh.blocksize = htod32(di->blocksize); - strncpy(kdh.hostname, hostname, sizeof kdh.hostname); - strncpy(kdh.versionstring, version, sizeof kdh.versionstring); - if (panicstr != NULL) - strncpy(kdh.panicstring, panicstr, sizeof kdh.panicstring); - kdh.parity = kerneldump_parity(&kdh); - - dumplo = di->mediaoffset + di->mediasize - Maxmem * (off_t)PAGE_SIZE; - dumplo -= sizeof kdh * 2; - i = di->dumper(di->priv, &kdh, NULL, dumplo, sizeof kdh); - if (i) - printf("\nDump failed writing header (%d)\n", i); - dumplo += sizeof kdh; - i = 0; - addr = 0; - va = 0; - mb = 0; - for (count = 0; count < Maxmem;) { - left = Maxmem - count; - if (left > MAXDUMPPGS) - left = MAXDUMPPGS; - for (u = 0; u < left; u++) { - a = addr + u * PAGE_SIZE; - if (!is_physical_memory(a)) - a = 0; - va = pmap_kenter_temporary(trunc_page(a), u); - } - i = count / (16*1024*1024 / PAGE_SIZE); - if (i != mb) { - printf(" %d", count / (1024 * 1024 / PAGE_SIZE)); - mb = i; - } - i = di->dumper(di->priv, va, NULL, dumplo, left * PAGE_SIZE); - if (i) - break; - count += left; - dumplo += left * PAGE_SIZE; - addr += left * PAGE_SIZE; - } - if (i) - printf("\nDump failed writing data (%d)\n", i); - i = di->dumper(di->priv, &kdh, NULL, dumplo, sizeof kdh); - if (i) - printf("\nDump failed writing trailer (%d)\n", i); - di->dumper(di->priv, NULL, NULL, 0, 0); /* tell them we are done */ - printf("\nDump complete\n"); - return; -} diff --git a/sys/i386/i386/i386dump.c b/sys/i386/i386/i386dump.c deleted file mode 100644 index c671a5a54b4d..000000000000 --- a/sys/i386/i386/i386dump.c +++ /dev/null @@ -1,123 +0,0 @@ -/*- - * Copyright (c) 2002 Poul-Henning Kamp - * Copyright (c) 2002 Networks Associates Technology, Inc. - * All rights reserved. - * - * This software was developed for the FreeBSD Project by Poul-Henning Kamp - * and NAI Labs, the Security Research Division of Network Associates, Inc. - * under DARPA/SPAWAR contract N66001-01-C-8035 ("CBOSS"), as part of the - * DARPA CHATS research program. - * - * 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. - * 3. The names of the authors may not be used to endorse or promote - * products derived from this software without specific prior written - * permission. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - * $FreeBSD$ - */ - -#include -#include -#include -#include -#include -#include -#include -#include -#include - -CTASSERT(sizeof(struct kerneldumpheader) == 512); - -static struct kerneldumpheader kdh; - -void -dumpsys(struct dumperinfo *di) -{ - off_t dumplo; - vm_offset_t a, addr; - u_int count, left, u; - void *va; - int i, mb; - int c; - - printf("Dumping %u MB\n", Maxmem / (1024*1024 / PAGE_SIZE)); - - /* Fill in the kernel dump header */ - strcpy(kdh.magic, KERNELDUMPMAGIC); - strcpy(kdh.architecture, "i386"); - kdh.version = htod32(KERNELDUMPVERSION); - kdh.architectureversion = htod32(KERNELDUMP_I386_VERSION); - kdh.dumplength = htod64(Maxmem * (off_t)PAGE_SIZE); - kdh.dumptime = htod64(time_second); - kdh.blocksize = htod32(di->blocksize); - strncpy(kdh.hostname, hostname, sizeof kdh.hostname); - strncpy(kdh.versionstring, version, sizeof kdh.versionstring); - if (panicstr != NULL) - strncpy(kdh.panicstring, panicstr, sizeof kdh.panicstring); - kdh.parity = kerneldump_parity(&kdh); - - dumplo = di->mediaoffset + di->mediasize - Maxmem * (off_t)PAGE_SIZE; - dumplo -= sizeof kdh * 2; - i = di->dumper(di->priv, &kdh, NULL, dumplo, sizeof kdh); - if (i) - printf("\nDump failed writing header (%d)\n", i); - dumplo += sizeof kdh; - i = 0; - addr = 0; - va = 0; - mb = 0; - for (count = 0; count < Maxmem;) { - left = Maxmem - count; - if (left > MAXDUMPPGS) - left = MAXDUMPPGS; - for (u = 0; u < left; u++) { - a = addr + u * PAGE_SIZE; - if (!is_physical_memory(a)) - a = 0; - va = pmap_kenter_temporary(trunc_page(a), u); - } - i = count / (16*1024*1024 / PAGE_SIZE); - if (i != mb) { - printf(" %d", count / (1024 * 1024 / PAGE_SIZE)); - mb = i; - } - i = di->dumper(di->priv, va, NULL, dumplo, left * PAGE_SIZE); - if (i) - break; - count += left; - dumplo += left * PAGE_SIZE; - addr += left * PAGE_SIZE; - if ((c = cncheckc()) == 0x03) { - printf("\nDump aborted.\n"); - return; - } else if (c != -1) - printf("[CTRL-C to abort] "); - } - if (i) - printf("\nDump failed writing data (%d)\n", i); - i = di->dumper(di->priv, &kdh, NULL, dumplo, sizeof kdh); - if (i) - printf("\nDump failed writing trailer (%d)\n", i); - di->dumper(di->priv, NULL, NULL, 0, 0); /* tell them we are done */ - printf("\nDump complete\n"); - return; -} diff --git a/sys/ia64/ia64/ia64dump.c b/sys/ia64/ia64/ia64dump.c deleted file mode 100644 index 4afa31f11814..000000000000 --- a/sys/ia64/ia64/ia64dump.c +++ /dev/null @@ -1,299 +0,0 @@ -/* - * Copyright (c) 2002 Marcel Moolenaar - * 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 ``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 BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * $FreeBSD$ - */ - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -CTASSERT(sizeof(struct kerneldumpheader) == 512); - -#define MD_ALIGN(x) (((off_t)(x) + EFI_PAGE_MASK) & ~EFI_PAGE_MASK) -#define DEV_ALIGN(x) (((off_t)(x) + (DEV_BSIZE-1)) & ~(DEV_BSIZE-1)) - -typedef int callback_t(EFI_MEMORY_DESCRIPTOR*, int, void*); - -static struct kerneldumpheader kdh; -static off_t dumplo, fileofs; - -/* Handle buffered writes. */ -static char buffer[DEV_BSIZE]; -static size_t fragsz; - -/* XXX should be MI */ -static void -mkdumpheader(struct kerneldumpheader *kdh, uint32_t archver, uint64_t dumplen, - uint32_t blksz) -{ - - bzero(kdh, sizeof(*kdh)); - strncpy(kdh->magic, KERNELDUMPMAGIC, sizeof(kdh->magic)); - strncpy(kdh->architecture, MACHINE_ARCH, sizeof(kdh->architecture)); - kdh->version = htod32(KERNELDUMPVERSION); - kdh->architectureversion = htod32(archver); - kdh->dumplength = htod64(dumplen); - kdh->dumptime = htod64(time_second); - kdh->blocksize = htod32(blksz); - strncpy(kdh->hostname, hostname, sizeof(kdh->hostname)); - strncpy(kdh->versionstring, version, sizeof(kdh->versionstring)); - if (panicstr != NULL) - strncpy(kdh->panicstring, panicstr, sizeof(kdh->panicstring)); - kdh->parity = kerneldump_parity(kdh); -} - -static int -buf_write(struct dumperinfo *di, char *ptr, size_t sz) -{ - size_t len; - int error; - - while (sz) { - len = DEV_BSIZE - fragsz; - if (len > sz) - len = sz; - bcopy(ptr, buffer + fragsz, len); - fragsz += len; - ptr += len; - sz -= len; - if (fragsz == DEV_BSIZE) { - error = di->dumper(di->priv, buffer, NULL, dumplo, - DEV_BSIZE); - if (error) - return error; - dumplo += DEV_BSIZE; - fragsz = 0; - } - } - - return (0); -} - -static int -buf_flush(struct dumperinfo *di) -{ - int error; - - if (fragsz == 0) - return (0); - - error = di->dumper(di->priv, buffer, NULL, dumplo, DEV_BSIZE); - dumplo += DEV_BSIZE; - return (error); -} - -static int -cb_dumpdata(EFI_MEMORY_DESCRIPTOR *mdp, int seqnr, void *arg) -{ - struct dumperinfo *di = (struct dumperinfo*)arg; - vm_offset_t pa; - uint64_t pgs; - size_t counter, sz; - int error, twiddle; - - error = 0; /* catch case in which mdp->NumberOfPages is 0 */ - counter = 0; /* Update twiddle every 16MB */ - twiddle = 0; - pgs = mdp->NumberOfPages; - pa = IA64_PHYS_TO_RR7(mdp->PhysicalStart); - - printf(" chunk %d: %ld pages ", seqnr, (long)pgs); - - while (pgs) { - sz = (pgs > (DFLTPHYS >> EFI_PAGE_SHIFT)) - ? DFLTPHYS : pgs << EFI_PAGE_SHIFT; - counter += sz; - if (counter >> 24) { - printf("%c\b", "|/-\\"[twiddle++ & 3]); - counter &= (1<<24) - 1; - } - error = di->dumper(di->priv, (void*)pa, NULL, dumplo, sz); - if (error) - break; - dumplo += sz; - pgs -= sz >> EFI_PAGE_SHIFT; - pa += sz; - } - printf("... %s\n", (error) ? "fail" : "ok"); - return (error); -} - -static int -cb_dumphdr(EFI_MEMORY_DESCRIPTOR *mdp, int seqnr, void *arg) -{ - struct dumperinfo *di = (struct dumperinfo*)arg; - Elf64_Phdr phdr; - int error; - - bzero(&phdr, sizeof(phdr)); - phdr.p_type = PT_LOAD; - phdr.p_flags = PF_R; /* XXX */ - phdr.p_offset = fileofs; - phdr.p_vaddr = mdp->VirtualStart; /* XXX probably bogus. */ - phdr.p_paddr = mdp->PhysicalStart; - phdr.p_filesz = mdp->NumberOfPages << EFI_PAGE_SHIFT; - phdr.p_memsz = mdp->NumberOfPages << EFI_PAGE_SHIFT; - phdr.p_align = EFI_PAGE_SIZE; - - error = buf_write(di->priv, (char*)&phdr, sizeof(phdr)); - fileofs += phdr.p_filesz; - return (error); -} - -static int -cb_size(EFI_MEMORY_DESCRIPTOR *mdp, int seqnr, void *arg) -{ - uint64_t *sz = (uint64_t*)arg; - - *sz += (uint64_t)mdp->NumberOfPages << EFI_PAGE_SHIFT; - return (0); -} - -static int -foreach_chunk(callback_t cb, void *arg) -{ - EFI_MEMORY_DESCRIPTOR *mdp; - int error, i, mdcount, seqnr; - - mdp = (EFI_MEMORY_DESCRIPTOR *)IA64_PHYS_TO_RR7(bootinfo.bi_memmap); - mdcount = bootinfo.bi_memmap_size / bootinfo.bi_memdesc_size; - - if (mdp == NULL || mdcount == 0) - return (0); - - for (i = 0, seqnr = 0; i < mdcount; i++) { - if (mdp->Type == EfiConventionalMemory) { - error = (*cb)(mdp, seqnr++, arg); - if (error) - return (-error); - } - mdp = NextMemoryDescriptor(mdp, bootinfo.bi_memdesc_size); - } - - return (seqnr); -} - -void -dumpsys(struct dumperinfo *di) -{ - Elf64_Ehdr ehdr; - uint64_t dumpsize; - off_t hdrgap; - size_t hdrsz; - int error; - - bzero(&ehdr, sizeof(ehdr)); - ehdr.e_ident[EI_MAG0] = ELFMAG0; - ehdr.e_ident[EI_MAG1] = ELFMAG1; - ehdr.e_ident[EI_MAG2] = ELFMAG2; - ehdr.e_ident[EI_MAG3] = ELFMAG3; - ehdr.e_ident[EI_CLASS] = ELFCLASS64; -#if BYTE_ORDER == LITTLE_ENDIAN - ehdr.e_ident[EI_DATA] = ELFDATA2LSB; -#else - ehdr.e_ident[EI_DATA] = ELFDATA2MSB; -#endif - ehdr.e_ident[EI_VERSION] = EV_CURRENT; - ehdr.e_ident[EI_OSABI] = ELFOSABI_STANDALONE; /* XXX big picture? */ - ehdr.e_type = ET_CORE; - ehdr.e_machine = EM_IA_64; - ehdr.e_phoff = sizeof(ehdr); - ehdr.e_flags = EF_IA_64_ABSOLUTE; /* XXX misuse? */ - ehdr.e_ehsize = sizeof(ehdr); - ehdr.e_phentsize = sizeof(Elf64_Phdr); - ehdr.e_shentsize = sizeof(Elf64_Shdr); - - /* Calculate dump size. */ - dumpsize = 0L; - ehdr.e_phnum = foreach_chunk(cb_size, &dumpsize); - hdrsz = ehdr.e_phoff + ehdr.e_phnum * ehdr.e_phentsize; - fileofs = MD_ALIGN(hdrsz); - dumpsize += fileofs; - hdrgap = fileofs - DEV_ALIGN(hdrsz); - - /* Determine dump offset on device. */ - dumplo = di->mediaoffset + di->mediasize - dumpsize; - dumplo -= sizeof(kdh) * 2; - - mkdumpheader(&kdh, KERNELDUMP_IA64_VERSION, dumpsize, di->blocksize); - - printf("Dumping %llu MB (%d chunks)\n", dumpsize >> 20, ehdr.e_phnum); - - /* Dump leader */ - error = di->dumper(di->priv, &kdh, NULL, dumplo, sizeof(kdh)); - if (error) - goto fail; - dumplo += sizeof(kdh); - - /* Dump ELF header */ - error = buf_write(di, (char*)&ehdr, sizeof(ehdr)); - if (error) - goto fail; - - /* Dump program headers */ - error = foreach_chunk(cb_dumphdr, di); - if (error < 0) - goto fail; - buf_flush(di); - - /* - * All headers are written using blocked I/O, so we know the - * current offset is (still) block aligned. Skip the alignement - * in the file to have the segment contents aligned at page - * boundary. We cannot use MD_ALIGN on dumplo, because we don't - * care and may very well be unaligned within the dump device. - */ - dumplo += hdrgap; - - /* Dump memory chunks (updates dumplo) */ - error = foreach_chunk(cb_dumpdata, di); - if (error < 0) - goto fail; - - /* Dump trailer */ - error = di->dumper(di->priv, &kdh, NULL, dumplo, sizeof(kdh)); - if (error) - goto fail; - - /* Signal completion, signoff and exit stage left. */ - di->dumper(di->priv, NULL, NULL, 0, 0); - printf("\nDump complete\n"); - return; - - fail: - if (error < 0) - error = -error; - /* XXX It should look more like VMS :-) */ - printf("** DUMP FAILED (ERROR %d) **\n", error); -}