dump.h
上传用户:jlfgdled
上传日期:2013-04-10
资源大小:33168k
文件大小:3k
源码类别:

Linux/Unix编程

开发平台:

Unix_Linux

  1. /*
  2.  * Kernel header file for Linux crash dumps.
  3.  *
  4.  * Created by: Todd Inglett <tinglett@vnet.ibm.com>
  5.  *
  6.  * Copyright 2002 International Business Machines
  7.  *
  8.  * This code is released under version 2 of the GNU GPL.
  9.  */
  10. /* This header file holds the architecture specific crash dump header */
  11. #ifndef _ASM_DUMP_H
  12. #define _ASM_DUMP_H
  13. /* necessary header files */
  14. #include <asm/ptrace.h>                          /* for pt_regs             */
  15. #include <linux/threads.h>
  16. /* definitions */
  17. #define DUMP_ASM_MAGIC_NUMBER     0xdeaddeadULL  /* magic number            */
  18. #define DUMP_ASM_VERSION_NUMBER   0x1            /* version number          */
  19. /*
  20.  * Structure: dump_header_asm_t
  21.  *  Function: This is the header for architecture-specific stuff.  It
  22.  *            follows right after the dump header.
  23.  */
  24. typedef struct _dump_header_asm_s {
  25.         /* the dump magic number -- unique to verify dump is valid */
  26.         uint64_t             dha_magic_number;
  27.         /* the version number of this dump */
  28.         uint32_t             dha_version;
  29.         /* the size of this header (in case we can't read it) */
  30.         uint32_t             dha_header_size;
  31. /* the dump registers */
  32. struct pt_regs       dha_regs;
  33. /* smp specific */
  34. uint32_t      dha_smp_num_cpus;
  35. int      dha_dumping_cpu;
  36. struct pt_regs      dha_smp_regs[NR_CPUS];
  37. void *      dha_smp_current_task[NR_CPUS];
  38. void *      dha_stack[NR_CPUS];
  39. } dump_header_asm_t;
  40. #ifdef __KERNEL__
  41. static inline void get_current_regs(struct pt_regs *regs)
  42. {
  43. __asm__ __volatile__ (
  44. "std 0,0(%0)n"
  45. "std 1,8(%0)n"
  46. "std 2,16(%0)n"
  47. "std 3,24(%0)n"
  48. "std 4,32(%0)n"
  49. "std 5,40(%0)n"
  50. "std 6,48(%0)n"
  51. "std 7,56(%0)n"
  52. "std 8,64(%0)n"
  53. "std 9,72(%0)n"
  54. "std 10,80(%0)n"
  55. "std 11,88(%0)n"
  56. "std 12,96(%0)n"
  57. "std 13,104(%0)n"
  58. "std 14,112(%0)n"
  59. "std 15,120(%0)n"
  60. "std 16,128(%0)n"
  61. "std 17,136(%0)n"
  62. "std 18,144(%0)n"
  63. "std 19,152(%0)n"
  64. "std 20,160(%0)n"
  65. "std 21,168(%0)n"
  66. "std 22,176(%0)n"
  67. "std 23,184(%0)n"
  68. "std 24,192(%0)n"
  69. "std 25,200(%0)n"
  70. "std 26,208(%0)n"
  71. "std 27,216(%0)n"
  72. "std 28,224(%0)n"
  73. "std 29,232(%0)n"
  74. "std 30,240(%0)n"
  75. "std 31,248(%0)n"
  76. "mfmsr 0n"
  77. "std 0, 264(%0)n"
  78. "mfctr 0n"
  79. "std 0, 280(%0)n"
  80. "mflr 0n"
  81. "std 0, 288(%0)n"
  82. "bl 1fn"
  83. "1:  mflr 5n"
  84. "std 5, 256(%0)n"
  85. "mtlr 0n"
  86. "mfxer 0n"
  87. "std 0, 296(%0)n"
  88.       : : "b" (&regs));
  89. }
  90. extern volatile int dump_in_progress;
  91. extern dump_header_asm_t dump_header_asm;
  92. #ifdef CONFIG_SMP
  93. extern void dump_send_ipi(int (*dump_ipi_callback)(struct pt_regs *));
  94. #else
  95. #define dump_send_ipi()
  96. #endif
  97. #endif /* __KERNEL__ */
  98. #endif /* _ASM_DUMP_H */