Blame lkcd_dump_v8.h

Packit Service 501009
/* lkcd_dump_v8.h - core analysis suite
Packit Service 501009
 *
Packit Service 501009
 * Forward ported from lkcd_dump_v5.h by Corey Mineyard <minyard@acm.org>
Packit Service 501009
 *
Packit Service 501009
 * Copyright (C) 2001, 2002 Mission Critical Linux, Inc.
Packit Service 501009
 * Copyright (C) 2002, 2003, 2004, 2005 David Anderson
Packit Service 501009
 * Copyright (C) 2002, 2003, 2004, 2005 Red Hat, Inc. All rights reserved.
Packit Service 501009
 *
Packit Service 501009
 * This program is free software; you can redistribute it and/or modify
Packit Service 501009
 * it under the terms of the GNU General Public License as published by
Packit Service 501009
 * the Free Software Foundation; either version 2 of the License, or
Packit Service 501009
 * (at your option) any later version.
Packit Service 501009
 *
Packit Service 501009
 * This program is distributed in the hope that it will be useful,
Packit Service 501009
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
Packit Service 501009
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
Packit Service 501009
 * GNU General Public License for more details.
Packit Service 501009
 */
Packit Service 501009
Packit Service 501009
Packit Service 501009
/*
Packit Service 501009
 * Kernel header file for Linux crash dumps.
Packit Service 501009
 *
Packit Service 501009
 * Created by: Matt Robinson (yakker@sgi.com)
Packit Service 501009
 * Copyright 1999 Silicon Graphics, Inc. All rights reserved.
Packit Service 501009
 *
Packit Service 501009
 * vmdump.h to dump.h by: Matt D. Robinson (yakker@sourceforge.net)
Packit Service 501009
 * Copyright 2001 Matt D. Robinson.  All rights reserved.
Packit Service 501009
 *
Packit Service 501009
 * Most of this is the same old stuff from vmdump.h, except now we're
Packit Service 501009
 * actually a stand-alone driver plugged into the block layer interface,
Packit Service 501009
 * with the exception that we now allow for compression modes externally
Packit Service 501009
 * loaded (e.g., someone can come up with their own).
Packit Service 501009
 */
Packit Service 501009
Packit Service 501009
/* This header file includes all structure definitions for crash dumps. */
Packit Service 501009
#ifndef _DUMP_H
Packit Service 501009
#define _DUMP_H
Packit Service 501009
Packit Service 501009
//#include <linux/list.h>
Packit Service 501009
Packit Service 501009
/* define TRUE and FALSE for use in our dump modules */
Packit Service 501009
#ifndef FALSE
Packit Service 501009
#define FALSE 0
Packit Service 501009
#endif
Packit Service 501009
Packit Service 501009
#ifndef TRUE
Packit Service 501009
#define TRUE 1
Packit Service 501009
#endif
Packit Service 501009
Packit Service 501009
#ifndef MCLX                   
Packit Service 501009
Packit Service 501009
/* 
Packit Service 501009
 *  MCLX NOTE: the architecture-specific headers are being ignored until
Packit Service 501009
 *  deemed necessary; crash has never used them functionally, and only
Packit Service 501009
 *  referencing them in the dump_sgi_environment() helper routines.
Packit Service 501009
 */
