diff --git a/.crash.metadata b/.crash.metadata new file mode 100644 index 0000000..c69b121 --- /dev/null +++ b/.crash.metadata @@ -0,0 +1 @@ +1d3647e807c59189746cbccdf6a5be6e15e6f397 SOURCES/crash-7.0.9.tar.gz diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..13f7396 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +SOURCES/crash-7.0.9.tar.gz diff --git a/README.md b/README.md deleted file mode 100644 index 0e7897f..0000000 --- a/README.md +++ /dev/null @@ -1,5 +0,0 @@ -The master branch has no content - -Look at the c7 branch if you are working with CentOS-7, or the c4/c5/c6 branch for CentOS-4, 5 or 6 - -If you find this file in a distro specific branch, it means that no content has been checked in yet diff --git a/SOURCES/ARM64_virtual_memory_layout.patch b/SOURCES/ARM64_virtual_memory_layout.patch new file mode 100644 index 0000000..47f8f4e --- /dev/null +++ b/SOURCES/ARM64_virtual_memory_layout.patch @@ -0,0 +1,132 @@ +diff -up crash-7.0.9/arm64.c.orig crash-7.0.9/arm64.c +--- crash-7.0.9/arm64.c.orig 2015-04-21 11:45:27.324756052 -0400 ++++ crash-7.0.9/arm64.c 2015-04-21 11:46:44.288416377 -0400 +@@ -1,8 +1,8 @@ + /* + * arm64.c - core analysis suite + * +- * Copyright (C) 2012-2014 David Anderson +- * Copyright (C) 2012-2014 Red Hat, Inc. All rights reserved. ++ * Copyright (C) 2012-2015 David Anderson ++ * Copyright (C) 2012-2015 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 +@@ -26,6 +26,7 @@ static struct machine_specific arm64_mac + static int arm64_verify_symbol(const char *, ulong, char); + static void arm64_parse_cmdline_args(void); + static void arm64_calc_phys_offset(void); ++static void arm64_calc_virtual_memory_ranges(void); + static int arm64_kdump_phys_base(ulong *); + static ulong arm64_processor_speed(void); + static void arm64_init_kernel_pgd(void); +@@ -188,6 +189,7 @@ arm64_init(int when) + break; + + case POST_GDB: ++ arm64_calc_virtual_memory_ranges(); + machdep->section_size_bits = _SECTION_SIZE_BITS; + machdep->max_physmem_bits = _MAX_PHYSMEM_BITS; + if (THIS_KERNEL_VERSION >= LINUX(3,10,0)) { +@@ -243,6 +245,9 @@ arm64_verify_symbol(const char *name, ul + if (!name || !strlen(name)) + return FALSE; + ++ if (((type == 'A') || (type == 'a')) && (highest_bit_long(value) != 63)) ++ return FALSE; ++ + if ((value == 0) && + ((type == 'a') || (type == 'n') || (type == 'N') || (type == 'U'))) + return FALSE; +@@ -276,6 +281,8 @@ arm64_dump_machdep_table(ulong arg) + fprintf(fp, "%sVM_L2_64K", others++ ? "|" : ""); + if (machdep->flags & VM_L3_4K) + fprintf(fp, "%sVM_L3_4K", others++ ? "|" : ""); ++ if (machdep->flags & VMEMMAP) ++ fprintf(fp, "%sVMEMMAP", others++ ? "|" : ""); + fprintf(fp, ")\n"); + + fprintf(fp, " kvbase: %lx\n", machdep->kvbase); +@@ -365,6 +372,7 @@ arm64_dump_machdep_table(ulong arg) + fprintf(fp, " modules_vaddr: %016lx\n", ms->modules_vaddr); + fprintf(fp, " modules_end: %016lx\n", ms->modules_end); + fprintf(fp, " vmemmap_vaddr: %016lx\n", ms->vmemmap_vaddr); ++ fprintf(fp, " vmemmap_end: %016lx\n", ms->vmemmap_end); + fprintf(fp, " phys_offset: %lx\n", ms->phys_offset); + fprintf(fp, "__exception_text_start: %lx\n", ms->__exception_text_start); + fprintf(fp, " __exception_text_end: %lx\n", ms->__exception_text_end); +@@ -1649,6 +1657,57 @@ arm64_calc_VA_BITS(void) + + } + ++/* ++ * The size and end of the vmalloc range is dependent upon the kernel's ++ * VMEMMAP_SIZE value, and the vmemmap range is dependent upon the end ++ * of the vmalloc range as well as the VMEMMAP_SIZE: ++ * ++ * #define VMEMMAP_SIZE ALIGN((1UL << (VA_BITS - PAGE_SHIFT)) * sizeof(struct page), PUD_SIZE) ++ * #define VMALLOC_START (UL(0xffffffffffffffff) << VA_BITS) ++ * #define VMALLOC_END (PAGE_OFFSET - PUD_SIZE - VMEMMAP_SIZE - SZ_64K) ++ * ++ * Since VMEMMAP_SIZE is dependent upon the size of a struct page, ++ * the two ranges cannot be determined until POST_GDB. ++ */ ++ ++#define ALIGN(x, a) __ALIGN_KERNEL((x), (a)) ++#define __ALIGN_KERNEL(x, a) __ALIGN_KERNEL_MASK(x, (typeof(x))(a) - 1) ++#define __ALIGN_KERNEL_MASK(x, mask) (((x) + (mask)) & ~(mask)) ++#define SZ_64K 0x00010000 ++ ++static void ++arm64_calc_virtual_memory_ranges(void) ++{ ++ struct machine_specific *ms = machdep->machspec; ++ ulong vmemmap_start, vmemmap_end, vmemmap_size; ++ ulong vmalloc_end; ++ ulong PUD_SIZE = UNINITIALIZED; ++ ++ if (THIS_KERNEL_VERSION < LINUX(3,17,0)) /* use original hardwired values */ ++ return; ++ ++ STRUCT_SIZE_INIT(page, "page"); ++ ++ switch (machdep->flags & (VM_L2_64K|VM_L3_4K)) ++ { ++ case VM_L2_64K: ++ PUD_SIZE = PGDIR_SIZE_L2_64K; ++ break; ++ case VM_L3_4K: ++ PUD_SIZE = PGDIR_SIZE_L3_4K; ++ break; ++ } ++ ++ vmemmap_size = ALIGN((1UL << (ms->VA_BITS - machdep->pageshift)) * SIZE(page), PUD_SIZE); ++ vmalloc_end = (ms->page_offset - PUD_SIZE - vmemmap_size - SZ_64K); ++ vmemmap_start = vmalloc_end + SZ_64K; ++ vmemmap_end = vmemmap_start + vmemmap_size; ++ ++ ms->vmalloc_end = vmalloc_end - 1; ++ ms->vmemmap_vaddr = vmemmap_start; ++ ms->vmemmap_end = vmemmap_end - 1; ++} ++ + static int + arm64_is_uvaddr(ulong addr, struct task_context *tc) + { +diff -up crash-7.0.9/defs.h.orig crash-7.0.9/defs.h +--- crash-7.0.9/defs.h.orig 2015-04-21 11:45:00.966927052 -0400 ++++ crash-7.0.9/defs.h 2015-04-21 11:46:44.288416377 -0400 +@@ -2873,6 +2873,13 @@ typedef signed int s32; + #define ARM64_MODULES_VADDR (ARM64_PAGE_OFFSET - MEGABYTES(64)) + #define ARM64_MODULES_END (ARM64_PAGE_OFFSET - 1) + #define ARM64_VMALLOC_START ((0xffffffffffffffffUL) << machdep->machspec->VA_BITS) ++/* ++ * The following 3 definitions are the original values, but are obsolete ++ * for 3.17 and later kernels because they are now build-time calculations. ++ * They all depend on the kernel's new VMEMMAP_SIZE value, which is dependent ++ * upon the size of struct page. Accordingly, arm64_calc_virtual_memory_ranges() ++ * determines their values at POST_GDB time. ++ */ + #define ARM64_VMALLOC_END (ARM64_PAGE_OFFSET - 0x400000000UL - KILOBYTES(64) - 1) + #define ARM64_VMEMMAP_VADDR ((ARM64_VMALLOC_END+1) + KILOBYTES(64)) + #define ARM64_VMEMMAP_END (ARM64_VMEMMAP_VADDR + GIGABYTES(8UL) - 1) diff --git a/SOURCES/bt-mislabeling.patch b/SOURCES/bt-mislabeling.patch new file mode 100644 index 0000000..203f0e4 --- /dev/null +++ b/SOURCES/bt-mislabeling.patch @@ -0,0 +1,257 @@ +--- crash-7.0.9/defs.h.orig ++++ crash-7.0.9/defs.h +@@ -5180,14 +5180,15 @@ struct x86_64_pt_regs_offsets { + }; + + #define MAX_EXCEPTION_STACKS 7 +-#define NMI_STACK 2 /* ebase[] index to NMI exception stack */ +-#define DEBUG_STACK 3 /* ebase[] index to DEBUG exception stack */ ++#define NMI_STACK (machdep->machspec->stkinfo.NMI_stack_index) + + struct x86_64_stkinfo { + ulong ebase[NR_CPUS][MAX_EXCEPTION_STACKS]; + int esize[MAX_EXCEPTION_STACKS]; + ulong ibase[NR_CPUS]; + int isize; ++ int NMI_stack_index; ++ char *exception_stacks[MAX_EXCEPTION_STACKS]; + }; + + struct machine_specific { +--- crash-7.0.9/x86_64.c.orig ++++ crash-7.0.9/x86_64.c +@@ -114,6 +114,7 @@ static void x86_64_get_active_set(void); + static int x86_64_get_kvaddr_ranges(struct vaddr_range *); + static int x86_64_verify_paddr(uint64_t); + static void GART_init(void); ++static void x86_64_exception_stacks_init(void); + + struct machine_specific x86_64_machine_specific = { 0 }; + +@@ -798,6 +799,14 @@ x86_64_dump_machdep_table(ulong arg) + ms->stkinfo.esize[5], + ms->stkinfo.esize[6], + machdep->flags & NO_TSS ? " (NO TSS) " : " "); ++ ++ fprintf(fp, " NMI_stack_index: %d\n", ++ ms->stkinfo.NMI_stack_index); ++ fprintf(fp, " exception_stacks:\n"); ++ for (i = 0; i < MAX_EXCEPTION_STACKS; i++) ++ fprintf(fp, " [%d]: %s\n", i, ++ ms->stkinfo.exception_stacks[i]); ++ + fprintf(fp, " ebase[%s][%d]:", + arg ? "NR_CPUS" : "cpus", MAX_EXCEPTION_STACKS); + cpus = arg ? NR_CPUS : kt->cpus; +@@ -1059,17 +1068,6 @@ x86_64_per_cpu_init(void) + verify_spinlock(); + } + +-static char * +-x86_64_exception_stacks[MAX_EXCEPTION_STACKS] = { +- "STACKFAULT", +- "DOUBLEFAULT", +- "NMI", +- "DEBUG", +- "MCE", +- "(unknown)", +- "(unknown)" +-}; +- + /* + * Gather the ist addresses for each CPU. + */ +@@ -1086,6 +1084,8 @@ x86_64_ist_init(void) + tss_sp = per_cpu_symbol_search("per_cpu__init_tss"); + ist_sp = per_cpu_symbol_search("per_cpu__orig_ist"); + ++ x86_64_exception_stacks_init(); ++ + if (!tss_sp && symbol_exists("init_tss")) { + init_tss = symbol_value("init_tss"); + +@@ -1135,7 +1135,7 @@ x86_64_ist_init(void) + if (ms->stkinfo.ebase[c][i] != estacks[i]) + error(WARNING, + "cpu %d %s stack: init_tss: %lx orig_ist: %lx\n", c, +- x86_64_exception_stacks[i], ++ ms->stkinfo.exception_stacks[i], + ms->stkinfo.ebase[c][i], estacks[i]); + ms->stkinfo.ebase[c][i] = estacks[i]; + } +@@ -1165,22 +1165,12 @@ x86_64_ist_init(void) + break; + cnt++; + if ((THIS_KERNEL_VERSION >= LINUX(2,6,18)) && +- (i == DEBUG_STACK)) ++ STREQ(ms->stkinfo.exception_stacks[i], "DEBUG")) + ms->stkinfo.esize[i] = esize*2; + else + ms->stkinfo.esize[i] = esize; + ms->stkinfo.ebase[c][i] -= ms->stkinfo.esize[i]; + } +- /* +- * RT kernel only uses 3 exception stacks for the 5 types. +- */ +- if ((c == 0) && (cnt == 3)) { +- x86_64_exception_stacks[0] = "RT"; +- x86_64_exception_stacks[1] = "RT"; +- x86_64_exception_stacks[2] = "RT"; +- x86_64_exception_stacks[3] = "(unknown)"; +- x86_64_exception_stacks[4] = "(unknown)"; +- } + } + + /* +@@ -2351,7 +2341,7 @@ x86_64_eframe_search(struct bt_info *bt) + break; + bt->hp->esp = ms->stkinfo.ebase[c][i]; + fprintf(fp, "CPU %d %s EXCEPTION STACK:", +- c, x86_64_exception_stacks[i]); ++ c, ms->stkinfo.exception_stacks[i]); + + if (hide_offline_cpu(c)) { + fprintf(fp, " [OFFLINE]\n\n"); +@@ -3084,7 +3074,7 @@ in_exception_stack: + + if (!BT_REFERENCE_CHECK(bt)) + fprintf(fp, "--- <%s exception stack> ---\n", +- x86_64_exception_stacks[estack_index]); ++ ms->stkinfo.exception_stacks[estack_index]); + + /* + * Find the CPU-saved, or handler-saved registers +@@ -3133,7 +3123,7 @@ in_exception_stack: + fprintf(ofp, + " [ %s exception stack recursion: " + "prior stack location overwritten ]\n", +- x86_64_exception_stacks[estack_index]); ++ ms->stkinfo.exception_stacks[estack_index]); + return; + } + +@@ -4540,12 +4530,12 @@ skip_stage: + bt->stacktop = ms->stkinfo.ebase[bt->tc->processor][estack] + + ms->stkinfo.esize[estack]; + console("x86_64_get_dumpfile_stack_frame: searching %s estack at %lx\n", +- x86_64_exception_stacks[estack], bt->stackbase); ++ ms->stkinfo.exception_stacks[estack], bt->stackbase); + if (!(bt->stackbase)) + goto skip_stage; + bt->stackbuf = ms->irqstack; + alter_stackbuf(bt); +- in_nmi_stack = STREQ(x86_64_exception_stacks[estack], "NMI"); ++ in_nmi_stack = STREQ(ms->stkinfo.exception_stacks[estack], "NMI"); + goto next_stack; + + } +@@ -4772,6 +4762,69 @@ x86_64_display_idt_table(void) + FREEBUF(idt_table_buf); + } + ++static void ++x86_64_exception_stacks_init(void) ++{ ++ char *idt_table_buf; ++ char buf[BUFSIZE]; ++ int i; ++ ulong *ip, ist; ++ long size; ++ struct machine_specific *ms; ++ ++ ms = machdep->machspec; ++ ++ ms->stkinfo.NMI_stack_index = -1; ++ for (i = 0; i < MAX_EXCEPTION_STACKS; i++) ++ ms->stkinfo.exception_stacks[i] = "(unknown)"; ++ ++ if (!kernel_symbol_exists("idt_table")) ++ return; ++ ++ if (INVALID_SIZE(gate_struct)) ++ size = 16; ++ else ++ size = SIZE(gate_struct); ++ ++ idt_table_buf = GETBUF(size * 256); ++ readmem(symbol_value("idt_table"), KVADDR, idt_table_buf, ++ size * 256, "idt_table", FAULT_ON_ERROR); ++ ip = (ulong *)idt_table_buf; ++ ++ if (CRASHDEBUG(1)) ++ fprintf(fp, "exception IST:\n"); ++ ++ for (i = 0; i < 256; i++, ip += 2) { ++ ist = ((*ip) >> 32) & 0x7; ++ if (ist) { ++ x86_64_extract_idt_function(ip, buf, NULL); ++ if (CRASHDEBUG(1)) ++ fprintf(fp, " %ld: %s\n", ist, buf); ++ if (strstr(buf, "nmi")) { ++ ms->stkinfo.NMI_stack_index = ist-1; ++ ms->stkinfo.exception_stacks[ist-1] = "NMI"; ++ } ++ if (strstr(buf, "debug")) ++ ms->stkinfo.exception_stacks[ist-1] = "DEBUG"; ++ if (strstr(buf, "stack")) ++ ms->stkinfo.exception_stacks[ist-1] = "STACKFAULT"; ++ if (strstr(buf, "double")) ++ ms->stkinfo.exception_stacks[ist-1] = "DOUBLEFAULT"; ++ if (strstr(buf, "machine")) ++ ms->stkinfo.exception_stacks[ist-1] = "MCE"; ++ } ++ } ++ ++ if (CRASHDEBUG(1)) { ++ fprintf(fp, "exception stacks:\n"); ++ for (i = 0; i < MAX_EXCEPTION_STACKS; i++) ++ fprintf(fp, " [%d]: %s\n", i, ms->stkinfo.exception_stacks[i]); ++ } ++ ++ FREEBUF(idt_table_buf); ++} ++ ++ + /* + * Extract the function name out of the IDT entry. + */ +@@ -5103,9 +5156,9 @@ x86_64_display_machine_stats(void) + if (machdep->machspec->stkinfo.ebase[0][i] == 0) + break; + fprintf(fp, "%11s STACK SIZE: %d\n", +- x86_64_exception_stacks[i], ++ machdep->machspec->stkinfo.exception_stacks[i], + machdep->machspec->stkinfo.esize[i]); +- sprintf(buf, "%s STACKS:\n", x86_64_exception_stacks[i]); ++ sprintf(buf, "%s STACKS:\n", machdep->machspec->stkinfo.exception_stacks[i]); + fprintf(fp, "%24s", buf); + for (c = 0; c < kt->cpus; c++) { + if (machdep->machspec->stkinfo.ebase[c][i] == 0) + +--- crash-7.0.9/memory.c.orig ++++ crash-7.0.9/memory.c +@@ -8632,8 +8632,7 @@ static char * + vaddr_to_kmem_cache(ulong vaddr, char *buf, int verbose) + { + physaddr_t paddr; +- ulong page; +- ulong cache; ++ ulong page, cache, page_flags; + + if (!kvtop(NULL, vaddr, &paddr, 0)) { + if (verbose) +@@ -8651,6 +8650,14 @@ vaddr_to_kmem_cache(ulong vaddr, char *b + return NULL; + } + ++ if (vt->PG_slab) { ++ readmem(page+OFFSET(page_flags), KVADDR, ++ &page_flags, sizeof(ulong), "page.flags", ++ FAULT_ON_ERROR); ++ if (!(page_flags & (1 << vt->PG_slab))) ++ return NULL; ++ } ++ + if ((vt->flags & KMALLOC_SLUB) || + ((vt->flags & KMALLOC_COMMON) && + VALID_MEMBER(page_slab) && VALID_MEMBER(page_first_page))) { diff --git a/SOURCES/lzo_snappy.patch b/SOURCES/lzo_snappy.patch new file mode 100644 index 0000000..73d2a4f --- /dev/null +++ b/SOURCES/lzo_snappy.patch @@ -0,0 +1,22 @@ +--- crash-7.0.2/diskdump.c.orig ++++ crash-7.0.2/diskdump.c +@@ -23,6 +23,8 @@ + * GNU General Public License for more details. + */ + ++#define LZO ++#define SNAPPY + #include "defs.h" + #include "diskdump.h" + +--- crash-7.0.2/Makefile.orig ++++ crash-7.0.2/Makefile +@@ -223,7 +223,7 @@ all: make_configure + gdb_merge: force + @if [ ! -f ${GDB}/README ]; then \ + make --no-print-directory gdb_unzip; fi +- @echo "${LDFLAGS} -lz -ldl -rdynamic" > ${GDB}/gdb/mergelibs ++ @echo "${LDFLAGS} -lz -llzo2 -lsnappy -ldl -rdynamic" > ${GDB}/gdb/mergelibs + @echo "../../${PROGRAM} ../../${PROGRAM}lib.a" > ${GDB}/gdb/mergeobj + @rm -f ${PROGRAM} + @if [ ! -f ${GDB}/config.status ]; then \ diff --git a/SOURCES/ppc64_bt_active_task.patch b/SOURCES/ppc64_bt_active_task.patch new file mode 100644 index 0000000..5193844 --- /dev/null +++ b/SOURCES/ppc64_bt_active_task.patch @@ -0,0 +1,95 @@ +--- crash-7.0.9/ppc64.c.orig ++++ crash-7.0.9/ppc64.c +@@ -1,7 +1,7 @@ + /* ppc64.c -- core analysis suite + * +- * Copyright (C) 2004-2014 David Anderson +- * Copyright (C) 2004-2014 Red Hat, Inc. All rights reserved. ++ * Copyright (C) 2004-2015 David Anderson ++ * Copyright (C) 2004-2015 Red Hat, Inc. All rights reserved. + * Copyright (C) 2004, 2006 Haren Myneni, IBM Corporation + * + * This program is free software; you can redistribute it and/or modify +@@ -414,7 +414,7 @@ ppc64_init(int when) + break; + + case LOG_ONLY: +- machdep->kvbase = kt->vmcoreinfo._stext_SYMBOL; ++ machdep->identity_map_base = kt->vmcoreinfo._stext_SYMBOL; + break; + } + } +@@ -1898,8 +1898,8 @@ ppc64_print_regs(struct ppc64_pt_regs *r + int i; + + /* print out the gprs... */ +- for(i=0; i<32; i++) { +- if(!(i % 3)) ++ for (i=0; i<32; i++) { ++ if (i && !(i % 3)) + fprintf(fp, "\n"); + + fprintf(fp, " R%d:%s %016lx ", i, +@@ -1940,9 +1940,8 @@ ppc64_print_eframe(char *efrm_str, struc + if (BT_REFERENCE_CHECK(bt)) + return; + +- fprintf(fp, " %s [%lx] exception frame:", efrm_str, regs->trap); ++ fprintf(fp, " %s [%lx] exception frame:\n", efrm_str, regs->trap); + ppc64_print_regs(regs); +- fprintf(fp, "\n"); + } + + /* +@@ -1996,8 +1995,6 @@ ppc64_kdump_stack_frame(struct bt_info * + fprintf(fp, " LR [%016lx] %s\n", pt_regs->link, + closest_symbol(pt_regs->link)); + +- fprintf(fp, "\n"); +- + return TRUE; + } + +@@ -2008,7 +2005,7 @@ static int + ppc64_get_dumpfile_stack_frame(struct bt_info *bt_in, ulong *nip, ulong *ksp) + { + int panic_task; +- int i, panic; ++ int i; + char *sym; + ulong *up; + struct bt_info bt_local, *bt; +@@ -2092,10 +2089,8 @@ ppc64_get_dumpfile_stack_frame(struct bt + fprintf(fp, "Could not find SP for task %0lx\n", + bt->task); + } +- return TRUE; + } + +- panic = FALSE; + /* + * Check the process stack first. We are scanning stack for only + * panic task. Even though we have dumping CPU's regs, we will be +@@ -2112,8 +2107,12 @@ retry: + if (STREQ(sym, ".netconsole_netdump") || + STREQ(sym, ".netpoll_start_netdump") || + STREQ(sym, ".start_disk_dump") || ++ STREQ(sym, "crash_kexec") || ++ STREQ(sym, "crash_fadump") || ++ STREQ(sym, "crash_ipi_callback") || + STREQ(sym, ".crash_kexec") || + STREQ(sym, ".crash_fadump") || ++ STREQ(sym, ".crash_ipi_callback") || + STREQ(sym, ".disk_dump")) { + *nip = *up; + *ksp = bt->stackbase + +@@ -2122,9 +2121,6 @@ retry: + } + } + +- if (panic) +- return TRUE; +- + bt->flags &= ~(BT_HARDIRQ|BT_SOFTIRQ); + + if (check_hardirq && diff --git a/SOURCES/sadump_16TB.patch b/SOURCES/sadump_16TB.patch new file mode 100644 index 0000000..57a6db4 --- /dev/null +++ b/SOURCES/sadump_16TB.patch @@ -0,0 +1,108 @@ + Add support for more than 16TB of physical memory space in the SADUMP + dumpfile format. Without the patch, there is a limitation caused + by several 32-bit members of dump_header structure, in particular + the max_mapnr member, which overflows if the dumpfile contains more + than 16TB of physical memory space. The header_version member of + the dump_header structure has been increased from 0 to 1 in this + extended new format, and the new 64-bit members will be used. + (d.hatayama@jp.fujitsu.com) + +diff --git a/sadump.c b/sadump.c +index d7c6701..bc67354 100644 +--- a/sadump.c ++++ b/sadump.c +@@ -20,6 +20,7 @@ + #include "sadump.h" + #include /* htonl, htons */ + #include ++#include + + enum { + failed = -1 +@@ -325,6 +326,20 @@ restart: + + flags |= SADUMP_LOCAL; + ++ switch (sh->header_version) { ++ case 0: ++ sd->max_mapnr = (uint64_t)sh->max_mapnr; ++ break; ++ default: ++ error(WARNING, ++ "sadump: unsupported header version: %u\n" ++ "sadump: assuming header version: 1\n", ++ sh->header_version); ++ case 1: ++ sd->max_mapnr = sh->max_mapnr_64; ++ break; ++ } ++ + if (sh->sub_hdr_size > 0) { + if (!read_device(&smram_cpu_state_size, sizeof(uint32_t), + &offset)) { +@@ -772,7 +787,7 @@ int read_sadump(int fd, void *bufptr, int cnt, ulong addr, physaddr_t paddr) + curpaddr = paddr & ~((physaddr_t)(sd->block_size-1)); + page_offset = paddr & ((physaddr_t)(sd->block_size-1)); + +- if ((pfn >= sd->dump_header->max_mapnr) || !page_is_ram(pfn)) ++ if ((pfn >= sd->max_mapnr) || !page_is_ram(pfn)) + return SEEK_ERROR; + if (!page_is_dumpable(pfn)) { + if (sd->flags & SADUMP_ZERO_EXCLUDED) +@@ -979,6 +994,17 @@ int sadump_memory_dump(FILE *fp) + fprintf(fp, " written_blocks: %u\n", sh->written_blocks); + fprintf(fp, " current_cpu: %u\n", sh->current_cpu); + fprintf(fp, " nr_cpus: %u\n", sh->nr_cpus); ++ if (sh->header_version >= 1) { ++ fprintf(fp, ++ " max_mapnr_64: %" PRIu64 "\n" ++ " total_ram_blocks_64: %" PRIu64 "\n" ++ " device_blocks_64: %" PRIu64 "\n" ++ " written_blocks_64: %" PRIu64 "\n", ++ sh->max_mapnr_64, ++ sh->total_ram_blocks_64, ++ sh->device_blocks_64, ++ sh->written_blocks_64); ++ } + + fprintf(fp, "\n dump sub heaer: "); + if (sh->sub_hdr_size > 0) { +@@ -1556,7 +1582,7 @@ static int block_table_init(void) + { + uint64_t pfn, section, max_section, *block_table; + +- max_section = divideup(sd->dump_header->max_mapnr, SADUMP_PF_SECTION_NUM); ++ max_section = divideup(sd->max_mapnr, SADUMP_PF_SECTION_NUM); + + block_table = calloc(sizeof(uint64_t), max_section); + if (!block_table) { +diff --git a/sadump.h b/sadump.h +index 09e313e..7f8e384 100644 +--- a/sadump.h ++++ b/sadump.h +@@ -103,6 +103,14 @@ struct sadump_header { + uint32_t written_blocks; /* Number of written blocks */ + uint32_t current_cpu; /* CPU# which handles dump */ + uint32_t nr_cpus; /* Number of CPUs */ ++ /* ++ * The members from below are supported in header version 1 ++ * and later. ++ */ ++ uint64_t max_mapnr_64; ++ uint64_t total_ram_blocks_64; ++ uint64_t device_blocks_64; ++ uint64_t written_blocks_64; + }; + + struct sadump_apic_state { +@@ -209,6 +217,8 @@ struct sadump_data { + ulonglong backup_src_start; + ulong backup_src_size; + ulonglong backup_offset; ++ ++ uint64_t max_mapnr; + }; + + struct sadump_data *sadump_get_sadump_data(void); + + diff --git a/SOURCES/use_QEMU_registers_for_active_task_backtraces.patch b/SOURCES/use_QEMU_registers_for_active_task_backtraces.patch new file mode 100644 index 0000000..327ee92 --- /dev/null +++ b/SOURCES/use_QEMU_registers_for_active_task_backtraces.patch @@ -0,0 +1,213 @@ +commit b4af1d9b48998186aef8cd9abc47c6d59e36114e +Author: Dave Anderson +Date: Tue Dec 2 17:26:40 2014 -0500 + + Fix for finding the starting stack and instruction pointer hooks for + the active tasks in x86_64 ELF or compressed dumpfiles created by the + KVM "virsh dump --memory-only" facility. Without the patch, the + backtraces of active tasks may show an invalid starting frame that + indicates "__schedule". The fix displays the exception RIP and dumps + the register contents that are stored in the dumpfile header. If the + active task was operating in the kernel, the backtrace continues from + there; if the task was operating in user-space, the backtrace is + complete at that point. + (anderson@redhat.com) + +diff --git a/defs.h b/defs.h +index 2e52bc4..dc2d65a 100644 +--- a/defs.h ++++ b/defs.h +@@ -5547,6 +5547,7 @@ int write_proc_kcore(int, void *, int, ulong, physaddr_t); + int kcore_memory_dump(FILE *); + void dump_registers_for_qemu_mem_dump(void); + void kdump_backup_region_init(void); ++void display_regs_from_elf_notes(int, FILE *); + + /* + * ramdump.c +diff --git a/diskdump.c b/diskdump.c +index 3d33fdc..6b2aab5 100644 +--- a/diskdump.c ++++ b/diskdump.c +@@ -102,6 +102,9 @@ map_cpus_to_prstatus_kdump_cmprs(void) + int online, i, j, nrcpus; + size_t size; + ++ if (pc->flags2 & QEMU_MEM_DUMP_COMPRESSED) /* notes exist for all cpus */ ++ return; ++ + if (!(online = get_cpus_online()) || (online == kt->cpus)) + return; + +diff --git a/netdump.c b/netdump.c +index 903faa0..6029a54 100644 +--- a/netdump.c ++++ b/netdump.c +@@ -72,6 +72,9 @@ map_cpus_to_prstatus(void) + int online, i, j, nrcpus; + size_t size; + ++ if (pc->flags2 & QEMU_MEM_DUMP_ELF) /* notes exist for all cpus */ ++ return; ++ + if (!(online = get_cpus_online()) || (online == kt->cpus)) + return; + +@@ -2398,8 +2401,8 @@ get_regs_from_note(char *note, ulong *ip, ulong *sp) + return user_regs; + } + +-static void +-display_regs_from_elf_notes(int cpu) ++void ++display_regs_from_elf_notes(int cpu, FILE *ofp) + { + Elf32_Nhdr *note32; + Elf64_Nhdr *note64; +@@ -2408,13 +2411,16 @@ display_regs_from_elf_notes(int cpu) + int c, skipped_count; + + /* +- * NT_PRSTATUS notes are only related to online cpus, offline cpus +- * should be skipped. ++ * Kdump NT_PRSTATUS notes are only related to online cpus, ++ * so offline cpus should be skipped. + */ +- skipped_count = 0; +- for (c = 0; c < cpu; c++) { +- if (check_offline_cpu(c)) +- skipped_count++; ++ if (pc->flags2 & QEMU_MEM_DUMP_ELF) ++ skipped_count = 0; ++ else { ++ for (c = skipped_count = 0; c < cpu; c++) { ++ if (check_offline_cpu(c)) ++ skipped_count++; ++ } + } + + if ((cpu - skipped_count) >= nd->num_prstatus_notes) { +@@ -2433,7 +2439,7 @@ display_regs_from_elf_notes(int cpu) + len = roundup(len + note64->n_descsz, 4); + user_regs = ((char *)note64) + len - SIZE(user_regs_struct) - sizeof(long); + +- fprintf(fp, ++ fprintf(ofp, + " RIP: %016llx RSP: %016llx RFLAGS: %08llx\n" + " RAX: %016llx RBX: %016llx RCX: %016llx\n" + " RDX: %016llx RSI: %016llx RDI: %016llx\n" +@@ -2473,7 +2479,7 @@ display_regs_from_elf_notes(int cpu) + len = roundup(len + note32->n_descsz, 4); + user_regs = ((char *)note32) + len - SIZE(user_regs_struct) - sizeof(long); + +- fprintf(fp, ++ fprintf(ofp, + " EAX: %08x EBX: %08x ECX: %08x EDX: %08x\n" + " ESP: %08x EIP: %08x ESI: %08x EDI: %08x\n" + " CS: %04x DS: %04x ES: %04x FS: %04x\n" +@@ -2506,7 +2512,7 @@ display_regs_from_elf_notes(int cpu) + len = roundup(len + note64->n_namesz, 4); + len = roundup(len + note64->n_descsz, 4); + // user_regs = ((char *)note64) + len - SIZE(user_regs_struct) - sizeof(long); +- fprintf(fp, "display_regs_from_elf_notes: ARM64 register dump TBD\n"); ++ fprintf(ofp, "display_regs_from_elf_notes: ARM64 register dump TBD\n"); + } + } + +@@ -2519,7 +2525,7 @@ dump_registers_for_elf_dumpfiles(void) + error(FATAL, "-r option not supported for this dumpfile\n"); + + if (NETDUMP_DUMPFILE()) { +- display_regs_from_elf_notes(0); ++ display_regs_from_elf_notes(0, fp); + return; + } + +@@ -2530,7 +2536,7 @@ dump_registers_for_elf_dumpfiles(void) + } + + fprintf(fp, "%sCPU %d:\n", c ? "\n" : "", c); +- display_regs_from_elf_notes(c); ++ display_regs_from_elf_notes(c, fp); + } + } + +@@ -2556,7 +2562,8 @@ get_netdump_regs_x86_64(struct bt_info *bt, ulong *ripp, ulong *rspp) + bt->flags |= BT_DUMPFILE_SEARCH; + + if (((NETDUMP_DUMPFILE() || KDUMP_DUMPFILE()) && +- VALID_STRUCT(user_regs_struct) && (bt->task == tt->panic_task)) || ++ VALID_STRUCT(user_regs_struct) && ++ ((bt->task == tt->panic_task) || (pc->flags2 & QEMU_MEM_DUMP_ELF))) || + (KDUMP_DUMPFILE() && (kt->flags & DWARF_UNWIND) && + (bt->flags & BT_DUMPFILE_SEARCH))) { + if (nd->num_prstatus_notes > 1) +diff --git a/task.c b/task.c +index f5bbe64..147ff5c 100644 +--- a/task.c ++++ b/task.c +@@ -483,7 +483,7 @@ task_init(void) + tt->this_task = pid_to_task(active_pid); + } + else { +- if (KDUMP_DUMPFILE() && !(pc->flags2 & QEMU_MEM_DUMP_ELF)) ++ if (KDUMP_DUMPFILE()) + map_cpus_to_prstatus(); + else if (ELF_NOTES_VALID() && DISKDUMP_DUMPFILE()) + map_cpus_to_prstatus_kdump_cmprs(); +diff --git a/x86_64.c b/x86_64.c +index bbf1326..df6c561 100644 +--- a/x86_64.c ++++ b/x86_64.c +@@ -2963,11 +2963,13 @@ x86_64_low_budget_back_trace_cmd(struct bt_info *bt_in) + diskdump_display_regs(bt->tc->processor, ofp); + else if (SADUMP_DUMPFILE()) + sadump_display_regs(bt->tc->processor, ofp); ++ else if (pc->flags2 & QEMU_MEM_DUMP_ELF) ++ display_regs_from_elf_notes(bt->tc->processor, ofp); + return; + } else if ((bt->flags & BT_KERNEL_SPACE) && + (KVMDUMP_DUMPFILE() || + (ELF_NOTES_VALID() && DISKDUMP_DUMPFILE()) || +- SADUMP_DUMPFILE())) { ++ SADUMP_DUMPFILE() || (pc->flags2 & QEMU_MEM_DUMP_ELF))) { + fprintf(ofp, " [exception RIP: "); + if ((sp = value_search(bt->instptr, &offset))) { + fprintf(ofp, "%s", sp->name); +@@ -2983,6 +2985,9 @@ x86_64_low_budget_back_trace_cmd(struct bt_info *bt_in) + diskdump_display_regs(bt->tc->processor, ofp); + else if (SADUMP_DUMPFILE()) + sadump_display_regs(bt->tc->processor, ofp); ++ else if (pc->flags2 & QEMU_MEM_DUMP_ELF) ++ display_regs_from_elf_notes(bt->tc->processor, ofp); ++ + } else if (bt->flags & BT_START) { + x86_64_print_stack_entry(bt, ofp, level, + 0, bt->instptr); +@@ -4565,7 +4570,7 @@ skip_stage: + *rip = ur_rip; + *rsp = ur_rsp; + if (is_kernel_text(ur_rip) && +- (INSTACK(ur_rsp, bt) || ++ (INSTACK(ur_rsp, bt_in) || + in_alternate_stack(bt->tc->processor, ur_rsp))) + bt_in->flags |= BT_KERNEL_SPACE; + if (!is_kernel_text(ur_rip) && in_user_stack(bt->tc->task, ur_rsp)) +@@ -4596,14 +4601,14 @@ skip_stage: + ur_rip = ULONG(user_regs + OFFSET(user_regs_struct_rip)); + ur_rsp = ULONG(user_regs + OFFSET(user_regs_struct_rsp)); + if (!in_alternate_stack(bt->tc->processor, ur_rsp) && +- !stkptr_to_task(bt->task)) { ++ !stkptr_to_task(ur_rsp)) { + if (CRASHDEBUG(1)) + error(INFO, + "x86_64_get_dumpfile_stack_frame: " + "ELF mismatch: RSP: %lx task: %lx\n", + ur_rsp, bt->task); + } else { +- if (is_kernel_text(ur_rip) && (INSTACK(ur_rsp, bt) || ++ if (is_kernel_text(ur_rip) && (INSTACK(ur_rsp, bt_in) || + in_alternate_stack(bt->tc->processor, ur_rsp))) + bt_in->flags |= BT_KERNEL_SPACE; + if (!is_kernel_text(ur_rip) && in_user_stack(bt->tc->task, ur_rsp)) + diff --git a/SPECS/crash.spec b/SPECS/crash.spec new file mode 100644 index 0000000..c6bd442 --- /dev/null +++ b/SPECS/crash.spec @@ -0,0 +1,414 @@ +# +# crash core analysis suite +# +Summary: Kernel analysis utility for live systems, netdump, diskdump, kdump, LKCD or mcore dumpfiles +Name: crash +Version: 7.0.9 +Release: 6%{?dist} +License: GPLv3 +Group: Development/Debuggers +Source: http://people.redhat.com/anderson/crash-%{version}.tar.gz +URL: http://people.redhat.com/anderson +ExclusiveOS: Linux +ExclusiveArch: %{ix86} ia64 x86_64 ppc ppc64 s390 s390x %{arm} aarch64 ppc64le +Buildroot: %{_tmppath}/%{name}-%{version}-%{release}-buildroot-%(%{__id_u} -n) +BuildRequires: ncurses-devel zlib-devel lzo-devel bison snappy-devel +Requires: binutils +Patch0: lzo_snappy.patch +Patch1: use_QEMU_registers_for_active_task_backtraces.patch +Patch2: bt-mislabeling.patch +Patch3: ppc64_bt_active_task.patch +Patch4: sadump_16TB.patch +Patch5: ARM64_virtual_memory_layout.patch + +%description +The core analysis suite is a self-contained tool that can be used to +investigate either live systems, kernel core dumps created from the +netdump, diskdump and kdump packages from Red Hat Linux, the mcore kernel patch +offered by Mission Critical Linux, or the LKCD kernel patch. + +%package devel +Requires: %{name} = %{version}, zlib-devel lzo-devel snappy-devel +Summary: kernel crash analysis utility for live systems, netdump, diskdump, kdump, LKCD or mcore dumpfiles +Group: Development/Debuggers + +%description devel +The core analysis suite is a self-contained tool that can be used to +investigate either live systems, kernel core dumps created from the +netdump, diskdump and kdump packages from Red Hat Linux, the mcore kernel patch +offered by Mission Critical Linux, or the LKCD kernel patch. + +%prep +%setup -n %{name}-%{version} -q +%patch0 -p1 -b lzo_snappy.patch +%patch1 -p1 -b use_QEMU_registers_for_active_task_backtraces.patch +%patch2 -p1 -b bt-mislabeling.patch +%patch3 -p1 -b ppc64_bt_active_task.patch +%patch4 -p1 -b sadump_16TB.patch +%patch5 -p1 -b ARM64_virtual_memory_layout.patch + +%build +make RPMPKG="%{version}-%{release}" CFLAGS="%{optflags}" + +%install +rm -rf %{buildroot} +mkdir -p %{buildroot}%{_bindir} +make DESTDIR=%{buildroot} install +mkdir -p %{buildroot}%{_mandir}/man8 +cp -p crash.8 %{buildroot}%{_mandir}/man8/crash.8 +mkdir -p %{buildroot}%{_includedir}/crash +chmod 0644 defs.h +cp -p defs.h %{buildroot}%{_includedir}/crash + +%clean +rm -rf %{buildroot} + +%files +%defattr(-,root,root,-) +%{_bindir}/crash +%{_mandir}/man8/crash.8* +%doc README COPYING3 + +%files devel +%defattr(-,root,root,-) +%{_includedir}/* + +%changelog +* Tue Apr 21 2015 Dave Anderson - 7.0.9-6 +- Calculate ARM64 virtual memory layout based upon struct page size + Resolves: rhbz#1204941 + +* Tue Apr 7 2015 Dave Anderson - 7.0.9-5 +- Support new sadump format that can represent more than 16 TB physical memory space + Resolves: rhbz#1182383 + +* Mon Jan 26 2015 Dave Anderson - 7.0.9-4 + Fix ppc64 "bt" command for active tasks in compressed kdumps. + Resolves: rhbz#1184401 + +* Mon Jan 12 2015 Dave Anderson - 7.0.9-3 + Fix "bt" command mislabeling errors. + Resolves: rhbz#1179476 + +* Mon Dec 08 2014 Dave Anderson - 7.0.9-2 +- Use registers from QEMU-generated ELF and compressed kdump headers + for active task backtraces. +- Resolves: rhbz#1169555 + +* Fri Nov 14 2014 Dave Anderson - 7.0.9-1 +- Rebase to upstream version 7.0.9. +- Resolves: rhbz#1110513 + +* Tue Sep 23 2014 Dave Anderson - 7.0.8-2 +- Fix ps performance patch regression on live systems. +- Resolves: rhbz#1134177 +- Minor build-related fixes for ppc64le. +- Resolves: rhbz#1123991 + +* Fri Sep 12 2014 Dave Anderson - 7.0.8-1 +- Rebase to upstream version 7.0.8. +- Resolves: rhbz#1110513 +- Fix to calculate the physical base address of dumpfiles created + by a "virsh dump" of an OVMF guest. +- Resolves: rhbz#1080698 +- Support for aarch64 architecture. +- Resolves: rhbz#1110551 +- Fix to prevent crash from spinning endlessly on a corrupted/truncated + dumpfile whose bitmap data is not wholly contained within the file. +- Resolves: rhbz#1114088 +- Support for ppc64le architecture. +- Resolves: rhbz#1123991 + +* Tue Jan 28 2014 Daniel Mach - 7.0.2-6 +- Mass rebuild 2014-01-24 + +* Fri Jan 24 2014 Dave Anderson - 7.0.2-5 +- Fix for a missing kernel-mode exception frame dump by the x86_64 + "bt" command if a page fault was generated by a bogus RIP. +- Resolves: rhbz#1057353 +- Fix for the x86_64 "bt" command to prevent an unwarranted message + indicating "WARNING: possibly bogus exception frame" generated + from a blocked kernel thread that was in the process of exec'ing + a user process via the call_usermodehelper() facility. +- Resolves: rhbz#1057357 + +* Fri Jan 10 2014 Dave Anderson - 7.0.2-4 +- Fixes for "kmem -S" command for CONFIG_SLUB. +- Resolves: rhbz#1045591 +- Increase S390X NR_CPUS +- Resolves: rhbz#1051156 + +* Fri Dec 27 2013 Daniel Mach - 7.0.2-3 +- Mass rebuild 2013-12-27 + +* Tue Oct 29 2013 Dave Anderson - 7.0.2-2 +- Compressed kdump 46-bit physical memory support + Resolves: rhbz#1015250 +- Fix incorrect backtrace for dumps taken with "virsh dump --memory-only" + Resolves: rhbz#1020469 +- Fix cpu number display on systems with more than 254 cpus + Resolves: rhbz#1020536 + +* Wed Sep 04 2013 Dave Anderson - 7.0.2-1 +- Update to latest upstream release +- Fix for ppc64 embedded gdb NULL pointer translation sigsegv +- Fix for bt -F failure + +* Fri Jul 26 2013 Dave Anderson - 7.0.1-4 +- Add lzo-devel and snappy-devel to crash-devel Requires line + +* Tue Jul 23 2013 Dave Anderson - 7.0.1-3 +- Build with snappy compression support + +* Tue Jul 9 2013 Dave Anderson - 7.0.1-2 +- Fix for ppc64 Linux 3.10 vmalloc/user-space virtual address translation + +* Tue Jun 18 2013 Dave Anderson - 7.0.1-1 +- Update to latest upstream release +- Build with LZO support + +* Tue Apr 9 2013 Dave Anderson - 6.1.6-1 +- Update to latest upstream release + +* Tue Feb 19 2013 Dave Anderson - 6.1.4-1 +- Update to latest upstream release + +* Wed Feb 13 2013 Fedora Release Engineering - 6.1.2-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_19_Mass_Rebuild + +* Wed Jan 9 2013 Dave Anderson - 6.1.2-1 +- Update to latest upstream release + +* Tue Nov 27 2012 Dave Anderson - 6.1.1-1 +- Update to latest upstream release + +* Mon Sep 1 2012 Dave Anderson - 6.1.0-1 +- Add ppc to ExclusiveArch list +- Update to latest upstream release + +* Tue Aug 21 2012 Dave Anderson - 6.0.9-1 +- Update to latest upstream release + +* Wed Jul 18 2012 Fedora Release Engineering - 6.0.8-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_18_Mass_Rebuild + +* Mon Jul 1 2012 Dave Anderson - 6.0.8-1 +- Update to latest upstream release. +- Replace usage of "struct siginfo" with "siginfo_t". + +* Mon Apr 30 2012 Dave Anderson - 6.0.6-1 +- Update to latest upstream release + +* Mon Mar 26 2012 Dave Anderson - 6.0.5-1 +- Update to latest upstream release + +* Wed Jan 4 2012 Dave Anderson - 6.0.2-1 +- Update to latest upstream release + +* Wed Oct 26 2011 Dave Anderson - 6.0.0-1 +- Update to latest upstream release + +* Tue Sep 20 2011 Dave Anderson - 5.1.8-1 +- Update to latest upstream release +- Additional fixes for gcc-4.6 -Werror compile failures for ARM architecture. + +* Thu Sep 1 2011 Dave Anderson - 5.1.7-2 +- Fixes for gcc-4.6 -Werror compile failures for ARM architecture. + +* Wed Aug 17 2011 Dave Anderson - 5.1.7-1 +- Update to latest upstream release +- Fixes for gcc-4.6 -Werror compile failures for ppc64/ppc. + +* Tue May 31 2011 Peter Robinson - 5.1.5-1 +- Update to latest upstream release +- Add ARM to the Exclusive arch + +* Wed Feb 25 2011 Dave Anderson - 5.1.2-2 +- Fixes for gcc-4.6 -Werror compile failures in gdb module. + +* Wed Feb 23 2011 Dave Anderson - 5.1.2-1 +- Upstream version. + +* Tue Feb 08 2011 Fedora Release Engineering - 5.0.6-3 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_15_Mass_Rebuild + +* Tue Jul 20 2010 Dave Anderson - 5.0.6-2 +- Bump version. + +* Tue Jul 20 2010 Dave Anderson - 5.0.6-1 +- Update to upstream version. + +* Fri Sep 11 2009 Dave Anderson - 4.0.9-2 + Bump version. + +* Fri Sep 11 2009 Dave Anderson - 4.0.9-1 +- Update to upstream release, which allows the removal of the + Revision tag workaround, the crash-4.0-8.11-dwarf3.patch and + the crash-4.0-8.11-optflags.patch + +* Sun Aug 05 2009 Lubomir Rintel - 4.0.8.11-2 +- Fix reading of dwarf 3 DW_AT_data_member_location +- Use proper compiler flags + +* Wed Aug 05 2009 Lubomir Rintel - 4.0.8.11-1 +- Update to later upstream release +- Fix abuse of Revision tag + +- Rebuilt for https://fedoraproject.org/wiki/Fedora_12_Mass_Rebuild +* Fri Jul 24 2009 Fedora Release Engineering - 4.0-9.7.2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_12_Mass_Rebuild + +* Tue Feb 24 2009 Fedora Release Engineering - 4.0-8.7.2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_11_Mass_Rebuild + +* Thu Feb 19 2009 Dave Anderson - 4.0-7.7.2 +- Replace exclusive arch i386 with ix86. + +* Thu Feb 19 2009 Dave Anderson - 4.0-7.7.1 +- Updates to this file per crash merge review +- Update to upstream version 4.0-7.7. Full changelog viewable in: + http://people.redhat.com/anderson/crash.changelog.html + +* Tue Jul 15 2008 Tom "spot" Callaway 4.0-7 +- fix license tag + +* Tue Apr 29 2008 Dave Anderson - 4.0-6.3 +- Added crash-devel subpackage +- Updated crash.patch to match upstream version 4.0-6.3 + +* Wed Feb 20 2008 Dave Anderson - 4.0-6.0.5 +- Second attempt at addressing the GCC 4.3 build, which failed due + to additional ptrace.h includes in the lkcd vmdump header files. + +* Wed Feb 20 2008 Dave Anderson - 4.0-6.0.4 +- First attempt at addressing the GCC 4.3 build, which failed on x86_64 + because ptrace-abi.h (included by ptrace.h) uses the "u32" typedef, + which relies on , and include/asm-x86_64/types.h + does not not typedef u32 as done in include/asm-x86/types.h. + +* Mon Feb 18 2008 Fedora Release Engineering - 4.0-6.0.3 +- Autorebuild for GCC 4.3 + +* Wed Jan 23 2008 Dave Anderson - 4.0-5.0.3 +- Updated crash.patch to match upstream version 4.0-5.0. + +* Wed Aug 29 2007 Dave Anderson - 4.0-4.6.2 +- Updated crash.patch to match upstream version 4.0-4.6. + +* Wed Sep 13 2006 Dave Anderson - 4.0-3.3 +- Updated crash.patch to match upstream version 4.0-3.3. +- Support for x86_64 relocatable kernels. BZ #204557 + +* Mon Aug 7 2006 Dave Anderson - 4.0-3.1 +- Updated crash.patch to match upstream version 4.0-3.1. +- Added kdump reference to description. +- Added s390 and s390x to ExclusiveArch list. BZ #199125 +- Removed LKCD v1 pt_regs references for s390/s390x build. +- Removed LKCD v2_v3 pt_regs references for for s390/s390x build. + +* Fri Jul 14 2006 Jesse Keating - 4.0-3 +- rebuild + +* Mon May 15 2006 Dave Anderson - 4.0-2.26.4 +- Updated crash.patch such that is not #include'd + by s390_dump.c; IBM did not make the file s390[s] only; BZ #192719 + +* Mon May 15 2006 Dave Anderson - 4.0-2.26.3 +- Updated crash.patch such that is not #include'd + by vas_crash.h; only ia64 build complained; BZ #191719 + +* Mon May 15 2006 Dave Anderson - 4.0-2.26.2 +- Updated crash.patch such that is not #include'd + by lkcd_x86_trace.c; also for BZ #191719 + +* Mon May 15 2006 Dave Anderson - 4.0-2.26.1 +- Updated crash.patch to bring it up to 4.0-2.26, which should + address BZ #191719 - "crash fails to build in mock" + +* Tue Feb 07 2006 Jesse Keating - 4.0-2.18.1 +- rebuilt for new gcc4.1 snapshot and glibc changes + +* Wed Jan 04 2006 Dave Anderson 4.0-2.18 +- Updated source package to crash-4.0.tar.gz, and crash.patch + to bring it up to 4.0-2.18. + +* Fri Dec 09 2005 Jesse Keating +- rebuilt + +* Thu Mar 03 2005 Dave Anderson 3.10-13 +- Compiler error- and warning-related fixes for gcc 4 build. +- Update to enhance x86 and x86_64 gdb disassembly output so as to + symbolically display call targets from kernel module text without + requiring module debuginfo data. +- Fix hole where an ia64 vmcore could be mistakenly accepted as a + usable dumpfile on an x86_64 machine, leading eventually to a + non-related error message. +* Wed Mar 02 2005 Dave Anderson 3.10-12 +- rebuild (gcc 4) +* Thu Feb 10 2005 Dave Anderson 3.10-9 +- Updated source package to crash-3.10.tar.gz, containing + IBM's final ppc64 processor support for RHEL4 +- Fixes potential "bt -a" hang on dumpfile where netdump IPI interrupted + an x86 process while executing the instructions just after it had entered + the kernel for a syscall, but before calling the handler. BZ #139437 +- Update to handle backtraces in dumpfiles generated on IA64 with the + INIT switch (functionality intro'd in RHEL3-U5 kernel). BZ #139429 +- Fix for handling ia64 and x86_64 machines booted with maxcpus=1 on + an SMP kernel. BZ #139435 +- Update to handle backtraces in dumpfiles generated on x86_64 from the + NMI exception stack (functionality intro'd in RHEL3-U5 kernel). +- "kmem -[sS]" beefed up to more accurately verify slab cache chains + and report errors found. +- Fix for ia64 INIT switch-generated backtrace handling when + init_handler_platform() is inlined into ia64_init_handler(); + properly handles both RHEL3 and RHEL4 kernel patches. + BZ #138350 +- Update to enhance ia64 gdb disassembly output so as to + symbolically display call targets from kernel module + text without requiring module debuginfo data. + +* Wed Jul 14 2004 Dave Anderson 3.8-5 +- bump release for fc3 + +* Tue Jul 13 2004 Dave Anderson 3.8-4 +- Fix for gcc 3.4.x/gdb issue where vmlinux was mistakenly presumed non-debug + +* Fri Jun 25 2004 Dave Anderson 3.8-3 +- remove (harmless) error message during ia64 diskdump invocation when + an SMP system gets booted with maxcpus=1 +- several 2.6 kernel specific updates + +* Thu Jun 17 2004 Dave Anderson 3.8-2 +- updated source package to crash-3.8.tar.gz +- diskdump support +- x86_64 processor support + +* Mon Sep 22 2003 Dave Anderson 3.7-5 +- make bt recovery code start fix-up only upon reaching first faulting frame + +* Fri Sep 19 2003 Dave Anderson 3.7-4 +- fix "bt -e" and bt recovery code to recognize new __KERNEL_CS and DS + +* Wed Sep 10 2003 Dave Anderson 3.7-3 +- patch to recognize per-cpu GDT changes that redefine __KERNEL_CS and DS + +* Wed Sep 10 2003 Dave Anderson 3.7-2 +- patches for netdump active_set determination and slab info gathering + +* Wed Aug 20 2003 Dave Anderson 3.7-1 +- updated source package to crash-3.7.tar.gz + +* Wed Jul 23 2003 Dave Anderson 3.6-1 +- removed Packager, Distribution, and Vendor tags +- updated source package to crash-3.6.tar.gz + +* Fri Jul 18 2003 Jay Fenlason 3.5-2 +- remove ppc from arch list, since it doesn't work with ppc64 kernels +- remove alpha from the arch list since we don't build it any more + +* Fri Jul 18 2003 Matt Wilson 3.5-1 +- use %%defattr(-,root,root) + +* Tue Jul 15 2003 Jay Fenlason +- Updated spec file as first step in turning this into a real RPM for taroon. +- Wrote man page.