----- 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 Crash-utility@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/crash-utility