Packit Service 501009
Packit Service 501009
/* necessary header files */
Packit Service 501009
#include <asm/dump.h>                   /* for architecture-specific header */
Packit Service 501009
#endif
Packit Service 501009
Packit Service 501009
#define UTSNAME_ENTRY_SZ 65
Packit Service 501009
Packit Service 501009
/* necessary header definitions in all cases */
Packit Service 501009
#define DUMP_KIOBUF_NUMBER  0xdeadbeef  /* special number for kiobuf maps   */
Packit Service 501009
Packit Service 501009
/* size of a dump header page */
Packit Service 501009
#define DUMP_PAGE_SZ        64 * 1024  /* size of dump page buffer          */
Packit Service 501009
Packit Service 501009
/* header definitions for s390 dump */
Packit Service 501009
#define DUMP_MAGIC_S390     0xa8190173618f23fdULL  /* s390 magic number     */
Packit Service 501009
#define S390_DUMP_HEADER_SIZE     4096
Packit Service 501009
Packit Service 501009
/* standard header definitions */
Packit Service 501009
#define DUMP_MAGIC_NUMBER   0xa8190173618f23edULL  /* dump magic number     */
Packit Service 501009
#define DUMP_MAGIC_LIVE     0xa8190173618f23cdULL  /* live magic number     */
Packit Service 501009
#define DUMP_VERSION_NUMBER   0x5       /* dump version number              */
Packit Service 501009
#define DUMP_PANIC_LEN        0x100     /* dump panic string length         */
Packit Service 501009
Packit Service 501009
/* dump levels - type specific stuff added later -- add as necessary */
Packit Service 501009
#define DUMP_LEVEL_NONE        0x0      /* no dumping at all -- just bail   */
Packit Service 501009
#define DUMP_LEVEL_HEADER      0x1      /* kernel dump header only          */
Packit Service 501009
#define DUMP_LEVEL_KERN        0x2      /* dump header and kernel pages     */
Packit Service 501009
#define DUMP_LEVEL_USED        0x4      /* dump header, kernel/user pages   */
Packit Service 501009
#define DUMP_LEVEL_ALL         0x8      /* dump header, all memory pages    */
Packit Service 501009
Packit Service 501009
/* dump compression options -- add as necessary */
Packit Service 501009
#define DUMP_COMPRESS_NONE     0x0      /* don't compress this dump         */
Packit Service 501009
#define DUMP_COMPRESS_RLE      0x1      /* use RLE compression              */
Packit Service 501009
#define DUMP_COMPRESS_GZIP     0x2      /* use GZIP compression             */
Packit Service 501009
Packit Service 501009
/* dump flags - any dump-type specific flags -- add as necessary */
Packit Service 501009
#define DUMP_FLAGS_NONE        0x0      /* no flags are set for this dump   */
Packit Service 501009
#define DUMP_FLAGS_NONDISRUPT  0x1      /* try to keep running after dump   */
Packit Service 501009
Packit Service 501009
/* dump header flags -- add as necessary */
Packit Service 501009
#define DUMP_DH_FLAGS_NONE     0x0      /* no flags set (error condition!)  */
Packit Service 501009
#define DUMP_DH_RAW            0x1      /* raw page (no compression)        */
Packit Service 501009
#define DUMP_DH_COMPRESSED     0x2      /* page is compressed               */
Packit Service 501009
#define DUMP_DH_END            0x4      /* end marker on a full dump        */
Packit Service 501009
Packit Service 501009
/* names for various dump tunables (they are now all read-only) */
Packit Service 501009
#define DUMP_ROOT_NAME         "sys/dump"
Packit Service 501009
#define DUMP_DEVICE_NAME       "dump_device"
Packit Service 501009
#define DUMP_COMPRESS_NAME     "dump_compress"
Packit Service 501009
#define DUMP_LEVEL_NAME        "dump_level"
Packit Service 501009
#define DUMP_FLAGS_NAME        "dump_flags"
Packit Service 501009
Packit Service 501009
/* page size for gzip compression -- buffered beyond PAGE_SIZE slightly */
Packit Service 501009
#define DUMP_DPC_PAGE_SIZE     (PAGE_SIZE + 512)
Packit Service 501009
Packit Service 501009
/* dump ioctl() control options */
Packit Service 501009
#define DIOSDUMPDEV		1       /* set the dump device              */
Packit Service 501009
#define DIOGDUMPDEV		2       /* get the dump device              */
Packit Service 501009
#define DIOSDUMPLEVEL		3       /* set the dump level               */
Packit Service 501009
#define DIOGDUMPLEVEL		4       /* get the dump level               */
Packit Service 501009
#define DIOSDUMPFLAGS		5       /* set the dump flag parameters     */
Packit Service 501009
#define DIOGDUMPFLAGS		6       /* get the dump flag parameters     */
Packit Service 501009
#define DIOSDUMPCOMPRESS	7       /* set the dump compress level      */
Packit Service 501009
#define DIOGDUMPCOMPRESS	8       /* get the dump compress level      */
Packit Service 501009
Packit Service 501009
/* the major number used for the dumping device */
Packit Service 501009
#ifndef DUMP_MAJOR
Packit Service 501009
#define DUMP_MAJOR              227
Packit Service 501009
#endif
Packit Service 501009
Packit Service 501009
/*
Packit Service 501009
 * Structure: dump_header_t
Packit Service 501009
 *  Function: This is the header dumped at the top of every valid crash
Packit Service 501009
 *            dump.  
Packit Service 501009
 *            easy reassembly of each crash dump page.  The address bits
Packit Service 501009
 *            are split to make things easier for 64-bit/32-bit system
Packit Service 501009
 *            conversions.
Packit Service 501009
 */
