mman.h 1.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. #include <syscall.h>
  2. #include <bits/types.h>
  3. #include <bits/mman.h>
  4. inline static int mmap_error(void* ptr)
  5. {
  6. long ret = (long)ptr;
  7. if(ret >= 0)
  8. return 0;
  9. if(ret < -2048)
  10. return 0;
  11. return (int)ret;
  12. }
  13. inline static int brk_error(void* brk, void* end)
  14. {
  15. int ret;
  16. if((ret = mmap_error(brk)))
  17. return ret;
  18. if((ret = mmap_error(end)))
  19. return ret;
  20. if(end <= brk)
  21. return -EINVAL;
  22. return 0;
  23. }
  24. inline static size_t pagealign(size_t sz)
  25. {
  26. return ((sz + PAGE - 1) & ~(PAGE - 1));
  27. }
  28. inline static void* sys_brk(void* ptr)
  29. {
  30. return (void*)syscall1(NR_brk, (long)ptr);
  31. }
  32. inline static void* sys_mmap(void* addr, size_t length, int prot, int flags, int fd, size_t offset)
  33. {
  34. #ifdef NR_mmap2
  35. return (void*)syscall6(NR_mmap2, (long)addr, length, prot, flags, fd, offset);
  36. #else
  37. return (void*)syscall6(NR_mmap, (long)addr, length, prot, flags, fd, offset);
  38. #endif
  39. }
  40. inline static void* sys_mremap(void* old, size_t oldsize, size_t newsize, int flags)
  41. {
  42. return (void*)syscall4(NR_mremap, (long)old, oldsize, newsize, flags);
  43. }
  44. inline static long sys_munmap(void* ptr, unsigned long len)
  45. {
  46. return syscall2(NR_munmap, (long)ptr, len);
  47. }