Go to file
Kazuhito Hagio b440dc57c6 extensions: remove trace.c
The trace.c extension module moved to the separate repository [1],
remove the file from the crash repository.

[1] https://github.com/fujitsu/crash-trace

Signed-off-by: Kazuhito Hagio <k-hagio-ab@nec.com>
2021-04-19 09:35:47 +09:00
extensions extensions: remove trace.c 2021-04-19 09:35:47 +09:00
memory_driver memory_driver: Fix memory driver module build with Linux 5.4 and later 2020-11-09 15:25:20 +09:00
.gitignore Remove the leftover ".constructor" build file in the extensions 2015-05-18 11:00:31 -04:00
.rh_rpm_package Mark start of 7.3.0 development phase with version 7.2.9++ 2020-11-30 17:53:19 +09:00
COPYING3 Initial commit: crash-7.0.4 2014-01-28 16:46:11 -05:00
Makefile Add valgrind support for the crash's custom memory allocator 2021-03-05 15:57:15 +09:00
README Add valgrind support for the crash's custom memory allocator 2021-03-05 15:57:15 +09:00
alpha.c Initial commit: crash-7.0.4 2014-01-28 16:46:11 -05:00
arm.c When accessing the 32-bit ARM kernel's "crash_notes" array, continue 2019-12-16 11:28:46 -05:00
arm64.c arm64: update mapping symbol filter in arm64_verify_symbol 2020-12-29 10:52:58 +09:00
bpf.c Enhancement to the "bpf -p|-P" options to display the eBPF program 2020-03-05 14:25:02 -05:00
cmdline.c Prevent a SIGSEGV if a user attempts to input a command line that 2019-01-07 10:44:29 -05:00
configure.c Add valgrind support for the crash's custom memory allocator 2021-03-05 15:57:15 +09:00
crash.8 vmware_guestdump: new input format 2020-10-15 11:09:46 +09:00
defs.h x86_64: Add Linux 5.8+ exception functions to check exception frame 2021-04-16 10:58:25 +09:00
dev.c Fix "dev -d" option on Linux 5.11-rc1 and later kernels 2021-01-25 17:53:35 +09:00
diskdump.c memory, zram: introduce and export readswap() 2021-03-31 16:07:37 +09:00
diskdump.h Added recognition of the new DUMP_DH_EXCLUDED_VMEMMAP flag in the 2015-10-29 14:43:45 -04:00
extensions.c Introduction of a new "extend -s" option, which shows all available 2020-03-03 09:47:51 -05:00
filesys.c vmware_guestdump: new input format 2020-10-15 11:09:46 +09:00
gdb-7.6-ppc64le-support.patch Implement support for the ppc64le PPC64 little-endian architecture. 2014-09-05 10:34:10 -04:00
gdb-7.6-proc_service.h.patch Fix for a 32-bit MIPS compilation error if glibc-2.25 or later has 2017-05-04 10:24:50 -04:00
gdb-7.6.patch GDB: fix the failure of 'set scope' command 2021-04-09 14:32:06 +09:00
gdb_interface.c Do not pass through the 'sy' command to GDB 2021-03-25 15:31:18 +09:00
global_data.c Fix for the "mount -n [pid|task]" option when running on a live 2020-04-15 09:08:10 -04:00
help.c Add valgrind support for the crash's custom memory allocator 2021-03-05 15:57:15 +09:00
ia64.c For many years, Xen Dom0 dumps could only be saved in ELF format. 2015-09-25 09:14:57 -04:00
ibm_common.h Initial commit: crash-7.0.4 2014-01-28 16:46:11 -05:00
ipcs.c Commit dd12805ed1db7 in the linux-next kernel repository, titled 2019-03-22 15:50:40 -04:00
kaslr_helper.c kaslr: get offset by walking page tree 2020-11-12 11:19:19 +09:00
kernel.c xen: add paravirt_patch_default lookup 2021-04-16 13:51:41 +09:00
kvmdump.c Address several Coverity Scan "RESOURCE_LEAK" issues in the following 2018-10-11 13:28:39 -04:00
kvmdump.h Initial commit: crash-7.0.4 2014-01-28 16:46:11 -05:00
lkcd_common.c Fixes for "[-Werror=misleading-indentation]" compiler warnings that 2016-02-02 10:15:11 -05:00
lkcd_dump_v5.h Initial commit: crash-7.0.4 2014-01-28 16:46:11 -05:00
lkcd_dump_v7.h Initial commit: crash-7.0.4 2014-01-28 16:46:11 -05:00
lkcd_dump_v8.h Initial commit: crash-7.0.4 2014-01-28 16:46:11 -05:00
lkcd_fix_mem.c Initial commit: crash-7.0.4 2014-01-28 16:46:11 -05:00
lkcd_fix_mem.h Initial commit: crash-7.0.4 2014-01-28 16:46:11 -05:00
lkcd_v1.c Initial commit: crash-7.0.4 2014-01-28 16:46:11 -05:00
lkcd_v2_v3.c Initial commit: crash-7.0.4 2014-01-28 16:46:11 -05:00
lkcd_v5.c Initial commit: crash-7.0.4 2014-01-28 16:46:11 -05:00
lkcd_v7.c Initial commit: crash-7.0.4 2014-01-28 16:46:11 -05:00
lkcd_v8.c Address several Coverity Scan "RESOURCE_LEAK" issues in the following 2018-10-11 13:28:39 -04:00
lkcd_vmdump_v1.h Initial commit: crash-7.0.4 2014-01-28 16:46:11 -05:00
lkcd_vmdump_v2_v3.h Introduction of support for the 64-bit SPARC V9 architecture. This 2016-04-26 14:45:59 -04:00
lkcd_x86_trace.c Fix for infrequent failures of the x86 "bt" command to handle cases 2018-05-08 13:49:57 -04:00
lkcd_x86_trace.h Initial commit: crash-7.0.4 2014-01-28 16:46:11 -05:00
main.c vmware_guestdump: new input format 2020-10-15 11:09:46 +09:00
makedumpfile.c Fix for the "crash --osrelease" option for flattened format dumpfiles 2015-07-14 14:56:11 -04:00
makedumpfile.h Initial commit: crash-7.0.4 2014-01-28 16:46:11 -05:00
memory.c memory, zram: introduce and export readswap() 2021-03-31 16:07:37 +09:00
mips.c The 32-bit MIPS PGD_ORDER() macro expects __PGD_ORDER to be signed, 2016-12-05 13:55:22 -05:00
net.c Document the "-N", "-g" and "-z" options in the "help" command's 2019-05-07 11:46:22 -04:00
netdump.c netdump: fix illegal read from already freed buffer 2021-01-22 18:36:59 +09:00
netdump.h Support core files with "unusual" layout 2020-08-12 14:18:47 +09:00
ppc.c Fix for Linux 3.11 and later ARM kernels, in which all non-panicking 2014-04-28 15:45:51 -04:00
ppc64.c Similar to ARM64, the X86_64, PPC64 and S390x architectures will use 2019-11-22 13:39:40 -05:00
printk.c printk: use committed/finalized state values 2020-12-01 15:22:36 +09:00
qemu-load.c Recognize and parse the new QEMU_VM_CONFIGURATION and QEMU_VM_FOOTER 2016-05-16 11:13:54 -04:00
qemu-load.h Recognize and parse the new QEMU_VM_CONFIGURATION and QEMU_VM_FOOTER 2016-05-16 11:13:54 -04:00
qemu.c Initial commit: crash-7.0.4 2014-01-28 16:46:11 -05:00
ramdump.c Added support for x86_64 ramdump files. Without the patch, the crash 2016-05-04 14:34:53 -04:00
remote.c Fixes to address several gcc-8.0.1 compiler warnings that are generated 2018-04-20 14:37:52 -04:00
rse.h Initial commit: crash-7.0.4 2014-01-28 16:46:11 -05:00
s390.c Support for "irq" and "irq -u" on the S390 and S390X architectures 2014-11-17 13:48:21 -05:00
s390_dump.c When the is_s390_dump() function is called to determine whether 2019-04-01 11:56:41 -04:00
s390dbf.c s390dbf: support s390 debug feature version 3 2020-08-18 19:10:02 +08:00
s390x.c Rework the previous patch for support of S390X standalone dumpfiles 2020-01-17 13:34:53 -05:00
sadump.c calc_kaslr_offset: 5-level paging support 2020-11-12 11:18:49 +09:00
sadump.h Fix for support of KASLR enabled kernels captured by the SADUMP 2017-10-23 11:15:39 -04:00
sparc64.c Introduction of support for the 64-bit SPARC V9 architecture. This 2016-04-26 14:45:59 -04:00
symbols.c symbols: fix offset print for function pointers that return pointers 2021-04-13 10:51:29 +09:00
task.c task.c: avoid unnecessary cpu cycles in stkptr_to_task() 2020-11-17 15:22:16 +09:00
test.c Initial commit: crash-7.0.4 2014-01-28 16:46:11 -05:00
tools.c tools: Fix potential write to object of 0 size 2021-03-05 16:03:06 +09:00
unwind.c Initial commit: crash-7.0.4 2014-01-28 16:46:11 -05:00
unwind.h Initial commit: crash-7.0.4 2014-01-28 16:46:11 -05:00
unwind_arm.c 32-bit ARM kernels built with the Thumb-2 instruction set utilize 2019-02-26 10:13:59 -05:00
unwind_decoder.c Initial commit: crash-7.0.4 2014-01-28 16:46:11 -05:00
unwind_i.h Initial commit: crash-7.0.4 2014-01-28 16:46:11 -05:00
unwind_x86.h Initial commit: crash-7.0.4 2014-01-28 16:46:11 -05:00
unwind_x86_32_64.c Address several Coverity Scan "RESOURCE_LEAK" issues in the following 2018-10-11 13:28:39 -04:00
unwind_x86_64.h Initial commit: crash-7.0.4 2014-01-28 16:46:11 -05:00
va_server.c Address several Coverity Scan "RESOURCE_LEAK" issues in the following 2018-10-11 13:28:39 -04:00
va_server.h Initial commit: crash-7.0.4 2014-01-28 16:46:11 -05:00
va_server_v1.c Address several Coverity Scan "RESOURCE_LEAK" issues in the following 2018-10-11 13:28:39 -04:00
vas_crash.h Initial commit: crash-7.0.4 2014-01-28 16:46:11 -05:00
vmcore.h Linux 4.18 kernels introduced a new CONFIG_PROC_VMCORE_DEVICE_DUMP 2019-04-23 14:36:56 -04:00
vmware_guestdump.c Fix for compiler warnings on 32-bit architectures 2020-11-17 13:16:50 +09:00
vmware_vmss.c calc_kaslr_offset: 5-level paging support 2020-11-12 11:18:49 +09:00
vmware_vmss.h vmware_vmss: make vmss global 2020-10-15 11:09:46 +09:00
x86.c xen: add paravirt_patch_default lookup 2021-04-16 13:51:41 +09:00
x86_64.c xen: add paravirt_patch_default lookup 2021-04-16 13:51:41 +09:00
xen_dom0.c The crash utility has not supported Xen dom0 and domU dumpfiles since 2016-01-26 10:18:09 -05:00
xen_dom0.h The crash utility has not supported Xen dom0 and domU dumpfiles since 2016-01-26 10:18:09 -05:00
xen_hyper.c Fix for newer Xen hypervisors, which fail during initialization with 2019-12-12 12:08:11 -05:00
xen_hyper_command.c Initial commit: crash-7.0.4 2014-01-28 16:46:11 -05:00
xen_hyper_defs.h Fix for newer Xen hypervisors, which fail during initialization with 2019-12-12 12:08:11 -05:00
xen_hyper_dump_tables.c Fix for newer Xen hypervisors, which fail during initialization with 2019-12-12 12:08:11 -05:00
xen_hyper_global_data.c Initial commit: crash-7.0.4 2014-01-28 16:46:11 -05:00
xendump.c xendump: fix failure to match arm/aarch64 elf format of xendump file 2020-10-26 13:17:15 +09:00
xendump.h Crash 7.1.5 commit c341345659 (xen: Add 2017-05-24 11:50:35 -04:00

README


                         CORE ANALYSIS SUITE

  The core analysis suite is a self-contained tool that can be used to
  investigate either live systems, kernel core dumps created from dump
  creation facilities such as kdump, kvmdump, xendump, the netdump and
  diskdump packages offered by Red Hat, the LKCD kernel patch, the mcore
  kernel patch created by Mission Critical Linux, as well as other formats
  created by manufacturer-specific firmware.

  o  The tool is loosely based on the SVR4 crash command, but has been
     completely integrated with gdb in order to be able to display 
     formatted kernel data structures, disassemble source code, etc.
     
  o  The current set of available commands consist of common kernel core
     analysis tools such as a context-specific stack traces, source code
     disassembly, kernel variable displays, memory display, dumps of 
     linked-lists, etc.  In addition, any gdb command may be entered,
     which in turn will be passed onto the gdb module for execution.  

  o  There are several commands that delve deeper into specific kernel
     subsystems, which also serve as templates for kernel developers
     to create new commands for analysis of a specific area of interest.
     Adding a new command is a simple affair, and a quick recompile
     adds it to the command menu.

  o  The intent is to make the tool independent of Linux version dependencies,
     building in recognition of major kernel code changes so as to adapt to 
     new kernel versions, while maintaining backwards compatibility.

  A whitepaper with complete documentation concerning the use of this utility
  can be found here:
 
         https://crash-utility.github.io/crash_whitepaper.html
 
  These are the current prerequisites: 

  o  At this point, x86, ia64, x86_64, ppc64, ppc, arm, arm64, alpha, mips,
     s390 and s390x-based kernels are supported.  Other architectures may be
     addressed in the future.

  o  One size fits all -- the utility can be run on any Linux kernel version
     version dating back to 2.2.5-15.  A primary design goal is to always
     maintain backwards-compatibility.

  o  In order to contain debugging data, the top-level kernel Makefile's CFLAGS
     definition must contain the -g flag.  Typically distributions will contain
     a package containing a vmlinux file with full debuginfo data.  If not, the
     kernel must be rebuilt:

     For 2.2 kernels that are not built with -g, change the following line:

        CFLAGS = -Wall -Wstrict-prototypes -O2 -fomit-frame-pointer

     to:

        CFLAGS = -g -Wall -Wstrict-prototypes -O2 -fomit-frame-pointer

     For 2.4 kernels that are not built with -g, change the following line:

        CFLAGS := $(CPPFLAGS) -Wall -Wstrict-prototypes -O2 -fomit-frame-pointer -fno-strict-aliasing

     to:

        CFLAGS := -g $(CPPFLAGS) -Wall -Wstrict-prototypes -O2 -fomit-frame-pointer -fno-strict-aliasing

     For 2.6 and later kernels that are not built with -g, the kernel should
     be configured with CONFIG_DEBUG_INFO enabled, which in turn will add
     the -g flag to the CFLAGS setting in the kernel Makefile.
 
     After the kernel is re-compiled, the uncompressed "vmlinux" kernel
     that is created in the top-level kernel build directory must be saved.

  To build the crash utility: 

    $ tar -xf crash-7.2.9.tar.gz
    $ cd crash-7.2.9
    $ make

  The initial build will take several minutes  because the embedded gdb module
  must be configured and built.  Alternatively, the crash source RPM file
  may be installed and built, and the resultant crash binary RPM file installed.

  The crash binary can only be used on systems of the same architecture as
  the host build system.  There are a few optional manners of building the
  crash binary:

  o  On an x86_64 host, a 32-bit x86 binary that can be used to analyze
     32-bit x86 dumpfiles may be built by typing "make target=X86".
  o  On an x86 or x86_64 host, a 32-bit x86 binary that can be used to analyze
     32-bit arm dumpfiles may be built by typing "make target=ARM".
  o  On an x86 or x86_64 host, a 32-bit x86 binary that can be used to analyze
     32-bit mips dumpfiles may be built by typing "make target=MIPS".
  o  On an ppc64 host, a 32-bit ppc binary that can be used to analyze
     32-bit ppc dumpfiles may be built by typing "make target=PPC".
  o  On an x86_64 host, an x86_64 binary that can be used to analyze
     arm64 dumpfiles may be built by typing "make target=ARM64".
  o  On an x86_64 host, an x86_64 binary that can be used to analyze
     ppc64le dumpfiles may be built by typing "make target=PPC64".

  Traditionally when vmcores are compressed via the makedumpfile(8) facility
  the libz compression library is used, and by default the crash utility
  only supports libz.  Recently makedumpfile has been enhanced to optionally
  use either the LZO or snappy compression libraries.  To build crash with
  either or both of those libraries, type "make lzo" or "make snappy".

  crash supports valgrind Memcheck tool on the crash's custom memory allocator.
  To build crash with this feature enabled, type "make valgrind" and then run
  crash with valgrind as "valgrind crash vmlinux vmcore".

  All of the alternate build commands above are "sticky" in that the
  special "make" targets only have to be entered one time; all subsequent
  builds will follow suit.

  If the tool is run against a kernel dumpfile, two arguments are required, the
  uncompressed kernel name and the kernel dumpfile name.  

  If run on a live system, only the kernel name is required, because /dev/mem 
  will be used as the "dumpfile".  On Red Hat or Fedora kernels where the
  /dev/mem device is restricted, the /dev/crash memory driver will be used.
  If neither /dev/mem or /dev/crash are available, then /proc/kcore will be
  be used as the live memory source.  If /proc/kcore is also restricted, then
  the Red Hat /dev/crash driver may be compiled and installed; its source
  is included in the crash-7.2.9/memory_driver subdirectory.

  If the kernel file is stored in /boot, /, /boot/efi, or in any /usr/src
  or /usr/lib/debug/lib/modules subdirectory, then no command line arguments
  are required -- the first kernel found that matches /proc/version will be
  used as the namelist.
  
  For example, invoking crash on a live system would look like this:

    $ crash
    
    crash 7.2.9
    Copyright (C) 2002-2020  Red Hat, Inc.
    Copyright (C) 2004, 2005, 2006, 2010  IBM Corporation
    Copyright (C) 1999-2006  Hewlett-Packard Co
    Copyright (C) 2005, 2006, 2011, 2012  Fujitsu Limited
    Copyright (C) 2006, 2007  VA Linux Systems Japan K.K.
    Copyright (C) 2005, 2011  NEC Corporation
    Copyright (C) 1999, 2002, 2007  Silicon Graphics, Inc.
    Copyright (C) 1999, 2000, 2001, 2002  Mission Critical Linux, Inc.
    This program is free software, covered by the GNU General Public License,
    and you are welcome to change it and/or distribute copies of it under
    certain conditions.  Enter "help copying" to see the conditions.
    This program has absolutely no warranty.  Enter "help warranty" for details.
     
    GNU gdb 7.6
    Copyright 2013 Free Software Foundation, Inc.
    License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
    This is free software: you are free to change and redistribute it.
    There is NO WARRANTY, to the extent permitted by law.  Type "show copying"
    and "show warranty" for details.
    This GDB was configured as "i686-pc-linux-gnu"...
     
          KERNEL: /boot/vmlinux
        DUMPFILE: /dev/mem
            CPUS: 1
            DATE: Fri Nov 20 08:31:51 JST 2020
          UPTIME: 10 days, 22:55:18
    LOAD AVERAGE: 0.08, 0.03, 0.01
           TASKS: 42
        NODENAME: ha2.mclinux.com
         RELEASE: 2.4.0-test10
         VERSION: #11 SMP Thu Nov 4 15:09:25 EST 2000
         MACHINE: i686  (447 MHz)
	  MEMORY: 128 MB
             PID: 3621                                  
         COMMAND: "crash"
            TASK: c463c000  
             CPU: 0
           STATE: TASK_RUNNING (ACTIVE)

    crash> help

    *              extend         log            rd             task           
    alias          files          mach           repeat         timer          
    ascii          foreach        mod            runq           tree           
    bpf            fuser          mount          search         union          
    bt             gdb            net            set            vm             
    btop           help           p              sig            vtop           
    dev            ipcs           ps             struct         waitq          
    dis            irq            pte            swap           whatis         
    eval           kmem           ptob           sym            wr             
    exit           list           ptov           sys            q              
    
    crash version: 7.2.9    gdb version: 7.6
    For help on any command above, enter "help <command>".
    For help on input options, enter "help input".
    For help on output options, enter "help output".

    crash> 
 
  When run on a dumpfile, both the kernel namelist and dumpfile must be 
  entered on the command line.  For example, when run on a core dump created
  by the Red Hat netdump or diskdump facilities:

    $ crash vmlinux vmcore
 
    crash 7.2.9
    Copyright (C) 2002-2020  Red Hat, Inc.
    Copyright (C) 2004, 2005, 2006, 2010  IBM Corporation
    Copyright (C) 1999-2006  Hewlett-Packard Co
    Copyright (C) 2005, 2006, 2011, 2012  Fujitsu Limited
    Copyright (C) 2006, 2007  VA Linux Systems Japan K.K.
    Copyright (C) 2005, 2011  NEC Corporation
    Copyright (C) 1999, 2002, 2007  Silicon Graphics, Inc.
    Copyright (C) 1999, 2000, 2001, 2002  Mission Critical Linux, Inc.
    This program is free software, covered by the GNU General Public License,
    and you are welcome to change it and/or distribute copies of it under
    certain conditions.  Enter "help copying" to see the conditions.
    This program has absolutely no warranty.  Enter "help warranty" for details.
     
    GNU gdb 7.6
    Copyright 2013 Free Software Foundation, Inc.
    License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
    This is free software: you are free to change and redistribute it.
    There is NO WARRANTY, to the extent permitted by law.  Type "show copying"
    and "show warranty" for details.
    This GDB was configured as "i686-pc-linux-gnu"...
    
          KERNEL: vmlinux
        DUMPFILE: vmcore
            CPUS: 4
            DATE: Tue Mar  2 13:57:09 2004
          UPTIME: 00:02:40
    LOAD AVERAGE: 2.24, 0.96, 0.37
           TASKS: 70
        NODENAME: pro1.lab.boston.redhat.com
         RELEASE: 2.6.3-2.1.214.11smp
         VERSION: #1 SMP Tue Mar 2 10:58:27 EST 2004
         MACHINE: i686  (2785 Mhz)
          MEMORY: 512 MB
           PANIC: "Oops: 0002 [#1]" (check log for details)
             PID: 0
         COMMAND: "swapper"
            TASK: 22fa200  (1 of 4)  [THREAD_INFO: 2356000]
             CPU: 0
           STATE: TASK_RUNNING (PANIC)
    
    crash> 

  The tool's environment is context-specific.  On a live system, the default
  context is the command itself; on a dump the default context will be the
  task that panicked.  The most commonly-used commands are:

    set     - set a new task context by pid, task address, or cpu.
    bt      - backtrace of the current context, or as specified with arguments.
    p       - print the contents of a kernel variable.
    rd      - read memory, which may be either kernel virtual, user virtual, or
              physical.
    ps      - simple process listing.
    log     - dump the kernel log_buf.
    struct  - print the contents of a structure at a specified address.
    foreach - execute a command on all tasks, or those specified, in the system.
 
  Detailed help concerning the use of each of the commands in the menu above 
  may be displayed by entering "help command", where "command" is one of those 
  listed above.  Rather than getting bogged down in details here, simply
  run the help command on each of the commands above.  Note that many commands
  have multiple options so as to avoid the proliferation of command names.

  Command output may be piped to external commands or redirected to files.
  Enter "help output" for details.

  The command line history mechanism allows for command-line recall and 
  command-line editing.  Input files containing a set of crash commands may 
  be substituted for command-line input.  Enter "help input" for details.

  Note that a .crashrc file (or .<your-command-name>rc if the name has been 
  changed), may contain any number of "set" or "alias" commands -- see the
  help pages on those two commands for details.
 
  Lastly, if a command is entered that is not recognized, it is checked
  against the kernel's list of variables, structure, union or typedef names, 
  and if found, the command is passed to "p", "struct", "union" or "whatis".
  That being the case, as long as a kernel variable/structure/union name is 
  different than any of the current commands.

  (1) A kernel variable can be dumped by simply entering its name:
 
      crash> init_mm
      init_mm = $2 = {
        mmap = 0xc022d540, 
        mmap_avl = 0x0, 
        mmap_cache = 0x0, 
        pgd = 0xc0101000, 
        count = {
          counter = 0x6
        }, 
        map_count = 0x1, 
        mmap_sem = {
          count = {
            counter = 0x1
          }, 
          waking = 0x0, 
          wait = 0x0
        }, 
        context = 0x0, 
        start_code = 0xc0000000, 
        end_code = 0xc022b4c8,
        end_data = c0250388,
        ...
      
  (2) A structure or can be dumped simply by entering its name and address:  

      crash> vm_area_struct c5ba3910
      struct vm_area_struct {
        vm_mm = 0xc3ae3210, 
        vm_start = 0x821b000, 
        vm_end = 0x8692000, 
        vm_next = 0xc5ba3890, 
        vm_page_prot = {
          pgprot = 0x25
        }, 
        vm_flags = 0x77, 
        vm_avl_height = 0x4, 
        vm_avl_left = 0xc0499540, 
        vm_avl_right = 0xc0499f40, 
        vm_next_share = 0xc04993c0, 
        vm_pprev_share = 0xc0499060, 
        vm_ops = 0x0, 
        vm_offset = 0x0, 
        vm_file = 0x0, 
        vm_pte = 0x0
      }


  The crash utility has been designed to facilitate the task of adding new 
  commands.  New commands may be permanently compiled into the crash executable,
  or dynamically added during runtime using shared object files.
 
  To permanently add a new command to the crash executable's menu:

    1. For a command named "xxx", put a reference to cmd_xxx() in defs.h.
   
    2. Add cmd_xxx into the base_command_table[] array in global_data.c. 

    3. Write cmd_xxx(), putting it in one of the appropriate files.  Look at 
       the other commands for guidance on getting symbolic data, reading
       memory, displaying data, etc...

    4. Recompile and run.

  Note that while the initial compile of crash, which configures and compiles
  the gdb module, takes several minutes, subsequent re-compiles to do such
  things as add new commands or fix bugs just takes a few seconds.

  Alternatively, you can create shared object library files consisting of
  crash command extensions, that can be dynamically linked into the crash
  executable during runtime or during initialization.  This will allow
  the same shared object to be used with subsequent crash releases without
  having to re-merge the command's code into each new set of crash sources.
  The dynamically linked-in commands will automatically show up in the crash
  help menu.  For details, enter "help extend" during runtime, or enter
  "crash -h extend" from the shell command line.