Packit Service 501009
typedef struct _dump_header_s {
Packit Service 501009
	/* the dump magic number -- unique to verify dump is valid */
Packit Service 501009
	uint64_t             dh_magic_number;
Packit Service 501009
Packit Service 501009
	/* the version number of this dump */
Packit Service 501009
	uint32_t             dh_version;
Packit Service 501009
Packit Service 501009
	/* the size of this header (in case we can't read it) */
Packit Service 501009
	uint32_t             dh_header_size;
Packit Service 501009
Packit Service 501009
	/* the level of this dump (just a header?) */
Packit Service 501009
	uint32_t             dh_dump_level;
Packit Service 501009
Packit Service 501009
	/* the size of a Linux memory page (4K, 8K, 16K, etc.) */
Packit Service 501009
	uint32_t             dh_page_size;
Packit Service 501009
Packit Service 501009
	/* the size of all physical memory */
Packit Service 501009
	uint64_t             dh_memory_size;
Packit Service 501009
Packit Service 501009
	/* the start of physical memory */
Packit Service 501009
	uint64_t             dh_memory_start;
Packit Service 501009
Packit Service 501009
	/* the end of physical memory */
Packit Service 501009
	uint64_t             dh_memory_end;
Packit Service 501009
Packit Service 501009
	/* the number of pages in this dump specifically */
Packit Service 501009
	uint32_t             dh_num_pages;
Packit Service 501009
Packit Service 501009
	/* the panic string, if available */
Packit Service 501009
	char                 dh_panic_string[DUMP_PANIC_LEN];
Packit Service 501009
Packit Service 501009
	/* timeval depends on architecture, two long values */
Packit Service 501009
	struct {
Packit Service 501009
		uint64_t tv_sec;
Packit Service 501009
		uint64_t tv_usec;
Packit Service 501009
	} dh_time; /* the time of the system crash */
Packit Service 501009
Packit Service 501009
	/* the NEW utsname (uname) information -- in character form */
Packit Service 501009
	/* we do this so we don't have to include utsname.h         */
Packit Service 501009
	/* plus it helps us be more architecture independent        */
Packit Service 501009
	/* now maybe one day soon they'll make the [65] a #define!  */
Packit Service 501009
	char                 dh_utsname_sysname[65];
Packit Service 501009
	char                 dh_utsname_nodename[65];
Packit Service 501009
	char                 dh_utsname_release[65];
Packit Service 501009
	char                 dh_utsname_version[65];
Packit Service 501009
	char                 dh_utsname_machine[65];
Packit Service 501009
	char                 dh_utsname_domainname[65];
Packit Service 501009
Packit Service 501009
	/* the address of current task (OLD = task_struct *, NEW = void *) */
Packit Service 501009
	uint64_t             dh_current_task;
Packit Service 501009
Packit Service 501009
	/* what type of compression we're using in this dump (if any) */
Packit Service 501009
	uint32_t             dh_dump_compress;
Packit Service 501009
Packit Service 501009
	/* any additional flags */
Packit Service 501009
	uint32_t             dh_dump_flags;
Packit Service 501009
Packit Service 501009
	/* any additional flags */
Packit Service 501009
	uint32_t             dh_dump_device;
Packit Service 501009
Packit Service 501009
	/* size of dump buffer -- only in v9 dumps so we don't declare it here */
Packit Service 501009
	/* uint64_t          dh_dump_buffer_size; */
Packit Service 501009
Packit Service 501009
} __attribute__((packed)) dump_header_t;
Packit Service 501009
Packit Service 501009
/*
Packit Service 501009
 * Structure: dump_page_t
Packit Service 501009
 *  Function: To act as the header associated to each physical page of
Packit Service 501009
 *            memory saved in the system crash dump.  This allows for
Packit Service 501009
 *            easy reassembly of each crash dump page.  The address bits
Packit Service 501009
 *            are split to make things easier for 64-bit/32-bit system
Packit Service 501009
 *            conversions.
Packit Service 501009
 */
