summaryrefslogtreecommitdiff
path: root/sysdeps/unix/sysv/solaris2/kopensolaris-gnu/bits/mman.h
blob: 529aa4f18e02c1dcab63958e23ecd696a191dd76 (plain)
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