stdlib.cpp 872 B

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. #include "stdlib.h"
  2. #include "mman.h"
  3. #include "stdio.h"
  4. #include <Kernel/Syscall.h>
  5. #include <AK/Assertions.h>
  6. extern "C" {
  7. void* malloc(size_t size)
  8. {
  9. if (size > 4096) {
  10. volatile char* crashme = (char*)0xc007d00d;
  11. *crashme = 0;
  12. }
  13. void* ptr = mmap(nullptr, 4096);
  14. if (ptr) {
  15. int rc = set_mmap_name(ptr, 4096, "malloc");
  16. if (rc < 0) {
  17. perror("set_mmap_name failed");
  18. }
  19. }
  20. return ptr;
  21. }
  22. void free(void* ptr)
  23. {
  24. if (!ptr)
  25. return;
  26. munmap(ptr, 4096);
  27. }
  28. void* calloc(size_t nmemb, size_t)
  29. {
  30. ASSERT_NOT_REACHED();
  31. return nullptr;
  32. }
  33. void* realloc(void *ptr, size_t)
  34. {
  35. ASSERT_NOT_REACHED();
  36. return nullptr;
  37. }
  38. void exit(int status)
  39. {
  40. Syscall::invoke(Syscall::PosixExit, (dword)status);
  41. }
  42. void abort()
  43. {
  44. // FIXME: Implement proper abort().
  45. exit(253);
  46. }
  47. }