Packit Service 501009
typedef struct _dump_page_s {
Packit Service 501009
    
Packit Service 501009
	/* the address of this dump page */
Packit Service 501009
	uint64_t             dp_address;
Packit Service 501009
Packit Service 501009
	/* the size of this dump page */
Packit Service 501009
	uint32_t             dp_size;
Packit Service 501009
Packit Service 501009
	/* flags (currently DUMP_COMPRESSED, DUMP_RAW or DUMP_END) */
Packit Service 501009
	uint32_t             dp_flags;
Packit Service 501009
} __attribute__((packed)) dump_page_t;
Packit Service 501009
Packit Service 501009
/*
Packit Service 501009
 * This structure contains information needed for the lkcdutils
Packit Service 501009
 * package (particularly lcrash) to determine what information is
Packit Service 501009
 * associated to this kernel, specifically.
Packit Service 501009
 */
Packit Service 501009
typedef struct lkcdinfo_s {
Packit Service 501009
	int             arch;
Packit Service 501009
	int             ptrsz;
Packit Service 501009
	int             byte_order;
Packit Service 501009
	int             linux_release;
Packit Service 501009
	int             page_shift;
Packit Service 501009
	int             page_size;
Packit Service 501009
	uint64_t        page_mask;
Packit Service 501009
	uint64_t        page_offset;
Packit Service 501009
	int             stack_offset;
Packit Service 501009
} lkcdinfo_t;
Packit Service 501009
Packit Service 501009
/*
Packit Service 501009
 *
Packit Service 501009
 * machine specific dump headers
Packit Service 501009
 *
Packit Service 501009
 */
Packit Service 501009
Packit Service 501009
/*
Packit Service 501009
 * IA64 ---------------------------------------------------------
Packit Service 501009
 */
Packit Service 501009
Packit Service 501009
#if defined(IA64)
Packit Service 501009
Packit Service 501009
#define DUMP_ASM_MAGIC_NUMBER     0xdeaddeadULL  /* magic number */
Packit Service 501009
#define DUMP_ASM_VERSION_NUMBER   0x5            /* version number          */
Packit Service 501009
Packit Service 501009
Packit Service 501009
struct pt_regs {
Packit Service 501009
	/* The following registers are saved by SAVE_MIN: */
Packit Service 501009
	unsigned long b6;		/* scratch */
Packit Service 501009
	unsigned long b7;		/* scratch */
Packit Service 501009
Packit Service 501009
	unsigned long ar_csd;           /* used by cmp8xchg16 (scratch) */
Packit Service 501009
	unsigned long ar_ssd;           /* reserved for future use (scratch) */
Packit Service 501009
Packit Service 501009
	unsigned long r8;		/* scratch (return value register 0) */
Packit Service 501009
	unsigned long r9;		/* scratch (return value register 1) */
Packit Service 501009
	unsigned long r10;		/* scratch (return value register 2) */
Packit Service 501009
	unsigned long r11;		/* scratch (return value register 3) */
Packit Service 501009
Packit Service 501009
	unsigned long cr_ipsr;		/* interrupted task's psr */
Packit Service 501009
	unsigned long cr_iip;		/* interrupted task's instruction pointer */
Packit Service 501009
	unsigned long cr_ifs;		/* interrupted task's function state */
Packit Service 501009
Packit Service 501009
	unsigned long ar_unat;		/* interrupted task's NaT register (preserved) */
Packit Service 501009
	unsigned long ar_pfs;		/* prev function state  */
Packit Service 501009
	unsigned long ar_rsc;		/* RSE configuration */
Packit Service 501009
	/* The following two are valid only if cr_ipsr.cpl > 0: */
Packit Service 501009
	unsigned long ar_rnat;		/* RSE NaT */
Packit Service 501009
	unsigned long ar_bspstore;	/* RSE bspstore */
Packit Service 501009
Packit Service 501009
	unsigned long pr;		/* 64 predicate registers (1 bit each) */
Packit Service 501009
	unsigned long b0;		/* return pointer (bp) */
Packit Service 501009
	unsigned long loadrs;		/* size of dirty partition << 16 */
Packit Service 501009
Packit Service 501009
	unsigned long r1;		/* the gp pointer */
Packit Service 501009
	unsigned long r12;		/* interrupted task's memory stack pointer */
Packit Service 501009
	unsigned long r13;		/* thread pointer */
Packit Service 501009
Packit Service 501009
	unsigned long ar_fpsr;		/* floating point status (preserved) */
Packit Service 501009
	unsigned long r15;		/* scratch */
Packit Service 501009
Packit Service 501009
	/* The remaining registers are NOT saved for system calls.  */
Packit Service 501009
Packit Service 501009
	unsigned long r14;		/* scratch */
Packit Service 501009
	unsigned long r2;		/* scratch */
Packit Service 501009
	unsigned long r3;		/* scratch */
Packit Service 501009
Packit Service 501009
	/* The following registers are saved by SAVE_REST: */
Packit Service 501009
	unsigned long r16;		/* scratch */
Packit Service 501009
	unsigned long r17;		/* scratch */
Packit Service 501009
	unsigned long r18;		/* scratch */
Packit Service 501009
	unsigned long r19;		/* scratch */
Packit Service 501009
	unsigned long r20;		/* scratch */
Packit Service 501009
	unsigned long r21;		/* scratch */
Packit Service 501009
	unsigned long r22;		/* scratch */
Packit Service 501009
	unsigned long r23;		/* scratch */
Packit Service 501009
	unsigned long r24;		/* scratch */
Packit Service 501009
	unsigned long r25;		/* scratch */
Packit Service 501009
	unsigned long r26;		/* scratch */
Packit Service 501009
	unsigned long r27;		/* scratch */
Packit Service 501009
	unsigned long r28;		/* scratch */
Packit Service 501009
	unsigned long r29;		/* scratch */
Packit Service 501009
	unsigned long r30;		/* scratch */
Packit Service 501009
	unsigned long r31;		/* scratch */
Packit Service 501009
Packit Service 501009
	unsigned long ar_ccv;		/* compare/exchange value (scratch) */
Packit Service 501009
Packit Service 501009
	/*
Packit Service 501009
	 * Floating point registers that the kernel considers scratch:
Packit Service 501009
	 */
Packit Service 501009
	struct ia64_fpreg f6;		/* scratch */
Packit Service 501009
	struct ia64_fpreg f7;		/* scratch */
Packit Service 501009
	struct ia64_fpreg f8;		/* scratch */
Packit Service 501009
	struct ia64_fpreg f9;		/* scratch */
Packit Service 501009
	struct ia64_fpreg f10;		/* scratch */
Packit Service 501009
	struct ia64_fpreg f11;		/* scratch */
Packit Service 501009
};
Packit Service 501009
Packit Service 501009
Packit Service 501009
Packit Service 501009
/*
Packit Service 501009
 * Structure: dump_header_asm_t
Packit Service 501009
 *  Function: This is the header for architecture-specific stuff.  It
Packit Service 501009
 *            follows right after the dump header.
Packit Service 501009
 *
Packit Service 501009
 */
