Details | Last modification | View Log | RSS feed
Rev | Author | Line No. | Line |
---|---|---|---|
422 | giacomo | 1 | #ifndef _LINUX_ELFCORE_H |
2 | #define _LINUX_ELFCORE_H |
||
3 | |||
4 | #include <linux/types.h> |
||
5 | #include <linux/signal.h> |
||
6 | #include <linux/time.h> |
||
7 | #include <linux/user.h> |
||
8 | |||
9 | struct elf_siginfo |
||
10 | { |
||
11 | int si_signo; /* signal number */ |
||
12 | int si_code; /* extra code */ |
||
13 | int si_errno; /* errno */ |
||
14 | }; |
||
15 | |||
16 | #include <asm/elf.h> |
||
17 | |||
18 | #ifndef __KERNEL__ |
||
19 | typedef elf_greg_t greg_t; |
||
20 | typedef elf_gregset_t gregset_t; |
||
21 | typedef elf_fpregset_t fpregset_t; |
||
22 | typedef elf_fpxregset_t fpxregset_t; |
||
23 | #define NGREG ELF_NGREG |
||
24 | #endif |
||
25 | |||
26 | /* |
||
27 | * Definitions to generate Intel SVR4-like core files. |
||
28 | * These mostly have the same names as the SVR4 types with "elf_" |
||
29 | * tacked on the front to prevent clashes with linux definitions, |
||
30 | * and the typedef forms have been avoided. This is mostly like |
||
31 | * the SVR4 structure, but more Linuxy, with things that Linux does |
||
32 | * not support and which gdb doesn't really use excluded. |
||
33 | * Fields present but not used are marked with "XXX". |
||
34 | */ |
||
35 | struct elf_prstatus |
||
36 | { |
||
37 | #if 0 |
||
38 | long pr_flags; /* XXX Process flags */ |
||
39 | short pr_why; /* XXX Reason for process halt */ |
||
40 | short pr_what; /* XXX More detailed reason */ |
||
41 | #endif |
||
42 | struct elf_siginfo pr_info; /* Info associated with signal */ |
||
43 | short pr_cursig; /* Current signal */ |
||
44 | unsigned long pr_sigpend; /* Set of pending signals */ |
||
45 | unsigned long pr_sighold; /* Set of held signals */ |
||
46 | #if 0 |
||
47 | struct sigaltstack pr_altstack; /* Alternate stack info */ |
||
48 | struct sigaction pr_action; /* Signal action for current sig */ |
||
49 | #endif |
||
50 | pid_t pr_pid; |
||
51 | pid_t pr_ppid; |
||
52 | pid_t pr_pgrp; |
||
53 | pid_t pr_sid; |
||
54 | struct timeval pr_utime; /* User time */ |
||
55 | struct timeval pr_stime; /* System time */ |
||
56 | struct timeval pr_cutime; /* Cumulative user time */ |
||
57 | struct timeval pr_cstime; /* Cumulative system time */ |
||
58 | #if 0 |
||
59 | long pr_instr; /* Current instruction */ |
||
60 | #endif |
||
61 | elf_gregset_t pr_reg; /* GP registers */ |
||
62 | int pr_fpvalid; /* True if math co-processor being used. */ |
||
63 | }; |
||
64 | |||
65 | #define ELF_PRARGSZ (80) /* Number of chars for args */ |
||
66 | |||
67 | struct elf_prpsinfo |
||
68 | { |
||
69 | char pr_state; /* numeric process state */ |
||
70 | char pr_sname; /* char for pr_state */ |
||
71 | char pr_zomb; /* zombie */ |
||
72 | char pr_nice; /* nice val */ |
||
73 | unsigned long pr_flag; /* flags */ |
||
74 | __kernel_uid_t pr_uid; |
||
75 | __kernel_gid_t pr_gid; |
||
76 | pid_t pr_pid, pr_ppid, pr_pgrp, pr_sid; |
||
77 | /* Lots missing */ |
||
78 | char pr_fname[16]; /* filename of executable */ |
||
79 | char pr_psargs[ELF_PRARGSZ]; /* initial part of arg list */ |
||
80 | }; |
||
81 | |||
82 | #ifndef __KERNEL__ |
||
83 | typedef struct elf_prstatus prstatus_t; |
||
84 | typedef struct elf_prpsinfo prpsinfo_t; |
||
85 | #define PRARGSZ ELF_PRARGSZ |
||
86 | #endif |
||
87 | |||
88 | #ifdef __KERNEL__ |
||
89 | static inline void elf_core_copy_regs(elf_gregset_t *elfregs, struct pt_regs *regs) |
||
90 | { |
||
91 | #ifdef ELF_CORE_COPY_REGS |
||
92 | ELF_CORE_COPY_REGS((*elfregs), regs) |
||
93 | #else |
||
94 | BUG_ON(sizeof(*elfregs) != sizeof(*regs)); |
||
95 | *(struct pt_regs *)elfregs = *regs; |
||
96 | #endif |
||
97 | } |
||
98 | |||
99 | static inline int elf_core_copy_task_regs(struct task_struct *t, elf_gregset_t* elfregs) |
||
100 | { |
||
101 | #ifdef ELF_CORE_COPY_TASK_REGS |
||
102 | |||
103 | return ELF_CORE_COPY_TASK_REGS(t, elfregs); |
||
104 | #endif |
||
105 | return 0; |
||
106 | } |
||
107 | |||
108 | extern int dump_fpu (struct pt_regs *, elf_fpregset_t *); |
||
109 | |||
110 | static inline int elf_core_copy_task_fpregs(struct task_struct *t, struct pt_regs *regs, elf_fpregset_t *fpu) |
||
111 | { |
||
112 | #ifdef ELF_CORE_COPY_FPREGS |
||
113 | return ELF_CORE_COPY_FPREGS(t, fpu); |
||
114 | #else |
||
115 | return dump_fpu(regs, fpu); |
||
116 | #endif |
||
117 | } |
||
118 | |||
119 | #ifdef ELF_CORE_COPY_XFPREGS |
||
120 | static inline int elf_core_copy_task_xfpregs(struct task_struct *t, elf_fpxregset_t *xfpu) |
||
121 | { |
||
122 | return ELF_CORE_COPY_XFPREGS(t, xfpu); |
||
123 | } |
||
124 | #endif |
||
125 | |||
126 | #endif /* __KERNEL__ */ |
||
127 | |||
128 | |||
129 | #endif /* _LINUX_ELFCORE_H */ |