Merge commit '7e3488dc6cdcb0c04e1ce167a1a3bfef83b5f2e0'
[unleashed.git] / include / sys / corectl.h
blob8ebc78e9e9a4317a8195eaa0fb7e9cd5f3569161
1 /*
2 * CDDL HEADER START
4 * The contents of this file are subject to the terms of the
5 * Common Development and Distribution License (the "License").
6 * You may not use this file except in compliance with the License.
8 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
9 * or http://www.opensolaris.org/os/licensing.
10 * See the License for the specific language governing permissions
11 * and limitations under the License.
13 * When distributing Covered Code, include this CDDL HEADER in each
14 * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
15 * If applicable, add the following below this CDDL HEADER, with the
16 * fields enclosed by brackets "[]" replaced with your own identifying
17 * information: Portions Copyright [yyyy] [name of copyright owner]
19 * CDDL HEADER END
22 * Copyright 2008 Sun Microsystems, Inc. All rights reserved.
23 * Use is subject to license terms.
26 #ifndef _SYS_CORECTL_H
27 #define _SYS_CORECTL_H
29 #include <sys/types.h>
30 #include <sys/zone.h>
31 #include <sys/refstr.h>
32 #include <sys/mutex.h>
34 #ifdef __cplusplus
35 extern "C" {
36 #endif
39 * Definitions for corectl() system call.
42 /* subcodes */
43 #define CC_SET_OPTIONS 1
44 #define CC_GET_OPTIONS 2
45 #define CC_SET_GLOBAL_PATH 3
46 #define CC_GET_GLOBAL_PATH 4
47 #define CC_SET_PROCESS_PATH 5
48 #define CC_GET_PROCESS_PATH 6
49 #define CC_SET_GLOBAL_CONTENT 7
50 #define CC_GET_GLOBAL_CONTENT 8
51 #define CC_SET_PROCESS_CONTENT 9
52 #define CC_GET_PROCESS_CONTENT 10
53 #define CC_SET_DEFAULT_PATH 11
54 #define CC_GET_DEFAULT_PATH 12
55 #define CC_SET_DEFAULT_CONTENT 13
56 #define CC_GET_DEFAULT_CONTENT 14
58 /* options */
59 #define CC_GLOBAL_PATH 0x01 /* enable global core files */
60 #define CC_PROCESS_PATH 0x02 /* enable per-process core files */
61 #define CC_GLOBAL_SETID 0x04 /* allow global setid core files */
62 #define CC_PROCESS_SETID 0x08 /* allow per-process setid core files */
63 #define CC_GLOBAL_LOG 0x10 /* log global core dumps to syslog */
65 /* all of the above */
66 #define CC_OPTIONS \
67 (CC_GLOBAL_PATH | CC_PROCESS_PATH | \
68 CC_GLOBAL_SETID | CC_PROCESS_SETID | CC_GLOBAL_LOG)
70 /* contents */
71 #define CC_CONTENT_STACK 0x0001ULL /* process stack */
72 #define CC_CONTENT_HEAP 0x0002ULL /* process heap */
74 /* MAP_SHARED file mappings */
75 #define CC_CONTENT_SHFILE 0x0004ULL /* file-backed shared mapping */
76 #define CC_CONTENT_SHANON 0x0008ULL /* anonymous shared mapping */
78 /* MAP_PRIVATE file mappings */
79 #define CC_CONTENT_TEXT 0x0010ULL /* read/exec file mappings */
80 #define CC_CONTENT_DATA 0x0020ULL /* writable file mappings */
81 #define CC_CONTENT_RODATA 0x0040ULL /* read-only file mappings */
82 #define CC_CONTENT_ANON 0x0080ULL /* anonymous mappings (MAP_ANON) */
84 #define CC_CONTENT_SHM 0x0100ULL /* System V shared memory */
85 #define CC_CONTENT_ISM 0x0200ULL /* intimate shared memory */
86 #define CC_CONTENT_DISM 0x0400ULL /* dynamic intimate shared memory */
88 #define CC_CONTENT_CTF 0x0800ULL /* CTF data */
89 #define CC_CONTENT_SYMTAB 0x1000ULL /* symbol table */
91 #define CC_CONTENT_ALL 0x1fffULL
92 #define CC_CONTENT_NONE 0ULL
93 #define CC_CONTENT_DEFAULT (CC_CONTENT_STACK | CC_CONTENT_HEAP | \
94 CC_CONTENT_ISM | CC_CONTENT_DISM | CC_CONTENT_SHM | \
95 CC_CONTENT_SHANON | CC_CONTENT_TEXT | CC_CONTENT_DATA | \
96 CC_CONTENT_RODATA | CC_CONTENT_ANON | CC_CONTENT_CTF | \
97 CC_CONTENT_SYMTAB)
98 #define CC_CONTENT_INVALID (-1ULL)
100 typedef u_longlong_t core_content_t;
102 typedef struct corectl_content {
103 core_content_t ccc_content;
104 kmutex_t ccc_mtx;
105 uint32_t ccc_refcnt;
106 } corectl_content_t;
108 typedef struct corectl_path {
109 refstr_t *ccp_path;
110 kmutex_t ccp_mtx;
111 uint32_t ccp_refcnt;
112 } corectl_path_t;
114 #ifdef _KERNEL
116 struct core_globals {
117 kmutex_t core_lock;
118 refstr_t *core_file;
119 uint32_t core_options;
120 core_content_t core_content;
121 rlim64_t core_rlimit;
122 corectl_path_t *core_default_path;
123 corectl_content_t *core_default_content;
126 extern zone_key_t core_zone_key;
128 extern void init_core(void);
129 extern void set_core_defaults(void);
131 extern core_content_t corectl_content_value(corectl_content_t *);
132 extern void corectl_content_hold(corectl_content_t *);
133 extern void corectl_content_rele(corectl_content_t *);
135 extern refstr_t *corectl_path_value(corectl_path_t *);
136 extern void corectl_path_hold(corectl_path_t *);
137 extern void corectl_path_rele(corectl_path_t *);
139 #else /* _KERNEL */
141 extern int core_set_options(int);
142 extern int core_get_options(void);
143 extern int core_set_global_path(const char *, size_t);
144 extern int core_get_global_path(char *, size_t);
145 extern int core_set_default_path(const char *, size_t);
146 extern int core_get_default_path(char *, size_t);
147 extern int core_set_process_path(const char *, size_t, pid_t);
148 extern int core_get_process_path(char *, size_t, pid_t);
149 extern int core_set_global_content(const core_content_t *);
150 extern int core_get_global_content(core_content_t *);
151 extern int core_set_default_content(const core_content_t *);
152 extern int core_get_default_content(core_content_t *);
153 extern int core_set_process_content(const core_content_t *, pid_t);
154 extern int core_get_process_content(core_content_t *, pid_t);
156 #endif /* _KERNEL */
158 #ifdef __cplusplus
160 #endif
162 #endif /* _SYS_CORECTL_H */