----- Original Message -----
>
> ----- Original Message -----
>
> > > But there is still no need to redundantly display the virtual and physical
> > > addresses. And the displays of the calculated file offsets, zero-fill,
> > > etc.
> > > will still end up showing the complete function sequence by putting the
> > > function name in the output. For example, the updated readmem() output
> > > would
> > > show a call to read_kdump(), but the file offset display would show that
> > > it
> > > has transitioned to read_netdump(), so there's no need for any debug
> > > output
> > > at all in read_kdump().
> >
> >
> > Well, read_kdump() in the case of a non-hyper-mode XEN dump has code
> > that has the appearance of a route of change for paddr, i.e. the
> > following doesn't result in no change or in P2M_FAILURE:
> >
> > paddr = xen_kdump_p2m(paddr)
> >
> > The code I posted can show two unique paths through read_kdump() but if
> > as you say, you log calling it with the physical address known and log
> > in read_netdump() with the physical address included then you get the
> > same result.
>
> No, you're right -- that particular "switch" of the paddr value
> should probably have its own debug statement.
>
> > Also, are there any cases of overlapped/threaded execution of reads?
> > If not then removal of redundant output is wise but the virt/phys addr
> > would identify which thread of execution each line refers to among
> > overlapped output in most cases.
>
> Well, at least in the Xen case, yes it is possible. But they would be
> encapsulated by the debug statements that indicate the "temporary" change
> from read_kdump() to read_netdump() in x86.c, x86_64.c (and ia64.c).
>
> Dave
Hi Dave,
I've attached what I'm going with for now. It covers all bases that
your original patch did, and then some. More specifically I added
some additional debug statements to xen_kdump_p2m() in order
to clarify the xen kdump read path through read_kdump(), because
xen_kdump_p2m() calls read_netdump() directly to get a MFN frame
before returning to read_kdump() to complete the original read
via read_netdump(). And so because of that twisty path xen kdump
reads do take, I left the addr/paddr/cnt display in read_netdump()
to allay any confusion. The diskdump path is always straight-forward,
so the debug statements there only show the paddr/pfn pair, since
that's all it ever deals with, and the readmem()-generated statement
just above them would give you all the rest of the arguments. I didn't
make individual debug statements in read_netdump() w/respect to whether
the offset came from a 32-bit ELF vmcore, or from a single or multiple
PT_LOAD 64-bit ELF vmcore, because you get that information immediately
with "-d1" on the invocation command line, or from "help -n" during runtime.
I added a few simple statements in ia64.c, but this patch is primarily
concerned with x86/x86_64. The readmem-assignment display is done
in one place, using a new readmem_function_name() function, which is
also used in readmem() and dump_program_context(). Everything is still
CRASHDEBUG(8) or less. So I'm hoping that you'll be happy with the
modifications to your original, quite useful, proposal.
Thanks,
Dave
--- defs.h 5 Jan 2012 20:57:20 -0000 1.493
+++ defs.h 11 Jan 2012 19:58:58 -0000
@@ -3544,6 +3544,8 @@
#endif
int clean_exit(int);
int untrusted_file(FILE *, char *);
+char *readmem_function_name(void);
+char *writemem_function_name(void);
/*
* cmdline.c
--- diskdump.c 12 Oct 2011 17:35:56 -0000 1.40
+++ diskdump.c 11 Jan 2012 20:03:26 -0000
@@ -7,8 +7,8 @@
* netdump dumpfiles, the facilities in netdump.c are used. For
* compressed dumpfiles, the facilities in this file are used.
*
- * Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 David Anderson
- * Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Red Hat, Inc. All rights reserved.
+ * Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012 David Anderson
+ * Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012 Red Hat, Inc. All rights reserved.
* Copyright (C) 2005 FUJITSU LIMITED
* Copyright (C) 2005 NEC Corporation
*
@@ -432,6 +432,11 @@
dd->dumpable_bitmap = calloc(bitmap_len, 1);
+ if (CRASHDEBUG(8))
+ fprintf(fp, "%s: memory bitmap offset: %llx\n",
+ DISKDUMP_VALID() ? "diskdump" : "compressed kdump",
+ (ulonglong)offset);
+
if (FLAT_FORMAT()) {
if (!read_flattened_format(dd->dfd, offset, dd->bitmap, bitmap_len)) {
error(INFO, "%s: cannot read memory bitmap\n",
@@ -844,29 +849,71 @@
}
}
- if (i == num_dumpfiles)
+ if (i == num_dumpfiles) {
+ if (CRASHDEBUG(8))
+ fprintf(fp, "read_diskdump: SEEK_ERROR: "
+ "paddr/pfn %llx/%lx beyond last dumpfile\n",
+ (ulonglong)paddr, pfn);
return SEEK_ERROR;
+ }
}
curpaddr = paddr & ~((physaddr_t)(dd->block_size-1));
page_offset = paddr & ((physaddr_t)(dd->block_size-1));
- if ((pfn >= dd->header->max_mapnr) || !page_is_ram(pfn))
+ if ((pfn >= dd->header->max_mapnr) || !page_is_ram(pfn)) {
+ if (CRASHDEBUG(8)) {
+ fprintf(fp, "read_diskdump: SEEK_ERROR: "
+ "paddr/pfn: %llx/%lx ",
+ (ulonglong)paddr, pfn);
+ if (pfn >= dd->header->max_mapnr)
+ fprintf(fp, "max_mapnr: %x\n",
+ dd->header->max_mapnr);
+ else
+ fprintf(fp, "!page_is_ram\n");
+ }
+
return SEEK_ERROR;
+ }
+
if (!page_is_dumpable(pfn)) {
if ((dd->flags & (ZERO_EXCLUDED|ERROR_EXCLUDED)) ==
- ERROR_EXCLUDED)
+ ERROR_EXCLUDED) {
+ if (CRASHDEBUG(8))
+ fprintf(fp, "read_diskdump: PAGE_EXCLUDED: "
+ "paddr/pfn: %llx/%lx\n",
+ (ulonglong)paddr, pfn);
return PAGE_EXCLUDED;
+ }
+ if (CRASHDEBUG(8))
+ fprintf(fp, "read_diskdump: zero-fill: "
+ "paddr/pfn: %llx/%lx\n",
+ (ulonglong)paddr, pfn);
memset(bufptr, 0, cnt);
return cnt;
}
- if (!page_is_cached(curpaddr))
- if ((ret = cache_page(curpaddr)) < 0)
+ if (!page_is_cached(curpaddr)) {
+ if (CRASHDEBUG(8))
+ fprintf(fp, "read_diskdump: paddr/pfn: %llx/%lx"
+ " -> cache physical page: %llx\n",
+ (ulonglong)paddr, pfn, (ulonglong)curpaddr);
+
+ if ((ret = cache_page(curpaddr)) < 0) {
+ if (CRASHDEBUG(8))
+ fprintf(fp, "read_diskdump: "
+ "%s: cannot cache page: %llx\n",
+ ret == SEEK_ERROR ?
+ "SEEK_ERROR" : "READ_ERROR",
+ (ulonglong)curpaddr);
return ret;
+ }
+ } else if (CRASHDEBUG(8))
+ fprintf(fp, "read_diskdump: paddr/pfn: %llx/%lx"
+ " -> physical page is cached: %llx\n",
+ (ulonglong)paddr, pfn, (ulonglong)curpaddr);
memcpy(bufptr, dd->curbufptr + page_offset, cnt);
-
return cnt;
}
--- filesys.c 2 Dec 2011 16:36:58 -0000 1.92
+++ filesys.c 10 Jan 2012 20:56:10 -0000
@@ -1,8 +1,8 @@
/* filesys.c - core analysis suite
*
* Copyright (C) 1999, 2000, 2001, 2002 Mission Critical Linux, Inc.
- * Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 David Anderson
- * Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Red Hat, Inc. All rights reserved.
+ * Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012 David Anderson
+ * Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012 Red Hat, Inc. All rights reserved.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -136,6 +136,18 @@
}
memory_source_init();
+
+ if (CRASHDEBUG(1)) {
+ fprintf(fp, "readmem: %s() ", readmem_function_name());
+ if (ACTIVE()) {
+ fprintf(fp, "-> %s ", pc->live_memsrc);
+ if (pc->flags & MEMMOD)
+ fprintf(fp, "(module)");
+ else if (pc->flags & CRASHBUILTIN)
+ fprintf(fp, "(built-in)");
+ }
+ fprintf(fp, "\n");
+ }
}
/*
--- ia64.c 22 Sep 2011 14:57:15 -0000 1.104
+++ ia64.c 10 Jan 2012 22:00:55 -0000
@@ -1,8 +1,8 @@
/* ia64.c - core analysis suite
*
* Copyright (C) 1999, 2000, 2001, 2002 Mission Critical Linux, Inc.
- * Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007, 2009, 2010, 2011 David Anderson
- * Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007, 2009, 2010, 2011 Red Hat, Inc. All rights reserved.
+ * Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007, 2009, 2010, 2011, 2012 David Anderson
+ * Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007, 2009, 2010, 2011, 2012 Red Hat, Inc. All rights reserved.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -3947,8 +3947,10 @@
*/
pc->readmem = read_netdump;
- if (CRASHDEBUG(1))
+ if (CRASHDEBUG(1)) {
+ fprintf(fp, "readmem (temporary): read_netdump()\n");
fprintf(fp, "ia64_xen_kdump_p2m_create: p2m_mfn: %lx\n", xkd->p2m_mfn);
+ }
if ((xkd->p2m_mfn_frame_list = (ulong *)malloc(PAGESIZE())) == NULL)
error(FATAL, "cannot malloc p2m_frame_list");
@@ -3960,6 +3962,8 @@
xkd->p2m_frames = PAGESIZE()/sizeof(ulong);
pc->readmem = read_kdump;
+ if (CRASHDEBUG(1))
+ fprintf(fp, "readmem (restore): read_kdump()\n");
return TRUE;
}
@@ -3976,6 +3980,8 @@
* going directly to read_netdump() instead of via read_kdump().
*/
pc->readmem = read_netdump;
+ if (CRASHDEBUG(1))
+ fprintf(fp, "readmem (temporary): read_netdump()\n");
xkd->accesses += 2;
@@ -4028,6 +4034,9 @@
out:
pc->readmem = read_kdump;
+ if (CRASHDEBUG(1))
+ fprintf(fp, "readmem (restore): read_kdump()\n");
+
return paddr;
}
--- main.c 15 Dec 2011 20:26:12 -0000 1.125
+++ main.c 10 Jan 2012 21:59:33 -0000
@@ -1,8 +1,8 @@
/* main.c - core analysis suite
*
* Copyright (C) 1999, 2000, 2001, 2002 Mission Critical Linux, Inc.
- * Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 David Anderson
- * Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Red Hat, Inc. All rights reserved.
+ * Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012 David Anderson
+ * Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012 Red Hat, Inc. All rights reserved.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -1069,6 +1069,7 @@
{
int i;
int others = 0;
+ char *p1;
char buf[BUFSIZE];
char buf2[BUFSIZE];
@@ -1500,54 +1501,90 @@
fprintf(fp, " rmfd: %d\n", pc->rmfd);
fprintf(fp, " rkfd: %d\n", pc->rkfd);
fprintf(fp, " rcvbufsize: %ld\n", pc->rcvbufsize);
+
+ fprintf(fp, " readmem: ");
+ if ((p1 = readmem_function_name()))
+ fprintf(fp, "%s()\n", p1);
+ else
+ fprintf(fp, "%lx\n", (ulong)pc->readmem);
+
+ fprintf(fp, " writemem: ");
+ if ((p1 = writemem_function_name()))
+ fprintf(fp, "%s()\n", p1);
+ else
+ fprintf(fp, "%lx\n", (ulong)pc->writemem);
+
+ fprintf(fp, " dumpfile memory: %d\n",
+ dumpfile_memory(DUMPFILE_MEM_USED));
+ fprintf(fp, " curext: %lx\n", (ulong)pc->curext);
+ fprintf(fp, " sbrk: %lx\n", (ulong)pc->sbrk);
+ fprintf(fp, " cleanup: %s\n", pc->cleanup);
+}
+
+char *
+readmem_function_name(void)
+{
if (pc->readmem == read_dev_mem)
- fprintf(fp, " readmem: read_dev_mem()\n");
+ return("read_dev_mem");
else if (pc->readmem == read_mclx_dumpfile)
- fprintf(fp, " readmem: read_mclx_dumpfile()\n");
+ return("read_mclx_dumpfile");
else if (pc->readmem == read_lkcd_dumpfile)
- fprintf(fp, " readmem: read_lkcd_dumpfile()\n");
+ return("read_lkcd_dumpfile");
else if (pc->readmem == read_daemon)
- fprintf(fp, " readmem: read_daemon()\n");
+ return("read_daemon");
else if (pc->readmem == read_netdump)
- fprintf(fp, " readmem: read_netdump()\n");
+ return("read_netdump");
else if (pc->readmem == read_xendump)
- fprintf(fp, " readmem: read_xendump()\n");
+ return("read_xendump");
else if (pc->readmem == read_kdump)
- fprintf(fp, " readmem: read_kdump()\n");
+ return("read_kdump");
else if (pc->readmem == read_memory_device)
- fprintf(fp, " readmem: read_memory_device()\n");
+ return("read_memory_device");
else if (pc->readmem == read_xendump_hyper)
- fprintf(fp, " readmem: read_xendump_hyper()\n");
+ return("read_xendump_hyper");
else if (pc->readmem == read_diskdump)
- fprintf(fp, " readmem: read_diskdump()\n");
+ return("read_diskdump");
+ else if (pc->readmem == read_proc_kcore)
+ return("read_proc_kcore");
+ else if (pc->readmem == read_sadump)
+ return("read_sadump");
+ else if (pc->readmem == read_s390_dumpfile)
+ return("read_s390_dumpfile");
else
- fprintf(fp, " readmem: %lx\n", (ulong)pc->readmem);
- if (pc->writemem == write_dev_mem)
- fprintf(fp, " writemem: write_dev_mem()\n");
- else if (pc->writemem == write_mclx_dumpfile)
- fprintf(fp, " writemem: write_mclx_dumpfile()\n");
- else if (pc->writemem == write_lkcd_dumpfile)
- fprintf(fp, " writemem: write_lkcd_dumpfile()\n");
- else if (pc->writemem == write_daemon)
- fprintf(fp, " writemem: write_daemon()\n");
- else if (pc->writemem == write_netdump)
- fprintf(fp, " writemem: write_netdump()\n");
- else if (pc->writemem == write_xendump)
- fprintf(fp, " writemem: write_xendump()\n");
- else if (pc->writemem == write_kdump)
- fprintf(fp, " writemem: write_kdump()\n");
- else if (pc->writemem == write_memory_device)
- fprintf(fp, " writemem: write_memory_device()\n");
- else if (pc->writemem == write_diskdump)
- fprintf(fp, " writemem: write_diskdump()\n");
- else
- fprintf(fp, " writemem: %lx\n", (ulong)pc->writemem);
+ return NULL;
+}
- fprintf(fp, " dumpfile memory: %d\n",
- dumpfile_memory(DUMPFILE_MEM_USED));
- fprintf(fp, " curext: %lx\n", (ulong)pc->curext);
- fprintf(fp, " sbrk: %lx\n", (ulong)pc->sbrk);
- fprintf(fp, " cleanup: %s\n", pc->cleanup);
+char *
+writemem_function_name(void)
+{
+ if (pc->writemem == write_dev_mem)
+ return("write_dev_mem");
+ else if (pc->writemem == write_mclx_dumpfile)
+ return("write_mclx_dumpfile");
+ else if (pc->writemem == write_lkcd_dumpfile)
+ return("write_lkcd_dumpfile");
+ else if (pc->writemem == write_daemon)
+ return("write_daemon");
+ else if (pc->writemem == write_netdump)
+ return("write_netdump");
+ else if (pc->writemem == write_xendump)
+ return("write_xendump");
+ else if (pc->writemem == write_kdump)
+ return("write_kdump");
+ else if (pc->writemem == write_memory_device)
+ return("write_memory_device");
+// else if (pc->writemem == write_xendump_hyper)
+// return("write_xendump_hyper");
+ else if (pc->writemem == write_diskdump)
+ return("write_diskdump");
+ else if (pc->writemem == write_proc_kcore)
+ return("write_proc_kcore");
+ else if (pc->writemem == write_sadump)
+ return("write_sadump");
+ else if (pc->writemem == write_s390_dumpfile)
+ return("write_s390_dumpfile");
+ else
+ return NULL;
}
/*
--- memory.c 10 Jan 2012 15:10:02 -0000 1.264
+++ memory.c 11 Jan 2012 16:05:50 -0000
@@ -1993,9 +1993,10 @@
if (cnt > size)
cnt = size;
- if (CRASHDEBUG(8))
- fprintf(fp, " addr: %llx paddr: %llx cnt: %ld\n",
- addr, (unsigned long long)paddr, cnt);
+ if (CRASHDEBUG(4))
+ fprintf(fp, "<%s: addr: %llx paddr: %llx cnt: %ld>\n",
+ readmem_function_name(), addr,
+ (unsigned long long)paddr, cnt);
if (memtype == KVADDR)
pc->curcmd_flags |= MEMTYPE_KVADDR;
--- netdump.c 10 Jan 2012 14:52:53 -0000 1.119
+++ netdump.c 11 Jan 2012 16:29:09 -0000
@@ -538,24 +538,51 @@
if (pls->zero_fill && (paddr >= pls->phys_end) &&
(paddr < pls->zero_fill)) {
memset(bufptr, 0, cnt);
+ if (CRASHDEBUG(8))
+ fprintf(fp, "read_netdump: zero-fill: "
+ "addr: %lx paddr: %llx cnt: %d\n",
+ addr, (ulonglong)paddr, cnt);
return cnt;
}
}
- if (!offset)
+ if (!offset) {
+ if (CRASHDEBUG(8))
+ fprintf(fp, "read_netdump: READ_ERROR: "
+ "offset not found for paddr: %llx\n",
+ (ulonglong)paddr);
return READ_ERROR;
+ }
break;
}
+ if (CRASHDEBUG(8))
+ fprintf(fp, "read_netdump: addr: %lx paddr: %llx cnt: %d offset: %llx\n",
+ addr, (ulonglong)paddr, cnt, (ulonglong)offset);
+
if (FLAT_FORMAT()) {
- if (!read_flattened_format(nd->ndfd, offset, bufptr, cnt))
+ if (!read_flattened_format(nd->ndfd, offset, bufptr, cnt)) {
+ if (CRASHDEBUG(8))
+ fprintf(fp, "read_netdump: READ_ERROR: "
+ "read_flattened_format failed for offset:"
+ " %llx\n",
+ (ulonglong)offset);
return READ_ERROR;
+ }
} else {
- if (lseek(nd->ndfd, offset, SEEK_SET) == -1)
+ if (lseek(nd->ndfd, offset, SEEK_SET) == -1) {
+ if (CRASHDEBUG(8))
+ fprintf(fp, "read_netdump: SEEK_ERROR: "
+ "offset: %llx\n", (ulonglong)offset);
return SEEK_ERROR;
- if (read(nd->ndfd, bufptr, cnt) != cnt)
+ }
+ if (read(nd->ndfd, bufptr, cnt) != cnt) {
+ if (CRASHDEBUG(8))
+ fprintf(fp, "read_netdump: READ_ERROR: "
+ "offset: %llx\n", (ulonglong)offset);
return READ_ERROR;
+ }
}
return cnt;
@@ -2666,6 +2693,8 @@
int
read_kdump(int fd, void *bufptr, int cnt, ulong addr, physaddr_t paddr)
{
+ physaddr_t paddr_in = paddr;
+
if (XEN_CORE_DUMPFILE() && !XEN_HYPER_MODE()) {
if (!(nd->xen_kdump_data->flags & KDUMP_P2M_INIT)) {
if (!machdep->xen_kdump_p2m_create)
@@ -2684,8 +2713,15 @@
nd->xen_kdump_data->flags |= KDUMP_P2M_INIT;
}
- if ((paddr = xen_kdump_p2m(paddr)) == P2M_FAILURE)
+ if ((paddr = xen_kdump_p2m(paddr)) == P2M_FAILURE) {
+ if (CRASHDEBUG(8))
+ fprintf(fp, "read_kdump: xen_kdump_p2m(%llx): "
+ "P2M_FAILURE\n", (ulonglong)paddr_in);
return READ_ERROR;
+ }
+ if (CRASHDEBUG(8))
+ fprintf(fp, "read_kdump: xen_kdump_p2m(%llx): %llx\n",
+ (ulonglong)paddr_in, (ulonglong)paddr);
}
return read_netdump(fd, bufptr, cnt, addr, paddr);
@@ -2762,15 +2798,26 @@
pfn = (ulong)BTOP(pseudo);
mfn_idx = pfn / (PAGESIZE()/sizeof(ulong));
frame_idx = pfn % (PAGESIZE()/sizeof(ulong));
- if (mfn_idx >= xkd->p2m_frames)
+ if (mfn_idx >= xkd->p2m_frames) {
+ if (CRASHDEBUG(8))
+ fprintf(fp, "xen_kdump_p2m: paddr/pfn: %llx/%lx: "
+ "mfn_idx nonexistent\n",
+ (ulonglong)pseudo, pfn);
return P2M_FAILURE;
+ }
mfn_frame = xkd->p2m_mfn_frame_list[mfn_idx];
if (mfn_frame == xkd->last_mfn_read)
xkd->cache_hits++;
- else if (read_netdump(0, xkd->page, PAGESIZE(), 0,
- (physaddr_t)PTOB(mfn_frame)) != PAGESIZE())
- return P2M_FAILURE;
+ else {
+ if (CRASHDEBUG(8))
+ fprintf(fp, "xen_kdump_p2m: paddr/pfn: %llx/%lx: "
+ "read mfn_frame: %llx\n",
+ (ulonglong)pseudo, pfn, PTOB(mfn_frame));
+ if (read_netdump(0, xkd->page, PAGESIZE(), 0,
+ (physaddr_t)PTOB(mfn_frame)) != PAGESIZE())
+ return P2M_FAILURE;
+ }
xkd->last_mfn_read = mfn_frame;
@@ -2780,7 +2827,7 @@
if (CRASHDEBUG(7))
fprintf(fp,
- "xen_dump_p2m(%llx): mfn_idx: %ld frame_idx: %ld"
+ "xen_kdump_p2m(%llx): mfn_idx: %ld frame_idx: %ld"
" mfn_frame: %lx mfn: %lx => %llx\n",
(ulonglong)pseudo, mfn_idx, frame_idx,
mfn_frame, *mfnptr, (ulonglong)paddr);
--- x86.c 21 Oct 2011 21:17:25 -0000 1.141
+++ x86.c 10 Jan 2012 21:28:12 -0000
@@ -1,8 +1,8 @@
/* x86.c - core analysis suite
*
* Portions Copyright (C) 1999, 2000, 2001, 2002 Mission Critical Linux, Inc.
- * Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 David Anderson
- * Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Red Hat, Inc. All rights reserved.
+ * Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012 David Anderson
+ * Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012 Red Hat, Inc. All rights reserved.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -4391,6 +4391,8 @@
* going directly to read_netdump() instead of via read_kdump().
*/
pc->readmem = read_netdump;
+ if (CRASHDEBUG(1))
+ fprintf(fp, "readmem (temporary): read_netdump()\n");
if (xkd->flags & KDUMP_CR3)
goto use_cr3;
@@ -4468,6 +4470,9 @@
}
pc->readmem = read_kdump;
+ if (CRASHDEBUG(1))
+ fprintf(fp, "readmem (restore): read_kdump()\n");
+
return TRUE;
use_cr3:
@@ -4554,6 +4559,8 @@
machdep->last_ptbl_read = 0;
machdep->last_pmd_read = 0;
pc->readmem = read_kdump;
+ if (CRASHDEBUG(1))
+ fprintf(fp, "readmem (restore): read_kdump()\n");
return TRUE;
}
--- x86_64.c 15 Dec 2011 16:40:02 -0000 1.191
+++ x86_64.c 11 Jan 2012 19:58:55 -0000
@@ -1,7 +1,7 @@
/* x86_64.c -- core analysis suite
*
- * Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 David Anderson
- * Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Red Hat, Inc. All rights reserved.
+ * Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012 David Anderson
+ * Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012 Red Hat, Inc. All rights reserved.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -5399,6 +5399,8 @@
* going directly to read_netdump() instead of via read_kdump().
*/
pc->readmem = read_netdump;
+ if (CRASHDEBUG(1))
+ fprintf(fp, "readmem (temporary): read_netdump()\n");
if (xkd->flags & KDUMP_CR3)
goto use_cr3;
@@ -5459,6 +5461,9 @@
}
pc->readmem = read_kdump;
+ if (CRASHDEBUG(1))
+ fprintf(fp, "readmem (restore): read_kdump()\n");
+
return TRUE;
use_cr3:
@@ -5525,6 +5530,8 @@
machdep->last_ptbl_read = 0;
machdep->last_pmd_read = 0;
pc->readmem = read_kdump;
+ if (CRASHDEBUG(1))
+ fprintf(fp, "readmem (restore): read_kdump()\n");
return TRUE;
}
--
Crash-utility mailing list
[email protected]
https://www.redhat.com/mailman/listinfo/crash-utility