Blame view

include/linux/elfcore.h 4.93 KB
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1
2
3
4
5
6
  #ifndef _LINUX_ELFCORE_H
  #define _LINUX_ELFCORE_H
  
  #include <linux/types.h>
  #include <linux/signal.h>
  #include <linux/time.h>
c1445db9f   Kirill A. Shutemov   Unexport asm/user...
7
  #ifdef __KERNEL__
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
8
  #include <linux/user.h>
c1445db9f   Kirill A. Shutemov   Unexport asm/user...
9
  #endif
2c5d81a58   Fernando Luis Vazquez Cao   [PATCH] Compilati...
10
  #include <linux/ptrace.h>
1fcccbac8   Daisuke HATAYAMA   elf coredump: rep...
11
12
  #include <linux/elf.h>
  #include <linux/fs.h>
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
13
14
15
16
17
18
19
  
  struct elf_siginfo
  {
  	int	si_signo;			/* signal number */
  	int	si_code;			/* extra code */
  	int	si_errno;			/* errno */
  };
6cc931b9b   Kirill A. Shutemov   Unexport asm/elf.h
20
  #ifdef __KERNEL__
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
21
  #include <asm/elf.h>
6cc931b9b   Kirill A. Shutemov   Unexport asm/elf.h
22
  #endif
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
  
  #ifndef __KERNEL__
  typedef elf_greg_t greg_t;
  typedef elf_gregset_t gregset_t;
  typedef elf_fpregset_t fpregset_t;
  typedef elf_fpxregset_t fpxregset_t;
  #define NGREG ELF_NGREG
  #endif
  
  /*
   * Definitions to generate Intel SVR4-like core files.
   * These mostly have the same names as the SVR4 types with "elf_"
   * tacked on the front to prevent clashes with linux definitions,
   * and the typedef forms have been avoided.  This is mostly like
   * the SVR4 structure, but more Linuxy, with things that Linux does
   * not support and which gdb doesn't really use excluded.
   * Fields present but not used are marked with "XXX".
   */
  struct elf_prstatus
  {
  #if 0
  	long	pr_flags;	/* XXX Process flags */
  	short	pr_why;		/* XXX Reason for process halt */
  	short	pr_what;	/* XXX More detailed reason */
  #endif
  	struct elf_siginfo pr_info;	/* Info associated with signal */
  	short	pr_cursig;		/* Current signal */
  	unsigned long pr_sigpend;	/* Set of pending signals */
  	unsigned long pr_sighold;	/* Set of held signals */
  #if 0
  	struct sigaltstack pr_altstack;	/* Alternate stack info */
  	struct sigaction pr_action;	/* Signal action for current sig */
  #endif
  	pid_t	pr_pid;
  	pid_t	pr_ppid;
  	pid_t	pr_pgrp;
  	pid_t	pr_sid;
  	struct timeval pr_utime;	/* User time */
  	struct timeval pr_stime;	/* System time */
  	struct timeval pr_cutime;	/* Cumulative user time */
  	struct timeval pr_cstime;	/* Cumulative system time */
  #if 0
  	long	pr_instr;		/* Current instruction */
  #endif
  	elf_gregset_t pr_reg;	/* GP registers */
6d8c4e3b0   David Howells   [PATCH] FDPIC: Ad...
68
69
70
71
72
73
74
75
76
77
  #ifdef CONFIG_BINFMT_ELF_FDPIC
  	/* When using FDPIC, the loadmap addresses need to be communicated
  	 * to GDB in order for GDB to do the necessary relocations.  The
  	 * fields (below) used to communicate this information are placed
  	 * immediately after ``pr_reg'', so that the loadmap addresses may
  	 * be viewed as part of the register set if so desired.
  	 */
  	unsigned long pr_exec_fdpic_loadmap;
  	unsigned long pr_interp_fdpic_loadmap;
  #endif
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
  	int pr_fpvalid;		/* True if math co-processor being used.  */
  };
  
  #define ELF_PRARGSZ	(80)	/* Number of chars for args */
  
  struct elf_prpsinfo
  {
  	char	pr_state;	/* numeric process state */
  	char	pr_sname;	/* char for pr_state */
  	char	pr_zomb;	/* zombie */
  	char	pr_nice;	/* nice val */
  	unsigned long pr_flag;	/* flags */
  	__kernel_uid_t	pr_uid;
  	__kernel_gid_t	pr_gid;
  	pid_t	pr_pid, pr_ppid, pr_pgrp, pr_sid;
  	/* Lots missing */
  	char	pr_fname[16];	/* filename of executable */
  	char	pr_psargs[ELF_PRARGSZ];	/* initial part of arg list */
  };
  
  #ifndef __KERNEL__
  typedef struct elf_prstatus prstatus_t;
  typedef struct elf_prpsinfo prpsinfo_t;
  #define PRARGSZ ELF_PRARGSZ 
  #endif
  
  #ifdef __KERNEL__
  static inline void elf_core_copy_regs(elf_gregset_t *elfregs, struct pt_regs *regs)
  {
  #ifdef ELF_CORE_COPY_REGS
  	ELF_CORE_COPY_REGS((*elfregs), regs)
  #else
  	BUG_ON(sizeof(*elfregs) != sizeof(*regs));
  	*(struct pt_regs *)elfregs = *regs;
  #endif
  }
