Advertisement
Guest User

Untitled

a guest
Sep 15th, 2019
108
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.86 KB | None | 0 0
  1. #include "base/system.h"
  2.  
  3. uint32_t currentSize = 0;
  4. using namespace std;
  5.  
  6. void Kernel::syscall(int num, uint32_t arg0, uint32_t arg1, uint32_t arg2, uint32_t arg3)
  7. {
  8. uint32_t newSize = arg0;
  9. uint32_t heapStart = userModeHeap.base;
  10.  
  11. //om new-size(arg0) är mindre
  12. if(newSize < currentSize ) {
  13.  
  14. for (uint32_t i = heapStart + currentSize; i >= heapStart + newSize; i-=4096) {
  15. /* "ta bort pages" */
  16. freeFrame(mmu.cr3.tables[i>>22]->entries[(i>>12)&0x3ff].frame);
  17. mmu.cr3.tables[i>>22]->entries[(i>>12)&0x3ff].present = false;
  18. mmu.cr3.tables[i>>22]->entries[(i>>12)&0x3ff].frame = 0;
  19. }
  20. currentSize = newSize;
  21. }
  22. //om new-size(arg0) är större
  23. else if(newSize > currentSize) {
  24. for (uint32_t i = currentSize; i < heapStart + newSize; i+=4096) {
  25. //skapar pagetable vid pagedir
  26. if(mmu.cr3.tables[i>>22] == NULL){
  27. mmu.cr3.tables[i>>22] = new PageTable();
  28. cout << "New PageTable created" << endl;
  29. }
  30.  
  31. /* "lägg till pages" */
  32. //cout<<"A1"<<endl;
  33. mmu.cr3.tables[i>>22]->entries[(i>>12)&0x3ff].present = true;
  34. mmu.cr3.tables[i>>22]->entries[(i>>12)&0x3ff].frame = allocateFrame();
  35. //cout<<"A2"<<endl;
  36. }
  37. currentSize = newSize;
  38. }
  39.  
  40.  
  41. printf("output: syscall %d arg0=%08x arg1=%08x arg2=%08x arg3=%08x\n", num, arg0, arg1, arg2, arg3);
  42.  
  43. switch(num) {
  44. case SYS_BRK:
  45. std::cout << "Brk is not implemented" << std::endl;
  46. return;
  47. default:
  48. std::cout << "Unrecognised syscall: " << num << std::endl;
  49. return;
  50. }
  51. }
  52.  
  53.  
  54. void Kernel::pageFaultHandler(uint32_t vaddr)
  55. {
  56. printf("output: Page fault! addr=%08x\n",vaddr);
  57. throw std::string("output: Program segv");
  58. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement