diff options
author | Linus Torvalds <torvalds@ppc970.osdl.org> | 2005-04-16 18:20:36 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@ppc970.osdl.org> | 2005-04-16 18:20:36 -0400 |
commit | 1da177e4c3f41524e886b7f1b8a0c1fc7321cac2 (patch) | |
tree | 0bba044c4ce775e45a88a51686b5d9f90697ea9d /arch/ia64/ia32/elfcore32.h |
Linux-2.6.12-rc2v2.6.12-rc2
Initial git repository build. I'm not bothering with the full history,
even though we have it. We can create a separate "historical" git
archive of that later if we want to, and in the meantime it's about
3.2GB when imported into git - space that would just make the early
git days unnecessarily complicated, when we don't have a lot of good
infrastructure for it.
Let it rip!
Diffstat (limited to 'arch/ia64/ia32/elfcore32.h')
-rw-r--r-- | arch/ia64/ia32/elfcore32.h | 138 |
1 files changed, 138 insertions, 0 deletions
diff --git a/arch/ia64/ia32/elfcore32.h b/arch/ia64/ia32/elfcore32.h new file mode 100644 index 000000000000..b73b8b6b10c1 --- /dev/null +++ b/arch/ia64/ia32/elfcore32.h | |||
@@ -0,0 +1,138 @@ | |||
1 | /* | ||
2 | * IA-32 ELF core dump support. | ||
3 | * | ||
4 | * Copyright (C) 2003 Arun Sharma <arun.sharma@intel.com> | ||
5 | * | ||
6 | * Derived from the x86_64 version | ||
7 | */ | ||
8 | #ifndef _ELFCORE32_H_ | ||
9 | #define _ELFCORE32_H_ | ||
10 | |||
11 | #include <asm/intrinsics.h> | ||
12 | #include <asm/uaccess.h> | ||
13 | |||
14 | #define USE_ELF_CORE_DUMP 1 | ||
15 | |||
16 | /* Override elfcore.h */ | ||
17 | #define _LINUX_ELFCORE_H 1 | ||
18 | typedef unsigned int elf_greg_t; | ||
19 | |||
20 | #define ELF_NGREG (sizeof (struct user_regs_struct32) / sizeof(elf_greg_t)) | ||
21 | typedef elf_greg_t elf_gregset_t[ELF_NGREG]; | ||
22 | |||
23 | typedef struct ia32_user_i387_struct elf_fpregset_t; | ||
24 | typedef struct ia32_user_fxsr_struct elf_fpxregset_t; | ||
25 | |||
26 | struct elf_siginfo | ||
27 | { | ||
28 | int si_signo; /* signal number */ | ||
29 | int si_code; /* extra code */ | ||
30 | int si_errno; /* errno */ | ||
31 | }; | ||
32 | |||
33 | #define jiffies_to_timeval(a,b) do { (b)->tv_usec = 0; (b)->tv_sec = (a)/HZ; }while(0) | ||
34 | |||
35 | struct elf_prstatus | ||
36 | { | ||
37 | struct elf_siginfo pr_info; /* Info associated with signal */ | ||
38 | short pr_cursig; /* Current signal */ | ||
39 | unsigned int pr_sigpend; /* Set of pending signals */ | ||
40 | unsigned int pr_sighold; /* Set of held signals */ | ||
41 | pid_t pr_pid; | ||
42 | pid_t pr_ppid; | ||
43 | pid_t pr_pgrp; | ||
44 | pid_t pr_sid; | ||
45 | struct compat_timeval pr_utime; /* User time */ | ||
46 | struct compat_timeval pr_stime; /* System time */ | ||
47 | struct compat_timeval pr_cutime; /* Cumulative user time */ | ||
48 | struct compat_timeval pr_cstime; /* Cumulative system time */ | ||
49 | elf_gregset_t pr_reg; /* GP registers */ | ||
50 | int pr_fpvalid; /* True if math co-processor being used. */ | ||
51 | }; | ||
52 | |||
53 | #define ELF_PRARGSZ (80) /* Number of chars for args */ | ||
54 | |||
55 | struct elf_prpsinfo | ||
56 | { | ||
57 | char pr_state; /* numeric process state */ | ||
58 | char pr_sname; /* char for pr_state */ | ||
59 | char pr_zomb; /* zombie */ | ||
60 | char pr_nice; /* nice val */ | ||
61 | unsigned int pr_flag; /* flags */ | ||
62 | __u16 pr_uid; | ||
63 | __u16 pr_gid; | ||
64 | pid_t pr_pid, pr_ppid, pr_pgrp, pr_sid; | ||
65 | /* Lots missing */ | ||
66 | char pr_fname[16]; /* filename of executable */ | ||
67 | char pr_psargs[ELF_PRARGSZ]; /* initial part of arg list */ | ||
68 | }; | ||
69 | |||
70 | #define ELF_CORE_COPY_REGS(pr_reg, regs) \ | ||
71 | pr_reg[0] = regs->r11; \ | ||
72 | pr_reg[1] = regs->r9; \ | ||
73 | pr_reg[2] = regs->r10; \ | ||
74 | pr_reg[3] = regs->r14; \ | ||
75 | pr_reg[4] = regs->r15; \ | ||
76 | pr_reg[5] = regs->r13; \ | ||
77 | pr_reg[6] = regs->r8; \ | ||
78 | pr_reg[7] = regs->r16 & 0xffff; \ | ||
79 | pr_reg[8] = (regs->r16 >> 16) & 0xffff; \ | ||
80 | pr_reg[9] = (regs->r16 >> 32) & 0xffff; \ | ||
81 | pr_reg[10] = (regs->r16 >> 48) & 0xffff; \ | ||
82 | pr_reg[11] = regs->r1; \ | ||
83 | pr_reg[12] = regs->cr_iip; \ | ||
84 | pr_reg[13] = regs->r17 & 0xffff; \ | ||
85 | pr_reg[14] = ia64_getreg(_IA64_REG_AR_EFLAG); \ | ||
86 | pr_reg[15] = regs->r12; \ | ||
87 | pr_reg[16] = (regs->r17 >> 16) & 0xffff; | ||
88 | |||
89 | static inline void elf_core_copy_regs(elf_gregset_t *elfregs, | ||
90 | struct pt_regs *regs) | ||
91 | { | ||
92 | ELF_CORE_COPY_REGS((*elfregs), regs) | ||
93 | } | ||
94 | |||
95 | static inline int elf_core_copy_task_regs(struct task_struct *t, | ||
96 | elf_gregset_t* elfregs) | ||
97 | { | ||
98 | struct pt_regs *pp = ia64_task_regs(t); | ||
99 | ELF_CORE_COPY_REGS((*elfregs), pp); | ||
100 | return 1; | ||
101 | } | ||
102 | |||
103 | static inline int | ||
104 | elf_core_copy_task_fpregs(struct task_struct *tsk, struct pt_regs *regs, elf_fpregset_t *fpu) | ||
105 | { | ||
106 | struct ia32_user_i387_struct *fpstate = (void*)fpu; | ||
107 | mm_segment_t old_fs; | ||
108 | |||
109 | if (!tsk_used_math(tsk)) | ||
110 | return 0; | ||
111 | |||
112 | old_fs = get_fs(); | ||
113 | set_fs(KERNEL_DS); | ||
114 | save_ia32_fpstate(tsk, (struct ia32_user_i387_struct __user *) fpstate); | ||
115 | set_fs(old_fs); | ||
116 | |||
117 | return 1; | ||
118 | } | ||
119 | |||
120 | #define ELF_CORE_COPY_XFPREGS 1 | ||
121 | static inline int | ||
122 | elf_core_copy_task_xfpregs(struct task_struct *tsk, elf_fpxregset_t *xfpu) | ||
123 | { | ||
124 | struct ia32_user_fxsr_struct *fpxstate = (void*) xfpu; | ||
125 | mm_segment_t old_fs; | ||
126 | |||
127 | if (!tsk_used_math(tsk)) | ||
128 | return 0; | ||
129 | |||
130 | old_fs = get_fs(); | ||
131 | set_fs(KERNEL_DS); | ||
132 | save_ia32_fpxstate(tsk, (struct ia32_user_fxsr_struct __user *) fpxstate); | ||
133 | set_fs(old_fs); | ||
134 | |||
135 | return 1; | ||
136 | } | ||
137 | |||
138 | #endif /* _ELFCORE32_H_ */ | ||