6cd61c0ba   Tejun Heo   elf: add ELF_CORE...
114
115
116
117
118
119
120
121
  static inline void elf_core_copy_kernel_regs(elf_gregset_t *elfregs, struct pt_regs *regs)
  {
  #ifdef ELF_CORE_COPY_KERNEL_REGS
  	ELF_CORE_COPY_KERNEL_REGS((*elfregs), regs);
  #else
  	elf_core_copy_regs(elfregs, regs);
  #endif
  }
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
122
123
  static inline int elf_core_copy_task_regs(struct task_struct *t, elf_gregset_t* elfregs)
  {
e9bf0cc7c   Parag Warudkar   elfcore.h : Fix U...
124
  #if defined (ELF_CORE_COPY_TASK_REGS)
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
125
  	return ELF_CORE_COPY_TASK_REGS(t, elfregs);
e9bf0cc7c   Parag Warudkar   elfcore.h : Fix U...
126
  #elif defined (task_pt_regs)
a65e7bfcd   Hui Zhu   elf: fix multithr...
127
  	elf_core_copy_regs(elfregs, task_pt_regs(t));
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
  #endif
  	return 0;
  }
  
  extern int dump_fpu (struct pt_regs *, elf_fpregset_t *);
  
  static inline int elf_core_copy_task_fpregs(struct task_struct *t, struct pt_regs *regs, elf_fpregset_t *fpu)
  {
  #ifdef ELF_CORE_COPY_FPREGS
  	return ELF_CORE_COPY_FPREGS(t, fpu);
  #else
  	return dump_fpu(regs, fpu);
  #endif
  }
  
  #ifdef ELF_CORE_COPY_XFPREGS
  static inline int elf_core_copy_task_xfpregs(struct task_struct *t, elf_fpxregset_t *xfpu)
  {
  	return ELF_CORE_COPY_XFPREGS(t, xfpu);
  }
  #endif
1fcccbac8   Daisuke HATAYAMA   elf coredump: rep...
149
150
151
152
153
154
155
156
157
158
159
160
161
162
  /*
   * These functions parameterize elf_core_dump in fs/binfmt_elf.c to write out
   * extra segments containing the gate DSO contents.  Dumping its
   * contents makes post-mortem fully interpretable later without matching up
   * the same kernel and hardware config to see what PC values meant.
   * Dumping its extra ELF program headers includes all the other information
   * a debugger needs to easily find how the gate DSO was being used.
   */
  extern Elf_Half elf_core_extra_phdrs(void);
  extern int
  elf_core_write_extra_phdrs(struct file *file, loff_t offset, size_t *size,
  			   unsigned long limit);
  extern int
  elf_core_write_extra_data(struct file *file, size_t *size, unsigned long limit);
8d9032bbe   Daisuke HATAYAMA   elf coredump: add...
163
  extern size_t elf_core_extra_data_size(void);
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
164

2faa4cf76   Roland McGrath   linux/elfcore.h: ...
165
  #endif /* __KERNEL__ */
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
166
  #endif /* _LINUX_ELFCORE_H */