dumphdr
struct dumphdr *k_dumphdr; /* Dump header for post-mortem */
Fseek(dumphdr.dump_data, dumpf);
saved >= dumphdr.dump_npages) {
if (saved >= dumphdr.dump_npages)
size_t pfn_table_size = dumphdr.dump_npages * sizeof (pfn_t);
size_t ksyms_size = dumphdr.dump_ksyms_size;
size_t ksyms_csize = dumphdr.dump_ksyms_csize;
Pread(dumpfd, ksyms_cbase, ksyms_csize, dumphdr.dump_ksyms);
Pread(dumpfd, pfn_table, pfn_table_size, dumphdr.dump_pfn);
end_progress(saved, dumphdr.dump_npages);
dumphdr.dump_npages);
if (saved != dumphdr.dump_npages)
Pwrite(dumpfd, &dumphdr, sizeof (dumphdr), endoff);
if (dumphdr.dump_panicstring[0] != '\0' && !rflag) {
dumphdr.dump_panicstring);
if ((dumphdr.dump_flags & DF_COMPLETE) == 0) {
if (dumphdr.dump_fm_panic)
ctime(&dumphdr.dump_crashtime));
sizeof (dumphdr) + sizeof (datahdr));
dumphdr.dump_utsname.sysname,
dumphdr.dump_utsname.nodename,
dumphdr.dump_utsname.release,
dumphdr.dump_utsname.version,
dumphdr.dump_utsname.machine);
dumphdr.dump_flags & DF_LIVE ? "Live" :
"Crash", ctime(&dumphdr.dump_crashtime));
dumphdr.dump_npages);
dumphdr.dump_npages / sec);
dumphdr.dump_utsname.sysname,
dumphdr.dump_utsname.nodename,
dumphdr.dump_utsname.release,
dumphdr.dump_utsname.version,
dumphdr.dump_utsname.machine);
Pread(dumpfd, &dumphdr, sizeof (dumphdr), endoff);
Pread(dumpfd, &datahdr, sizeof (datahdr), endoff + sizeof (dumphdr));
pagesize = dumphdr.dump_pagesize;
if (dumphdr.dump_magic != DUMP_MAGIC)
dumphdr.dump_magic);
if ((dumphdr.dump_flags & DF_VALID) == 0 && !disregard_valid_flag)
if (dumphdr.dump_version != DUMP_VERSION)
dumphdr.dump_version, progname, DUMP_VERSION);
if (dumphdr.dump_wordsize != DUMP_WORDSIZE)
dumphdr.dump_wordsize, DUMP_WORDSIZE);
Pread(dumpfd, &corehdr, sizeof (dumphdr_t), dumphdr.dump_start);
dumphdr.dump_flags &= ~DF_VALID;
if (memcmp(&corehdr, &dumphdr, sizeof (dumphdr_t)) != 0) {
Pwrite(dumpfd, &dumphdr, sizeof (dumphdr), endoff);
dumpsize = dumphdr.dump_data - dumphdr.dump_start;
datasize = dumphdr.dump_npages * pagesize;
Fseek(dumphdr.dump_map, in);
pgcnt_t np = dumphdr.dump_npages;
Fseek(dumphdr.dump_data, in);
dumphdr.dump_npages - np, csize, csize,
total = dumphdr.dump_ksyms_csize +
dumphdr.dump_npages * sizeof (pfn_t) +
dumphdr.dump_nvtop * sizeof (mem_vtop_t);
dumphdr.dump_npages;
Copy(dumphdr.dump_ksyms, dumphdr.dump_ksyms_csize, &coreoff, corefd,
Copy(dumphdr.dump_pfn, dumphdr.dump_npages * sizeof (pfn_t), &coreoff,
Copy(dumphdr.dump_map, dumphdr.dump_nvtop * sizeof (mem_vtop_t),
Copy(dumphdr.dump_data, datahdr.dump_data_csize, &coreoff,
Pwrite(dumpfd, &dumphdr, sizeof (dumphdr), endoff);
static dumphdr_t corehdr, dumphdr; /* initial and terminal dumphdrs */
#define BTOP(b) ((b) >> dumphdr.dump_pageshift)
#define PTOB(p) ((p) << dumphdr.dump_pageshift)
struct dumphdr kvm_dump;
dumphdr_t *dumphdr; /* dump header */
if (dumphdr == NULL) {
dumphdr = kmem_zalloc(sizeof (dumphdr_t), KM_SLEEP);
dumphdr->dump_magic = DUMP_MAGIC;
dumphdr->dump_version = DUMP_VERSION;
dumphdr->dump_wordsize = DUMP_WORDSIZE;
dumphdr->dump_pageshift = PAGESHIFT;
dumphdr->dump_pagesize = PAGESIZE;
dumphdr->dump_utsname = utsname;
(void) strcpy(dumphdr->dump_platform, platform);
(void) strncpy(dumphdr->dump_uuid, dump_get_uuid(),
sizeof (dumphdr->dump_uuid));
dumphdr->dump_npages++;
dumphdr->dump_nvtop++;
dumphdr->dump_npages++;
if (dumpvp == NULL || dumphdr == NULL)
if (dumpvp == NULL || dumphdr == NULL)
if (dumpvp == NULL || dumphdr == NULL || log_consq == NULL)
ASSERT(ds->npages <= dumphdr->dump_npages);
ds->percent = ds->npages * 100LL / dumphdr->dump_npages;
P("dump_flags,0x%x\n", dumphdr->dump_flags);
if (dumpvp == NULL || dumphdr == NULL) {
dumphdr->dump_start = P2ROUNDUP(dumpvp_size / 5, DUMP_OFFSET);
dumphdr->dump_start = DUMP_OFFSET;
dumphdr->dump_flags = DF_VALID | DF_COMPLETE | DF_LIVE | DF_COMPRESSED;
dumphdr->dump_crashtime = gethrestime_sec();
dumphdr->dump_npages = 0;
dumphdr->dump_nvtop = 0;
dumphdr->dump_flags &= ~DF_LIVE;
(void) vsnprintf(dumphdr->dump_panicstring, DUMP_PANICSIZE,
dumphdr->dump_start, content);
bcopy(utsname.nodename, dumphdr->dump_utsname.nodename, SYS_NMLN);
dumpbuf.vp_off = dumphdr->dump_ksyms = dumphdr->dump_start + PAGESIZE;
dumphdr->dump_ksyms_size = dumphdr->dump_ksyms_csize =
dumphdr->dump_map = dumpvp_flush();
dumphdr->dump_nvtop += dump_plat_addr();
dumphdr->dump_npages = dumpcfg.bitmapsize;
dumphdr->dump_flags |= DF_ALL;
dumphdr->dump_flags |= DF_CURPROC;
dumphdr->dump_flags |= DF_KERNEL;
dumphdr->dump_flags |= DF_KERNEL;
dumphdr->dump_hashmask = (1 << highbit(dumphdr->dump_nvtop - 1)) - 1;
dumphdr->dump_pfn = dumpvp_flush();
dumphdr->dump_data = dumpvp_flush();
(dumphdr->dump_flags & DF_LIVE) != 0;
dumphdr->dump_npages = ds->npages;
dumphdr->dump_npages += dump_plat_data(dumpcfg.cbuf[0].buf);
if (dump_ioerr || ds->npages < dumphdr->dump_npages)
dumphdr->dump_flags &= ~DF_COMPLETE;
dumphdr->dump_fm_panic = is_fm_panic();
datahdr.dump_data_csize = dumpvp_flush() - dumphdr->dump_data;
dumpbuf.vp_off = dumphdr->dump_start;
dumpvp_write(dumphdr, sizeof (dumphdr_t));
dumpvp_write(dumphdr, sizeof (dumphdr_t));
extern struct dumphdr *dumphdr;
dumphdr->dump_flags &= ~DF_COMPLETE;
dumphdr->dump_flags &= ~DF_COMPLETE;