Packit Service 501009
typedef struct _dump_header_asm_s {
Packit Service 501009
Packit Service 501009
        /* the dump magic number -- unique to verify dump is valid */
Packit Service 501009
        uint64_t             dha_magic_number;
Packit Service 501009
Packit Service 501009
        /* the version number of this dump */
Packit Service 501009
        uint32_t             dha_version;
Packit Service 501009
Packit Service 501009
        /* the size of this header (in case we can't read it) */
Packit Service 501009
        uint32_t             dha_header_size;
Packit Service 501009
Packit Service 501009
        /* pointer to pt_regs, (OLD: (struct pt_regs *, NEW: (uint64_t)) */
Packit Service 501009
	uint64_t             dha_pt_regs;
Packit Service 501009
Packit Service 501009
	/* the dump registers */
Packit Service 501009
	struct pt_regs       dha_regs;
Packit Service 501009
Packit Service 501009
        /* the rnat register saved after flushrs */
Packit Service 501009
        uint64_t             dha_rnat;
Packit Service 501009
Packit Service 501009
	/* the pfs register saved after flushrs */
Packit Service 501009
	uint64_t             dha_pfs;
Packit Service 501009
Packit Service 501009
	/* the bspstore register saved after flushrs */
Packit Service 501009
	uint64_t             dha_bspstore;
Packit Service 501009
Packit Service 501009
	/* smp specific */
Packit Service 501009
	uint32_t	     dha_smp_num_cpus;
Packit Service 501009
	uint32_t	     dha_dumping_cpu;
Packit Service 501009
	struct pt_regs	     dha_smp_regs[NR_CPUS];
Packit Service 501009
	uint64_t	     dha_smp_current_task[NR_CPUS];
Packit Service 501009
	uint64_t	     dha_stack[NR_CPUS];
Packit Service 501009
	uint64_t	     dha_stack_ptr[NR_CPUS];
Packit Service 501009
Packit Service 501009
	/* load address of kernel */
Packit Service 501009
        uint64_t             dha_kernel_addr;
Packit Service 501009
Packit Service 501009
} __attribute__((packed)) dump_header_asm_t;
Packit Service 501009
Packit Service 501009
struct dump_CPU_info_ia64 {
Packit Service 501009
	struct pt_regs	     dha_smp_regs;
Packit Service 501009
	uint64_t	     dha_smp_current_task;
Packit Service 501009
	uint64_t	     dha_stack;
Packit Service 501009
	uint64_t	     dha_stack_ptr;
Packit Service 501009
} __attribute__((packed)) dump_CPU_info_ia64_t;
Packit Service 501009
Packit Service 501009
typedef struct dump_CPU_info_ia64 dump_CPU_info_t;
Packit Service 501009
Packit Service 501009
/*
Packit Service 501009
 * i386 ---------------------------------------------------------
Packit Service 501009
 */
