ViewVC Help
View File | Revision Log | Show Annotations | Revision Graph | Root Listing
root/cebix/BasiliskII/src/Unix/vm_alloc.h
Revision: 1.7
Committed: 2004-11-08T21:07:07Z (20 years ago) by gbeauche
Content type: text/plain
Branch: MAIN
Changes since 1.6: +1 -0 lines
Log Message:
Enable 33-bit memory addressing on 64-bit JIT capable platforms (e.g. x86-64).
This is useful to get rid of address offset sign extensions. It uses POSIX
shared memory to create aliased regions, fallback to usual sign-extension
way if shm_open et al. don't work (e.g. no /dev/shm mounted)

File Contents

# User Rev Content
1 gbeauche 1.1 /*
2     * vm_alloc.h - Wrapper to various virtual memory allocation schemes
3     * (supports mmap, vm_allocate or fallbacks to malloc)
4     *
5 cebix 1.6 * Basilisk II (C) 1997-2004 Christian Bauer
6 gbeauche 1.1 *
7     * This program is free software; you can redistribute it and/or modify
8     * it under the terms of the GNU General Public License as published by
9     * the Free Software Foundation; either version 2 of the License, or
10     * (at your option) any later version.
11     *
12     * This program is distributed in the hope that it will be useful,
13     * but WITHOUT ANY WARRANTY; without even the implied warranty of
14     * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15     * GNU General Public License for more details.
16     *
17     * You should have received a copy of the GNU General Public License
18     * along with this program; if not, write to the Free Software
19     * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
20     */
21    
22     // TODO: Win32 VM ?
23     #ifndef VM_ALLOC_H
24     #define VM_ALLOC_H
25    
26     #ifdef HAVE_UNISTD_H
27     #include <unistd.h>
28 gbeauche 1.3 #include <sys/types.h>
29 gbeauche 1.1 #endif
30     #ifdef HAVE_SYS_MMAN_H
31     #include <sys/mman.h>
32     #endif
33 gbeauche 1.4 #ifdef HAVE_MACH_VM
34     extern "C" {
35     #include <mach/mach.h>
36     }
37     #endif
38 gbeauche 1.1
39     /* Return value of `vm_acquire' in case of an error. */
40     #ifdef HAVE_MACH_VM
41     #define VM_MAP_FAILED ((void *)-1)
42     #else
43     #ifdef HAVE_MMAP_VM
44     #define VM_MAP_FAILED ((void *)-1)
45     #else
46     #define VM_MAP_FAILED 0
47     #endif
48     #endif
49    
50 gbeauche 1.5 /* Mapping options. */
51     #define VM_MAP_SHARED 0x01
52     #define VM_MAP_PRIVATE 0x02
53     #define VM_MAP_FIXED 0x04
54     #define VM_MAP_32BIT 0x08
55 gbeauche 1.7 #define VM_MAP_33BIT 0x10
56 gbeauche 1.5
57     /* Default mapping options. */
58     #define VM_MAP_DEFAULT (VM_MAP_PRIVATE)
59    
60 gbeauche 1.1 /* Protection bits. */
61     #ifdef HAVE_MACH_VM
62     #define VM_PAGE_NOACCESS VM_PROT_NONE
63     #define VM_PAGE_READ VM_PROT_READ
64     #define VM_PAGE_WRITE VM_PROT_WRITE
65     #define VM_PAGE_EXECUTE VM_PROT_EXECUTE
66     #else
67     #ifdef HAVE_MMAP_VM
68     #define VM_PAGE_NOACCESS PROT_NONE
69     #define VM_PAGE_READ PROT_READ
70     #define VM_PAGE_WRITE PROT_WRITE
71     #define VM_PAGE_EXECUTE PROT_EXEC
72     #else
73     #define VM_PAGE_NOACCESS 0x0
74     #define VM_PAGE_READ 0x1
75     #define VM_PAGE_WRITE 0x2
76     #define VM_PAGE_EXECUTE 0x4
77     #endif
78     #endif
79    
80     /* Default protection bits. */
81     #define VM_PAGE_DEFAULT (VM_PAGE_READ | VM_PAGE_WRITE)
82    
83     /* Initialize the VM system. Returns 0 if successful, -1 for errors. */
84    
85     extern int vm_init(void);
86    
87     /* Deallocate all internal data used to wrap virtual memory allocators. */
88    
89     extern void vm_exit(void);
90    
91     /* Allocate zero-filled memory of SIZE bytes. The mapping is private
92     and default protection bits are read / write. The return value
93     is the actual mapping address chosen or VM_MAP_FAILED for errors. */
94    
95 gbeauche 1.5 extern void * vm_acquire(size_t size, int options = VM_MAP_DEFAULT);
96 gbeauche 1.1
97     /* Allocate zero-filled memory at exactly ADDR (which must be page-aligned).
98     Returns 0 if successful, -1 on errors. */
99    
100 gbeauche 1.5 extern int vm_acquire_fixed(void * addr, size_t size, int options = VM_MAP_DEFAULT);
101 gbeauche 1.1
102     /* Deallocate any mapping for the region starting at ADDR and extending
103     LEN bytes. Returns 0 if successful, -1 on errors. */
104    
105     extern int vm_release(void * addr, size_t size);
106    
107     /* Change the memory protection of the region starting at ADDR and
108     extending LEN bytes to PROT. Returns 0 if successful, -1 for errors. */
109    
110     extern int vm_protect(void * addr, size_t size, int prot);
111    
112     #endif /* VM_ALLOC_H */