| OLD | NEW |
| 1 #include <unistd.h> | 1 #include <unistd.h> |
| 2 #include <sys/mman.h> | 2 #include <sys/mman.h> |
| 3 #include <errno.h> | 3 #include <errno.h> |
| 4 #include <stdint.h> | 4 #include <stdint.h> |
| 5 #include <limits.h> | 5 #include <limits.h> |
| 6 #include "syscall.h" | 6 #include "syscall.h" |
| 7 #include "libc.h" | 7 #include "libc.h" |
| 8 | 8 |
| 9 static void dummy(void) { } | 9 static void dummy(void) {} |
| 10 weak_alias(dummy, __vm_wait); | 10 weak_alias(dummy, __vm_wait); |
| 11 | 11 |
| 12 #define UNIT SYSCALL_MMAP2_UNIT | 12 #define UNIT SYSCALL_MMAP2_UNIT |
| 13 #define OFF_MASK ((-0x2000ULL << (8*sizeof(long)-1)) | (UNIT-1)) | 13 #define OFF_MASK ((-0x2000ULL << (8 * sizeof(long) - 1)) | (UNIT - 1)) |
| 14 | 14 |
| 15 void *__mmap(void *start, size_t len, int prot, int flags, int fd, off_t off) | 15 void* __mmap(void* start, size_t len, int prot, int flags, int fd, off_t off) { |
| 16 { | 16 if (off & OFF_MASK) { |
| 17 » if (off & OFF_MASK) { | 17 errno = EINVAL; |
| 18 » » errno = EINVAL; | 18 return MAP_FAILED; |
| 19 » » return MAP_FAILED; | 19 } |
| 20 » } | 20 if (len >= PTRDIFF_MAX) { |
| 21 » if (len >= PTRDIFF_MAX) { | 21 errno = ENOMEM; |
| 22 » » errno = ENOMEM; | 22 return MAP_FAILED; |
| 23 » » return MAP_FAILED; | 23 } |
| 24 » } | 24 if (flags & MAP_FIXED) { |
| 25 » if (flags & MAP_FIXED) { | 25 __vm_wait(); |
| 26 » » __vm_wait(); | 26 } |
| 27 » } | |
| 28 #ifdef SYS_mmap2 | 27 #ifdef SYS_mmap2 |
| 29 » return (void *)syscall(SYS_mmap2, start, len, prot, flags, fd, off/UNIT)
; | 28 return (void*)syscall(SYS_mmap2, start, len, prot, flags, fd, off / UNIT); |
| 30 #else | 29 #else |
| 31 » return (void *)syscall(SYS_mmap, start, len, prot, flags, fd, off); | 30 return (void*)syscall(SYS_mmap, start, len, prot, flags, fd, off); |
| 32 #endif | 31 #endif |
| 33 } | 32 } |
| 34 | 33 |
| 35 weak_alias(__mmap, mmap); | 34 weak_alias(__mmap, mmap); |
| 36 | 35 |
| 37 weak_alias(__mmap, mmap64); | 36 weak_alias(__mmap, mmap64); |
| OLD | NEW |