OSDN Git Service

37d6a615ff882fe42a217a4b14ddc714632b7cc3
[uclinux-h8/uClibc.git] / libc / sysdeps / linux / sparc / sys / procfs.h
1 /* Copyright (C) 1996, 1997, 1999, 2000 Free Software Foundation, Inc.
2    This file is part of the GNU C Library.
3
4    The GNU C Library is free software; you can redistribute it and/or
5    modify it under the terms of the GNU Lesser General Public
6    License as published by the Free Software Foundation; either
7    version 2.1 of the License, or (at your option) any later version.
8
9    The GNU C Library is distributed in the hope that it will be useful,
10    but WITHOUT ANY WARRANTY; without even the implied warranty of
11    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
12    Lesser General Public License for more details.
13
14    You should have received a copy of the GNU Lesser General Public
15    License along with the GNU C Library; if not, see
16    <http://www.gnu.org/licenses/>.  */
17
18 #ifndef _SYS_PROCFS_H
19 #define _SYS_PROCFS_H   1
20
21 /* This is somehow modelled after the file of the same name on SysVr4
22    systems.  It provides a definition of the core file format for ELF
23    used on Linux.  */
24
25 #include <features.h>
26 #include <signal.h>
27 #include <sys/time.h>
28 #include <sys/types.h>
29 #include <sys/ucontext.h>
30 #include <sys/user.h>
31 #include <bits/wordsize.h>
32
33 __BEGIN_DECLS
34
35 #if __WORDSIZE == 64
36
37 #define ELF_NGREG               36
38
39 typedef struct
40   {
41     unsigned long       pr_regs[32];
42     unsigned long       pr_fsr;
43     unsigned long       pr_gsr;
44     unsigned long       pr_fprs;
45   } elf_fpregset_t;
46
47 #else /* sparc32 */
48
49 #define ELF_NGREG               38
50
51 typedef struct
52   {
53     union
54       {
55         unsigned long   pr_regs[32];
56         double          pr_dregs[16];
57       }                 pr_fr;
58     unsigned long       __unused;
59     unsigned long       pr_fsr;
60     unsigned char       pr_qcnt;
61     unsigned char       pr_q_entrysize;
62     unsigned char       pr_en;
63     unsigned int        pr_q[64];
64   } elf_fpregset_t;
65
66 #endif /* sparc32 */
67
68 typedef unsigned long elf_greg_t;
69 typedef elf_greg_t elf_gregset_t[ELF_NGREG];
70
71 struct elf_siginfo
72   {
73     int si_signo;                       /* Signal number.  */
74     int si_code;                        /* Extra code.  */
75     int si_errno;                       /* Errno.  */
76   };
77
78 /* Definitions to generate Intel SVR4-like core files.  These mostly
79    have the same names as the SVR4 types with "elf_" tacked on the
80    front to prevent clashes with linux definitions, and the typedef
81    forms have been avoided.  This is mostly like the SVR4 structure,
82    but more Linuxy, with things that Linux does not support and which
83    gdb doesn't really use excluded.  Fields present but not used are
84    marked with "XXX".  */
85 struct elf_prstatus
86   {
87     struct elf_siginfo pr_info;         /* Info associated with signal.  */
88     short int pr_cursig;                /* Current signal.  */
89     unsigned long int pr_sigpend;       /* Set of pending signals.  */
90     unsigned long int pr_sighold;       /* Set of held signals.  */
91     __pid_t pr_pid;
92     __pid_t pr_ppid;
93     __pid_t pr_pgrp;
94     __pid_t pr_sid;
95     struct timeval pr_utime;            /* User time.  */
96     struct timeval pr_stime;            /* System time.  */
97     struct timeval pr_cutime;           /* Cumulative user time.  */
98     struct timeval pr_cstime;           /* Cumulative system time.  */
99     elf_gregset_t pr_reg;               /* GP registers.  */
100     int pr_fpvalid;                     /* True if math copro being used.  */
101   };
102
103
104 #define ELF_PRARGSZ     (80)    /* Number of chars for args */
105
106 struct elf_prpsinfo
107   {
108     char pr_state;                      /* Numeric process state.  */
109     char pr_sname;                      /* Char for pr_state.  */
110     char pr_zomb;                       /* Zombie.  */
111     char pr_nice;                       /* Nice val.  */
112     unsigned long int pr_flag;          /* Flags.  */
113 #if __WORDSIZE == 64
114     unsigned int pr_uid;
115     unsigned int pr_gid;
116 #else
117     unsigned short int pr_uid;
118     unsigned short int pr_gid;
119 #endif
120     int pr_pid, pr_ppid, pr_pgrp, pr_sid;
121     /* Lots missing */
122     char pr_fname[16];                  /* Filename of executable.  */
123     char pr_psargs[ELF_PRARGSZ];        /* Initial part of arg list.  */
124   };
125
126 /* Addresses.  */
127 typedef void *psaddr_t;
128
129 /* Register sets.  Linux has different names.  */
130 typedef elf_gregset_t prgregset_t;
131 typedef elf_fpregset_t prfpregset_t;
132
133 /* We don't have any differences between processes and threads,
134    therefore have only one PID type.  */
135 typedef __pid_t lwpid_t;
136
137
138 typedef struct elf_prstatus prstatus_t;
139 typedef struct elf_prpsinfo prpsinfo_t;
140
141 #if __WORDSIZE == 64
142
143 /* Provide 32-bit variants so that BFD can read 32-bit
144    core files.  */
145 #define ELF_NGREG32             38
146 typedef struct
147   {
148     union
149       {
150         unsigned int    pr_regs[32];
151         double          pr_dregs[16];
152       }                 pr_fr;
153     unsigned int        __unused;
154     unsigned int        pr_fsr;
155     unsigned char       pr_qcnt;
156     unsigned char       pr_q_entrysize;
157     unsigned char       pr_en;
158     unsigned int        pr_q[64];
159   } elf_fpregset_t32;
160
161 typedef unsigned int elf_greg_t32;
162 typedef elf_greg_t32 elf_gregset_t32[ELF_NGREG32];
163
164 struct elf_prstatus32
165   {
166     struct elf_siginfo pr_info;         /* Info associated with signal.  */
167     short int pr_cursig;                /* Current signal.  */
168     unsigned int pr_sigpend;    /* Set of pending signals.  */
169     unsigned int pr_sighold;    /* Set of held signals.  */
170     __pid_t pr_pid;
171     __pid_t pr_ppid;
172     __pid_t pr_pgrp;
173     __pid_t pr_sid;
174     struct
175       {
176         int tv_sec, tv_usec;
177       } pr_utime,                       /* User time.  */
178         pr_stime,                       /* System time.  */
179         pr_cutime,                      /* Cumulative user time.  */
180         pr_cstime;                      /* Cumulative system time.  */
181     elf_gregset_t32 pr_reg;             /* GP registers.  */
182     int pr_fpvalid;                     /* True if math copro being used.  */
183   };
184
185 struct elf_prpsinfo32
186   {
187     char pr_state;                      /* Numeric process state.  */
188     char pr_sname;                      /* Char for pr_state.  */
189     char pr_zomb;                       /* Zombie.  */
190     char pr_nice;                       /* Nice val.  */
191     unsigned int pr_flag;               /* Flags.  */
192     unsigned short int pr_uid;
193     unsigned short int pr_gid;
194     int pr_pid, pr_ppid, pr_pgrp, pr_sid;
195     /* Lots missing */
196     char pr_fname[16];                  /* Filename of executable.  */
197     char pr_psargs[ELF_PRARGSZ];        /* Initial part of arg list.  */
198   };
199
200 typedef elf_gregset_t32 prgregset32_t;
201 typedef elf_fpregset_t32 prfpregset32_t;
202
203 typedef struct elf_prstatus32 prstatus32_t;
204 typedef struct elf_prpsinfo32 prpsinfo32_t;
205
206 #endif  /* sparc64 */
207
208 __END_DECLS
209
210 #endif  /* sys/procfs.h */