Packit Service 501009
Packit Service 501009
#elif defined(X86)
Packit Service 501009
Packit Service 501009
#define DUMP_ASM_MAGIC_NUMBER	0xdeaddeadULL	/* magic number            */
Packit Service 501009
#define DUMP_ASM_VERSION_NUMBER	0x5	/* version number          */
Packit Service 501009
Packit Service 501009
Packit Service 501009
struct pt_regs {
Packit Service 501009
	long ebx;
Packit Service 501009
	long ecx;
Packit Service 501009
	long edx;
Packit Service 501009
	long esi;
Packit Service 501009
	long edi;
Packit Service 501009
	long ebp;
Packit Service 501009
	long eax;
Packit Service 501009
	int  xds;
Packit Service 501009
	int  xes;
Packit Service 501009
	long orig_eax;
Packit Service 501009
	long eip;
Packit Service 501009
	int  xcs;
Packit Service 501009
	long eflags;
Packit Service 501009
	long esp;
Packit Service 501009
	int  xss;
Packit Service 501009
};
Packit Service 501009
Packit Service 501009
/*
Packit Service 501009
 * Structure: __dump_header_asm
Packit Service 501009
 *  Function: This is the header for architecture-specific stuff.  It
Packit Service 501009
 *            follows right after the dump header.
Packit Service 501009
 */
Packit Service 501009
typedef struct _dump_header_asm_s {
Packit Service 501009
	/* the dump magic number -- unique to verify dump is valid */
Packit Service 501009
	uint64_t	dha_magic_number;
Packit Service 501009
Packit Service 501009
	/* the version number of this dump */
Packit Service 501009
	uint32_t	dha_version;
Packit Service 501009
Packit Service 501009
	/* the size of this header (in case we can't read it) */
Packit Service 501009
	uint32_t	dha_header_size;
Packit Service 501009
Packit Service 501009
	/* the esp for i386 systems */
Packit Service 501009
	uint32_t	dha_esp;
Packit Service 501009
Packit Service 501009
	/* the eip for i386 systems */
Packit Service 501009
	uint32_t	dha_eip;
Packit Service 501009
Packit Service 501009
	/* the dump registers */
Packit Service 501009
	struct pt_regs	dha_regs;
Packit Service 501009
Packit Service 501009
	/* smp specific */
Packit Service 501009
	uint32_t	dha_smp_num_cpus;
Packit Service 501009
	uint32_t	dha_dumping_cpu;
Packit Service 501009
	struct pt_regs	dha_smp_regs[NR_CPUS];
Packit Service 501009
	uint32_t	dha_smp_current_task[NR_CPUS];
Packit Service 501009
	uint32_t	dha_stack[NR_CPUS];
Packit Service 501009
	uint32_t	dha_stack_ptr[NR_CPUS];
Packit Service 501009
} __attribute__((packed)) dump_header_asm_t;
Packit Service 501009
Packit Service 501009
/*
Packit Service 501009
 * CPU specific part of dump_header_asm_t
Packit Service 501009
 */
Packit Service 501009
typedef struct dump_CPU_info_s {
Packit Service 501009
	struct pt_regs	dha_smp_regs;
Packit Service 501009
	uint32_t	dha_smp_current_task;
Packit Service 501009
	uint32_t	dha_stack;
Packit Service 501009
	uint32_t	dha_stack_ptr;
Packit Service 501009
} __attribute__ ((packed)) dump_CPU_info_t;
Packit Service 501009
Packit Service 501009
Packit Service 501009
/*
Packit Service 501009
 * x86-64 ---------------------------------------------------------
Packit Service 501009
 */
