1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
|
/* Definitions for POSIX memory map interface. OpenSolaris version.
Copyright (C) 1997, 2000, 2003, 2005, 2006, 2008
Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
The GNU C Library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with the GNU C Library; if not, write to the Free
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
02111-1307 USA. */
#ifndef _SYS_MMAN_H
# error "Never use <bits/mman.h> directly; include <sys/mman.h> instead."
#endif
/* Protections are chosen from these bits, OR'd together. The
implementation does not necessarily support PROT_EXEC or PROT_WRITE
without PROT_READ. The only guarantees are that no writing will be
allowed without PROT_WRITE and no access will be allowed for PROT_NONE. */
#define PROT_READ 0x1 /* Page can be read. */
#define PROT_WRITE 0x2 /* Page can be written. */
#define PROT_EXEC 0x4 /* Page can be executed. */
#define PROT_NONE 0x0 /* Page can not be accessed. */
/* Sharing types (must choose one and only one of these). */
#define MAP_SHARED 0x01 /* Share changes. */
#define MAP_PRIVATE 0x02 /* Changes are private. */
#ifdef __USE_MISC
# define MAP_TYPE 0x0f /* Mask for type of mapping. */
#endif
/* Other flags. */
#define MAP_FIXED 0x10 /* Interpret addr exactly. */
#ifdef __USE_MISC
# define MAP_FILE 0
# define MAP_ANONYMOUS 0x100 /* Don't use a file. */
# define MAP_ANON MAP_ANONYMOUS
#endif
/* These are OpenSolaris-specific. */
#ifdef __USE_MISC
# define MAP_NORESERVE 0x40 /* Don't check for reservations. */
# define MAP_ALIGN 0x200 /* Address specifies alignment. */
# define MAP_TEXT 0x200 /* Map code segment. */
# define MAP_INITDATA 0x800 /* Map data segment. */
# define MAP_RENAME 0x20 /* Rename private pages to file. */
# define _MAP_NEW 0x80000000 /* Never use this. */
#endif
/* Flags to `msync'. */
#define MS_ASYNC 1 /* Sync memory asynchronously. */
#define MS_SYNC 4 /* Synchronous memory sync. */
#define MS_INVALIDATE 2 /* Invalidate the caches. */
/* These are OpenSolaris-specific. */
#ifdef __USE_MISC
/* mctl functions */
# define MC_SYNC 1
# define MC_LOCK 2
# define MC_UNLOCK 3
# define MC_ADVISE 4
# define MC_LOCKAS 5
# define MC_UNLOCKAS 6
# define MC_HAT_ADVISE 7
/* MC_HAT_ADVISE arg */
# define MHA_MAPSIZE_VA 0x1
# define MHA_MAPSIZE_BSSBRK 0x2
# define MHA_MAPSIZE_STACK 0x3
# include <sys/types.h>
# define MISYS_MEMINFO 0x0
typedef struct meminfo
{
const uint64_t *mi_inaddr;
const unsigned int *mi_info_req;
uint64_t *mi_outdata;
unsigned int *mi_validity;
int mi_info_count;
} meminfo_t;
/* info_req field */
# define MEMINFO_SHIFT 16
# define MEMINFO_MASK (0xFF << MEMINFO_SHIFT)
# define MEMINFO_VPHYSICAL (0x01 << MEMINFO_SHIFT)
# define MEMINFO_VLGRP (0x02 << MEMINFO_SHIFT)
# define MEMINFO_VPAGESIZE (0x03 << MEMINFO_SHIFT)
# define MEMINFO_VREPLCNT (0x04 << MEMINFO_SHIFT)
# define MEMINFO_VREPL (0x05 << MEMINFO_SHIFT)
# define MEMINFO_VREPL_LGRP (0x06 << MEMINFO_SHIFT)
# define MEMINFO_PLGRP (0x07 << MEMINFO_SHIFT)
/* max address count for meminfo */
# define MAX_MEMINFO_CNT 256
/* max request types */
# define MAX_MEMINFO_REQ 31
#endif /* __USE_MISC */
/* Flags for `mlockall'. */
#define MCL_CURRENT 1 /* Lock all currently mapped pages. */
#define MCL_FUTURE 2 /* Lock all additions to address
space. */
/* Flags for `mremap'. */
#ifdef __USE_GNU
# define MREMAP_MAYMOVE 1
# define MREMAP_FIXED 2
#endif
/* Advice to `madvise'. */
#ifdef __USE_MISC
# define MADV_NORMAL 0 /* No further special treatment. */
# define MADV_RANDOM 1 /* Expect random page references. */
# define MADV_SEQUENTIAL 2 /* Expect sequential page references. */
# define MADV_WILLNEED 3 /* Will need these pages. */
# define MADV_DONTNEED 4 /* Don't need these pages. */
# define MADV_REMOVE 9 /* Remove these pages and resources. */
# define MADV_DONTFORK 10 /* Do not inherit across fork. */
# define MADV_DOFORK 11 /* Do inherit across fork. */
#endif
/* These are OpenSolaris-specific. */
#ifdef __USE_MISC
# define MADV_FREE 5
# define MADV_ACCESS_DEFAULT 6
# define MADV_ACCESS_LWP 7
# define MADV_ACCESS_MANY 8
#endif
/* The POSIX people had to invent similar names for the same things. */
#ifdef __USE_XOPEN2K
# define POSIX_MADV_NORMAL 0 /* No further special treatment. */
# define POSIX_MADV_RANDOM 1 /* Expect random page references. */
# define POSIX_MADV_SEQUENTIAL 2 /* Expect sequential page references. */
# define POSIX_MADV_WILLNEED 3 /* Will need these pages. */
# define POSIX_MADV_DONTNEED 4 /* Don't need these pages. */
#endif
#ifdef __USE_MISC
# define PROC_TEXT (PROT_EXEC | PROT_READ)
# define PROC_DATA (PROT_READ | PROT_WRITE | PROT_EXEC)
/* GNU lbc (and probably others) use SHARED internally. */
# ifndef _GNU_SOURCE
# define SHARED 0x10
# define PRIVATE 0x20
# endif
# define VALID_ATTR (PROT_READ | PROT_WRITE | PROT_EXEC | SHARED | PRIVATE)
#endif
struct memcntl_mha
{
unsigned int mha_cmd;
unsigned int mha_flags;
size_t mha_pagesize;
};
__BEGIN_DECLS
#if defined __USE_MISC
extern int getpagesizes (size_t *__pagesize, int __nelem);
extern int getpagesizes2 (size_t *__pagesize, int __nelem);
extern int meminfo (const uint64_t *__inaddr, int,
const unsigned int *__addr_count, int __info_req, uint64_t *__info_count,
unsigned int *__outdata);
extern int memcntl (__caddr_t addr, size_t len, int cmd, __caddr_t arg,
int attr, int mask);
#endif
__END_DECLS
|