Add headers for OpenSolaris extensions that glibc implements
[kopensolaris-gnu/glibc.git] / sysdeps / unix / sysv / solaris2 / kopensolaris-gnu / sys / procfs.h
1 /* Declarations of procfs structures.
2    Copyright (C) 2008 Free Software Foundation, Inc.
3    This file is part of the GNU C Library.
4
5    The GNU C Library is free software; you can redistribute it and/or
6    modify it under the terms of the GNU Lesser General Public
7    License as published by the Free Software Foundation; either
8    version 2.1 of the License, or (at your option) any later version.
9
10    The GNU C Library is distributed in the hope that it will be useful,
11    but WITHOUT ANY WARRANTY; without even the implied warranty of
12    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
13    Lesser General Public License for more details.
14
15    You should have received a copy of the GNU Lesser General Public
16    License along with the GNU C Library; if not, write to the Free
17    Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
18    02111-1307 USA.  */
19
20 #ifndef _SYS_PROCFS_H
21 #define _SYS_PROCFS_H   1
22
23 #ifndef _STRUCTURED_PROC
24 # define _STRUCTURED_PROC       0
25 #endif
26
27 #if _STRUCTURED_PROC == 0
28
29 # include <sys/old_procfs.h>
30
31 #else
32
33 #include <sys/types.h>
34 #include <sys/signal.h>
35 #include <sys/fault.h>
36 #include <sys/syscall.h>
37 #include <sys/processor.h>
38 #include <sys/pset.h>
39 #include <sys/priv.h>
40 #include <bits/regset.h>
41 #include <time.h>
42 #include <bits/wordsize.h>
43 #include <sys/procfs_isa.h>
44
45 /* control codes for ctl and lwpctl */
46 #define PCNULL          0
47 #define PCSTOP          1
48 #define PCDSTOP         2
49 #define PCWSTOP         3
50 #define PCTWSTOP        4
51 #define PCRUN           5
52 #define PCCSIG          6
53 #define PCCFAULT        7
54 #define PCSSIG          8
55 #define PCKILL          9
56 #define PCUNKILL        10
57 #define PCSHOLD         11
58 #define PCSTRACE        12
59 #define PCSFAULT        13
60 #define PCSENTRY        14
61 #define PCSEXIT         15
62 #define PCSET           16
63 #define PCUNSET         17
64 #define PCSREG          18
65 #define PCSFPREG        19
66 #define PCSXREG         20
67 #define PCNICE          21
68 #define PCSVADDR        22
69 #define PCWATCH         23
70 #define PCAGENT         24
71 #define PCREAD          25
72 #define PCWRITE         26
73 #define PCSCRED         27
74 #define PCSASRS         28
75 #define PCSPRIV         29
76 #define PCSZONE         30
77 #define PCSCREDX        31
78
79 /* PCRUN codes */
80 #define PRCSIG          0x01
81 #define PRCFAULT        0x02
82 #define PRSTEP          0x04
83 #define PRSABORT        0x08
84 #define PRSTOP          0x10
85
86 /* /proc/<pid>/lwp/<lwpid>/lwpstatus */
87 typedef struct lwpstatus
88 {
89         int     pr_flags;
90         id_t pr_lwpid;
91         short pr_why;
92         short pr_what;
93         short pr_cursig;
94         short pr_pad1;
95         siginfo_t pr_info;
96         sigset_t pr_lwppend;
97         sigset_t pr_lwphold;
98         struct sigaction pr_action;
99         stack_t pr_altstack;
100         uintptr_t pr_oldcontext;
101         short pr_syscall;
102         short pr_nsysarg;
103         int     pr_errno;
104 #define PRSYSARGS       8
105         long pr_sysarg[PRSYSARGS];
106         long pr_rval1;
107         long pr_rval2;
108 #define PRCLSZ          8
109         char pr_clname[PRCLSZ];
110         struct timespec pr_tstamp;
111         struct timespec pr_utime;
112         struct timespec pr_stime;
113         int     pr_filler[11 - 2 * sizeof (struct timespec) / sizeof (int)];
114         int     pr_errpriv;
115         uintptr_t pr_ustack;
116         unsigned long pr_instr;
117         prgregset_t pr_reg;
118         prfpregset_t pr_fpreg;
119 } lwpstatus_t;
120
121 /* /proc/<pid>/status */
122 typedef struct pstatus
123 {
124         int     pr_flags;
125         int     pr_nlwp;
126         pid_t pr_pid;
127         pid_t pr_ppid;
128         pid_t pr_pgid;
129         pid_t pr_sid;
130         id_t pr_aslwpid;
131         id_t pr_agentid;
132         sigset_t pr_sigpend;
133         uintptr_t pr_brkbase;
134         size_t pr_brksize;
135         uintptr_t pr_stkbase;
136         size_t pr_stksize;
137         struct timespec pr_utime;
138         struct timespec pr_stime;
139         struct timespec pr_cutime;
140         struct timespec pr_cstime;
141         sigset_t pr_sigtrace;
142         fltset_t pr_flttrace;
143         sysset_t pr_sysentry;
144         sysset_t pr_sysexit;
145         char pr_dmodel;
146         char pr_pad[3];
147         taskid_t pr_taskid;
148         projid_t pr_projid;
149         int pr_nzomb;
150         zoneid_t pr_zoneid;
151         int pr_filler[15];
152         lwpstatus_t pr_lwp;
153 } pstatus_t;
154
155 /* pr_flags */
156 #define PR_STOPPED              0x00000001
157 #define PR_ISTOP                0x00000002
158 #define PR_DSTOP                0x00000004
159 #define PR_STEP                 0x00000008
160 #define PR_ASLEEP               0x00000010
161 #define PR_PCINVAL              0x00000020
162 #define PR_ASLWP                0x00000040
163 #define PR_AGENT                0x00000080
164 #define PR_DETACH               0x00000100
165 #define PR_DAEMON               0x00000200
166 #define PR_IDLE                 0x00000400
167 #define PR_ISSYS                0x00001000
168 #define PR_VFORKP               0x00002000
169 #define PR_ORPHAN               0x00004000
170 #define PR_NOSIGCHLD    0x00008000
171 #define PR_WAITPID          0x00010000
172 #define PR_FORK                 0x00100000
173 #define PR_RLC                  0x00200000
174 #define PR_KLC                  0x00400000
175 #define PR_ASYNC                0x00800000
176 #define PR_MSACCT               0x01000000
177 #define PR_BPTADJ               0x02000000
178 #define PR_PTRACE               0x04000000
179 #define PR_MSFORK               0x08000000
180
181 /* pr_why */
182 enum
183 {
184         PR_REQUESTED = 1,
185 #define PR_REQUESTED PR_REQUESTED
186         PR_SIGNALLED = 2,
187 #define PR_SIGNALLED PR_SIGNALLED
188         PR_SYSENTRY = 3,
189 #define PR_SYSENTRY PR_SYSENTRY
190         PR_SYSEXIT = 4,
191 #define PR_SYSEXIT PR_SYSEXIT
192         PR_JOBCONTROL = 5,
193 #define PR_JOBCONTROL PR_JOBCONTROL
194         PR_FAULTED = 6,
195 #define PR_FAULTED PR_FAULTED
196         PR_SUSPENDED = 7,
197 #define PR_SUSPENDED PR_SUSPENDED
198         PR_CHECKPOINT = 8
199 #define PR_CHECKPOINT PR_CHECKPOINT
200 };
201
202 /* /proc/<pid>/lwp/<lwpid>/lwpsinfo */
203 typedef struct lwpsinfo
204 {
205         int     pr_flag;
206         id_t    pr_lwpid;
207         uintptr_t pr_addr;
208         uintptr_t pr_wchan;
209         char pr_stype;
210         char pr_state;
211         char pr_sname;
212         char pr_nice;
213         short pr_syscall;
214         char pr_oldpri;
215         char pr_cpu;
216         int     pr_pri;
217         unsigned short pr_pctcpu;
218         unsigned short pr_pad;
219         struct timespec pr_start;
220         struct timespec pr_time;
221 #define PRFNSZ          16
222         char pr_clname[PRCLSZ];
223         char pr_name[PRFNSZ];
224         processorid_t pr_onpro;
225         processorid_t pr_bindpro;
226         psetid_t pr_bindpset;
227         int     pr_lgrp;
228         int     pr_filler[4];
229 } lwpsinfo_t;
230
231 /* pr_ttydev: non-existent device */
232 #define PRNODEV (dev_t)(-1)
233
234 /* /proc/<pid>/psinfo */
235 typedef struct psinfo
236 {
237         int     pr_flag;
238         int     pr_nlwp;
239         pid_t pr_pid;
240         pid_t pr_ppid;
241         pid_t pr_pgid;
242         pid_t pr_sid;
243         uid_t pr_uid;
244         uid_t pr_euid;
245         gid_t pr_gid;
246         gid_t pr_egid;
247         uintptr_t pr_addr;
248         size_t pr_size;
249         size_t pr_rssize;
250         size_t pr_pad1;
251         dev_t pr_ttydev;
252         unsigned short pr_pctcpu;
253         unsigned short pr_pctmem;
254         struct timespec pr_start;
255         struct timespec pr_time;
256         struct timespec pr_ctime;
257         char pr_fname[PRFNSZ];
258 #define PRARGSZ         80
259         char pr_psargs[PRARGSZ];
260         int pr_wstat;
261         int pr_argc;
262         uintptr_t pr_argv;
263         uintptr_t pr_envp;
264         char pr_dmodel;
265         char pr_pad2[3];
266         taskid_t pr_taskid;
267         projid_t pr_projid;
268         int pr_nzomb;
269         poolid_t pr_poolid;
270         zoneid_t pr_zoneid;
271         id_t pr_contract;
272         int pr_filler[1];
273         lwpsinfo_t pr_lwp;
274 } psinfo_t;
275
276 /* /proc/<pid>/map, /proc/<pid>/rmap */
277 typedef struct prmap
278 {
279         uintptr_t pr_vaddr;
280         size_t pr_size;
281 #define PRMAPSZ 64
282         char pr_mapname[PRMAPSZ];
283         offset_t pr_offset;
284         int pr_mflags;
285         int pr_pagesize;
286         int pr_shmid;
287         int pr_filler[1];
288 } prmap_t;
289
290 /* pr_mflags values */
291 #define MA_EXEC                 0x0001
292 #define MA_WRITE                0x0002
293 #define MA_READ                 0x0004
294 #define MA_SHARED               0x0008
295 #define MA_BREAK                0x0010
296 #define MA_STACK                0x0020
297 #define MA_ANON                 0x0040
298 #define MA_ISM                  0x0080
299 #define MA_NORESERVE    0x0100
300 #define MA_SHM                  0x0200
301 #define MA_RESERVED1    0x0400
302
303 /* /proc/<pid>/xmap */
304 typedef struct prxmap
305 {
306         uintptr_t pr_vaddr;
307         size_t pr_size;
308         char pr_mapname[PRMAPSZ];
309         offset_t pr_offset;
310         int pr_mflags;
311         int pr_pagesize;
312         int pr_shmid;
313         dev_t pr_dev;
314         uint64_t pr_ino;
315         size_t pr_rss;
316         size_t pr_anon;
317         size_t pr_locked;
318         size_t pr_pad;
319         uint64_t pr_hatpagesize;
320 #if __WORDSIZE == 32
321         unsigned long pr_filler[6];
322 #else
323         unsigned long pr_filler[7];
324 #endif
325 } prxmap_t;
326
327 /* pr_mflags */
328 #define MA_EXEC                 0x0001
329 #define MA_WRITE                0x0002
330 #define MA_READ                 0x0004
331 #define MA_SHARED               0x0008
332 #define MA_ANON                 0x0040
333 #define MA_ISM                  0x0080
334 #define MA_NORESERVE    0x0100
335 #define MA_SHM                  0x0200
336 #define MA_RESERVED1    0x0400
337
338 /* /proc/<pid>/cred */
339 typedef struct prcred
340 {
341         uid_t pr_euid;
342         uid_t pr_ruid;
343         uid_t pr_suid;
344         gid_t pr_egid;
345         gid_t pr_rgid;
346         gid_t pr_sgid;
347         int pr_ngroups;
348         gid_t pr_groups[1];
349 } prcred_t;
350
351 /* /proc/<pid>/priv */
352 typedef struct prpriv
353 {
354         uint32_t pr_nsets;
355         uint32_t pr_setsize;
356         uint32_t pr_infosize;
357         priv_chunk_t pr_sets[1];
358 } prpriv_t;
359
360 /* /proc/<pid>/watch */
361 typedef struct prwatch
362 {
363         uintptr_t pr_vaddr;
364         size_t pr_size;
365         int pr_wflags;
366         int pr_pad;
367 } prwatch_t;
368
369 /* pr_wflags */
370 #define WA_EXEC                 0x01
371 #define WA_WRITE                0x02
372 #define WA_READ                 0x04
373 #define WA_TRAPAFTER    0x08
374
375 typedef struct priovec {
376         void *pio_base;
377         size_t pio_len;
378         off_t pio_offset;
379 } priovec_t;
380
381 /* /proc/<pid>/usage, /proc/<pid>/lwp/<lwpid>/lwpusage */
382 typedef struct prusage
383 {
384         id_t pr_lwpid;
385         int pr_count;
386         struct timespec pr_tstamp;
387         struct timespec pr_create;
388         struct timespec pr_term;
389         struct timespec pr_rtime;
390         struct timespec pr_utime;
391         struct timespec pr_stime;
392         struct timespec pr_ttime;
393         struct timespec pr_tftime;
394         struct timespec pr_dftime;
395         struct timespec pr_kftime;
396         struct timespec pr_ltime;
397         struct timespec pr_slptime;
398         struct timespec pr_wtime;
399         struct timespec pr_stoptime;
400         struct timespec filltime[6];
401         unsigned long pr_minf;
402         unsigned long pr_majf;
403         unsigned long pr_nswap;
404         unsigned long pr_inblk;
405         unsigned long pr_oublk;
406         unsigned long pr_msnd;
407         unsigned long pr_mrcv;
408         unsigned long pr_sigs;
409         unsigned long pr_vctx;
410         unsigned long pr_ictx;
411         unsigned long pr_sysc;
412         unsigned long pr_ioch;
413         unsigned long filler[10];
414 } prusage_t;
415
416 /* /proc/<pid>/pagedata file header */
417 typedef struct prpageheader
418 {
419         struct timespec pr_tstamp;
420         long pr_nmap;
421         long pr_npage;
422 } prpageheader_t;
423
424 /* /proc/<pid>/pagedata mapping header */
425 typedef struct prasmap
426 {
427         uintptr_t pr_vaddr;
428         size_t pr_npage;
429         char pr_mapname[PRMAPSZ];
430         offset_t pr_offset;
431         int pr_mflags;
432         int pr_pagesize;
433         int pr_shmid;
434         int pr_filler[1];
435 } prasmap_t;
436
437 /* pr_npage-long byte array (plus 8-byte alignment) of the following flags */
438 #define PG_REFERENCED   0x02
439 #define PG_MODIFIED             0x01
440 #define PG_HWMAPPED             0x04
441
442 /* /proc/<pid>/lstatus, /proc/<pid>/lpsinfo, /proc/<pid>/lusage header */
443 typedef struct prheader
444 {
445         long pr_nent;
446         long pr_entsize;
447 } prheader_t;
448
449 /* based on sig*set */
450
451 #define prfillset(set) \
452         { int __cnt = sizeof (*set) / sizeof (uint32_t); \
453         while (--__cnt >= 0) ((uint32_t *)(set))[__cnt] = 0xFFFFFFFF; }
454
455 #define premptyset(set) \
456         { int __cnt = sizeof (*set) / sizeof (uint32_t); \
457         while (--__cnt >= 0) ((uint32_t *)(set))[__cnt] = 0; }
458
459 #define __prmask(flag) \
460   (((uint32_t) 1) << (((flag) - 1) % (8 * (int)sizeof (uint32_t))))
461
462 # define __prword(flag) (((flag) - 1) / (8 * (int)sizeof (uint32_t)))
463
464 #define praddset(set, flag) \
465     (((uint32_t *)(set))[__prword (flag)] |= __prmask (flag))
466
467 #define prdelset(set, flag) \
468     (((uint32_t *)(set))[__prword (flag)] &= ~__prmask (flag))
469
470 #define prismember(set, flag) \
471         ((((uint32_t *)(set))[__prword (flag)] & __prmask (flag)) ? 1 : 0)
472
473 /* Data models.  */
474 #define PR_MODEL_UNKNOWN        0
475 #define PR_MODEL_ILP32  1
476 #define PR_MODEL_LP64   2
477 #if defined(_LP64)
478 # define PR_MODEL_NATIVE        PR_MODEL_LP64
479 #elif defined(_ILP32)
480 # define PR_MODEL_NATIVE        PR_MODEL_ILP32
481 #else
482 # error Unknown data model
483 #endif
484
485 #endif /* _STRUCTURED_PROC == 0 */
486
487 #endif /* _SYS_PROCFS_H */