Packit Service 501009
Packit Service 501009
#elif defined(X86_64)
Packit Service 501009
Packit Service 501009
/* definitions */
Packit Service 501009
#define DUMP_ASM_MAGIC_NUMBER     0xdeaddeadULL  /* magic number            */
Packit Service 501009
#define DUMP_ASM_VERSION_NUMBER   0x2            /* version number          */
Packit Service 501009
Packit Service 501009
Packit Service 501009
struct pt_regs {
Packit Service 501009
	unsigned long r15;
Packit Service 501009
	unsigned long r14;
Packit Service 501009
	unsigned long r13;
Packit Service 501009
	unsigned long r12;
Packit Service 501009
	unsigned long rbp;
Packit Service 501009
	unsigned long rbx;
Packit Service 501009
/* arguments: non interrupts/non tracing syscalls only save upto here*/
Packit Service 501009
 	unsigned long r11;
Packit Service 501009
	unsigned long r10;
Packit Service 501009
	unsigned long r9;
Packit Service 501009
	unsigned long r8;
Packit Service 501009
	unsigned long rax;
Packit Service 501009
	unsigned long rcx;
Packit Service 501009
	unsigned long rdx;
Packit Service 501009
	unsigned long rsi;
Packit Service 501009
	unsigned long rdi;
Packit Service 501009
	unsigned long orig_rax;
Packit Service 501009
/* end of arguments */
Packit Service 501009
/* cpu exception frame or undefined */
Packit Service 501009
	unsigned long rip;
Packit Service 501009
	unsigned long cs;
Packit Service 501009
	unsigned long eflags;
Packit Service 501009
	unsigned long rsp;
Packit Service 501009
	unsigned long ss;
Packit Service 501009
/* top of stack page */
Packit Service 501009
};
Packit Service 501009
Packit Service 501009
/*
Packit Service 501009
 * Structure: dump_header_asm_t
Packit Service 501009
 *  Function: This is the header for architecture-specific stuff.  It
Packit Service 501009
 *            follows right after the dump header.
Packit Service 501009
 */
Packit Service 501009
typedef struct _dump_header_asm_s {
Packit Service 501009
Packit Service 501009
        /* the dump magic number -- unique to verify dump is valid */
Packit Service 501009
        uint64_t             dha_magic_number;
Packit Service 501009
Packit Service 501009
        /* the version number of this dump */
Packit Service 501009
        uint32_t             dha_version;
Packit Service 501009
Packit Service 501009
        /* the size of this header (in case we can't read it) */
Packit Service 501009
        uint32_t             dha_header_size;
Packit Service 501009
Packit Service 501009
	/* the dump registers */
Packit Service 501009
	struct pt_regs       dha_regs;
Packit Service 501009
Packit Service 501009
	/* smp specific */
Packit Service 501009
	uint32_t	     dha_smp_num_cpus;
Packit Service 501009
	int		     dha_dumping_cpu;
Packit Service 501009
	struct pt_regs	     dha_smp_regs[NR_CPUS];
Packit Service 501009
	uint64_t	     dha_smp_current_task[NR_CPUS];
Packit Service 501009
	uint64_t	     dha_stack[NR_CPUS];
Packit Service 501009
	uint64_t	     dha_stack_ptr[NR_CPUS];
Packit Service 501009
} __attribute__((packed)) dump_header_asm_t;
Packit Service 501009
Packit Service 501009
Packit Service 501009
/*
Packit Service 501009
 * CPU specific part of dump_header_asm_t
Packit Service 501009
 */
Packit Service 501009
typedef struct dump_CPU_info_s {
Packit Service 501009
	struct pt_regs	     dha_smp_regs;
Packit Service 501009
	uint64_t	     dha_smp_current_task;
Packit Service 501009
	uint64_t	     dha_stack;
Packit Service 501009
	uint64_t	     dha_stack_ptr;
Packit Service 501009
} __attribute__ ((packed)) dump_CPU_info_t;
Packit Service 501009
Packit Service 501009
#else
Packit Service 501009
Packit Service 501009
#define HAVE_NO_DUMP_HEADER_ASM 1
Packit Service 501009
Packit Service 501009
#endif
Packit Service 501009
Packit Service 501009
#endif /* _DUMP_H */