Changeset 3594 for trunk/kStuff/kHlp/Generic/kHlpPage.c
- Timestamp:
- Oct 2, 2007, 11:35:22 PM (18 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/kStuff/kHlp/Generic/kHlpPage.c
r3575 r3594 31 31 #include <k/kHlpAssert.h> 32 32 33 #if K_OS == K_OS_OS2 33 #if K_OS == K_OS_DARWIN 34 # include <sys/syscall.h> 35 # include <sys/mman.h> 36 extern void *kHlpSys_mmap(void *addr, size_t len, int prot, int flags, int fildes, off_t off); 37 extern int kHlpSys_mprotect(void *addr, size_t len, int prot); 38 extern int kHlpSys_munmap(void *addr, size_t len); 39 40 #elif K_OS == K_OS_OS2 34 41 # define INCL_BASE 35 42 # define INCL_ERRORS 36 43 # include <os2.h> 44 37 45 #elif K_OS == K_OS_WINDOWS 38 46 # include <Windows.h> 47 39 48 #else 40 49 # error "port me" … … 45 54 * Global Variables * 46 55 *******************************************************************************/ 47 #if K_OS == K_OS_OS2 56 #if K_OS == K_OS_DARWIN \ 57 || K_OS == K_OS_FREEBSD \ 58 || K_OS == K_OS_LINUX \ 59 || K_OS == K_OS_NETBSD \ 60 || K_OS == K_OS_OPENBSD \ 61 || K_OS == K_OS_SOLARIS 62 /* nothing */ 63 #elif K_OS == K_OS_OS2 48 64 /** The base of the loader stub object. <kLdr Hack> 49 65 * The OS/2 exe stub consists of a single data object. When allocating memory … … 62 78 63 79 64 #if K_OS == K_OS_OS2 80 #if K_OS == K_OS_DARWIN \ 81 || K_OS == K_OS_FREEBSD \ 82 || K_OS == K_OS_LINUX \ 83 || K_OS == K_OS_NETBSD \ 84 || K_OS == K_OS_OPENBSD \ 85 || K_OS == K_OS_SOLARIS 86 static int kHlpPageProtToNative(KPROT enmProt) 87 { 88 switch (enmProt) 89 { 90 case KPROT_NOACCESS: return PROT_NONE; 91 case KPROT_READONLY: return PROT_READ; 92 case KPROT_READWRITE: return PROT_READ | PROT_WRITE; 93 case KPROT_EXECUTE: return PROT_EXEC; 94 case KPROT_EXECUTE_READ: return PROT_EXEC | PROT_READ; 95 case KPROT_EXECUTE_READWRITE: return PROT_EXEC | PROT_READ | PROT_WRITE; 96 default: 97 kHlpAssert(0); 98 return ~0U; 99 } 100 } 101 102 #elif K_OS == K_OS_OS2 65 103 static ULONG kHlpPageProtToNative(KPROT enmProt) 66 104 { … … 97 135 98 136 137 99 138 /** 100 139 * Allocate a chunk of memory with page granularity. … … 108 147 KHLP_DECL(int) kHlpPageAlloc(void **ppv, KSIZE cb, KPROT enmProt, KBOOL fFixed) 109 148 { 110 #if K_OS == K_OS_OS2 149 #if K_OS == K_OS_DARWIN 150 void *pv; 151 152 pv = kHlpSys_mmap(fFixed ? *ppv : NULL, cb, kHlpPageProtToNative(enmProt), 153 fFixed ? MAP_FIXED | MAP_ANON: MAP_ANON, -1, 0); 154 if ((KIPTR)pv < 256) 155 { 156 kHlpAssert(0); 157 return (int)(KIPTR)pv; /** @todo convert errno to kErrors */ 158 } 159 *ppv = pv; 160 return 0; 161 162 #elif K_OS == K_OS_OS2 111 163 APIRET rc; 112 ULONG fFlags = kHlpPageProtToNative(enmProt); ;164 ULONG fFlags = kHlpPageProtToNative(enmProt); 113 165 114 166 if (!fFixed) … … 163 215 KHLP_DECL(int) kHlpPageProtect(void *pv, KSIZE cb, KPROT enmProt) 164 216 { 165 #if K_OS == K_OS_OS2 217 #if K_OS == K_OS_DARWIN 218 int rc; 219 220 rc = kHlpSys_mprotect(pv, cb, kHlpPageProtToNative(enmProt)); 221 if (!rc) 222 return 0; 223 /** @todo convert errno -> kErrors */ 224 kHlpAssert(0); 225 return rc; 226 227 #elif K_OS == K_OS_OS2 166 228 APIRET rc; 167 ULONG fFlags = kHlpPageProtToNative(enmProt); ;229 ULONG fFlags = kHlpPageProtToNative(enmProt); 168 230 169 231 /* … … 216 278 KHLP_DECL(int) kHlpPageFree(void *pv, KSIZE cb) 217 279 { 218 #if K_OS == K_OS_OS2 280 #if K_OS == K_OS_DARWIN 281 int rc; 282 283 rc = kHlpSys_munmap(pv, cb); 284 if (!rc) 285 return 0; 286 /** @todo convert errno -> kErrors */ 287 return rc; 288 289 #elif K_OS == K_OS_OS2 219 290 APIRET rc; 220 291
Note:
See TracChangeset
for help on using the changeset viewer.