Diff markup
001 001
002 002
003 003
004 004
005 005
006 006
007 007
008 008
009 009
010 010
011 011
012 012
013 013
014 014
015 015
016 016
017 017
018 018
019 #include <crt.h> 019 #include <crt.h>
020 #include <libc.h> 020 #include <libc.h>
021 #include <stdarg.h> 021 #include <stdarg.h>
022 #include <debug.h> 022 #include <debug.h>
023 023
024 024
025 025
026 026
027 027
028 028
029 029
030 030
031 031
032 032
033 033
034 034
035 int main() 035 int main()
036 { 036 {
037 void * moved; 037 void * moved;
038 char * zoup; 038 char * zoup;
039 039
040 zoup = fakemmap((void*)4096, 8*1024*1024, !! 040 zoup = mmap((void*)4096, 8*1024*1024,
041 PROT_READ | PROT_WRITE, !! 041 PROT_READ | PROT_WRITE,
042 MAP_SHARED, !! 042 MAP_SHARED,
043 "/dev/zero", 34); !! 043 "/dev/zero", 34);
044 bochs_printf("mapped @%x\n", (unsigned)zoup) 044 bochs_printf("mapped @%x\n", (unsigned)zoup);
045 045
046 046
047 fork(); 047 fork();
048 fork(); 048 fork();
049 049
050 050
051 051
052 _sos_syscall1(4004, (unsigned)"Initial"); 052 _sos_syscall1(4004, (unsigned)"Initial");
053 mprotect(zoup, 10*4096, PROT_READ); 053 mprotect(zoup, 10*4096, PROT_READ);
054 zoup += 10*4096; 054 zoup += 10*4096;
055 _sos_syscall1(4004, (unsigned)"After mprotec 055 _sos_syscall1(4004, (unsigned)"After mprotect Low");
056 056
057 mprotect(zoup-4096, 2*4096, PROT_READ); 057 mprotect(zoup-4096, 2*4096, PROT_READ);
058 zoup += 4096; 058 zoup += 4096;
059 _sos_syscall1(4004, (unsigned)"After mprotec 059 _sos_syscall1(4004, (unsigned)"After mprotect Before Low");
060 060
061 mprotect(zoup-4096, 4096, PROT_READ); 061 mprotect(zoup-4096, 4096, PROT_READ);
062 _sos_syscall1(4004, (unsigned)"After mprotec 062 _sos_syscall1(4004, (unsigned)"After mprotect Before low (bis)");
063 063
064 mprotect(zoup + 1024*1024, 4096, PROT_READ); 064 mprotect(zoup + 1024*1024, 4096, PROT_READ);
065 _sos_syscall1(4004, (unsigned)"After mprotec 065 _sos_syscall1(4004, (unsigned)"After mprotect Middle");
066 066
067 mprotect(zoup + 1024*1024, 4096, PROT_READ); 067 mprotect(zoup + 1024*1024, 4096, PROT_READ);
068 _sos_syscall1(4004, (unsigned)"After mprotec 068 _sos_syscall1(4004, (unsigned)"After mprotect Middle (bis)");
069 069
070 mprotect(zoup + 8*1024*1024 - 11*4096 - 4096 070 mprotect(zoup + 8*1024*1024 - 11*4096 - 4096, 4096, PROT_READ);
071 _sos_syscall1(4004, (unsigned)"After mprotec 071 _sos_syscall1(4004, (unsigned)"After mprotect High");
072 072
073 mprotect(zoup + 8*1024*1024 - 11*4096 - 2*40 073 mprotect(zoup + 8*1024*1024 - 11*4096 - 2*4096, 3*4096, PROT_READ);
074 _sos_syscall1(4004, (unsigned)"After mprotec 074 _sos_syscall1(4004, (unsigned)"After mprotect Past High");
075 075
076 mprotect((void*)0x40000000, 0x10000000, PROT 076 mprotect((void*)0x40000000, 0x10000000, PROT_READ);
077 _sos_syscall1(4004, (unsigned)"After mprotec 077 _sos_syscall1(4004, (unsigned)"After mprotect Complete VR");
078 078
079 mprotect((void*)0x40000000, 0x10000000, PROT 079 mprotect((void*)0x40000000, 0x10000000, PROT_READ);
080 _sos_syscall1(4004, (unsigned)"After mprotec 080 _sos_syscall1(4004, (unsigned)"After mprotect Complete VR (bis)");
081 081
082 082
083 moved = zoup + 8*1024*1024 - 11*4096 - 10*40 083 moved = zoup + 8*1024*1024 - 11*4096 - 10*4096;
084 _sos_mresize(zoup + 8*1024*1024 - 11*4096 - 084 _sos_mresize(zoup + 8*1024*1024 - 11*4096 - 2*4096, 3*4096,
085 & moved, 40*4096, 0); 085 & moved, 40*4096, 0);
086 _sos_syscall1(4004, (unsigned)"After mremap 086 _sos_syscall1(4004, (unsigned)"After mremap (not allowed)");
087 bochs_printf("moved=%x\n", (unsigned)moved); 087 bochs_printf("moved=%x\n", (unsigned)moved);
088 088
089 _sos_mresize(zoup + 8*1024*1024 - 11*4096 - 089 _sos_mresize(zoup + 8*1024*1024 - 11*4096 - 2*4096, 4096,
090 & moved, 40*4096, 0); 090 & moved, 40*4096, 0);
091 _sos_syscall1(4004, (unsigned)"After mremap 091 _sos_syscall1(4004, (unsigned)"After mremap (not allowed - bis)");
092 bochs_printf("moved=%x\n", (unsigned)moved); 092 bochs_printf("moved=%x\n", (unsigned)moved);
093 093
094 _sos_mresize(zoup + 8*1024*1024 - 11*4096 - 094 _sos_mresize(zoup + 8*1024*1024 - 11*4096 - 2*4096, 4096,
095 & moved, 40*4096, MREMAP_MAYMOV 095 & moved, 40*4096, MREMAP_MAYMOVE);
096 _sos_syscall1(4004, (unsigned)"After mremap 096 _sos_syscall1(4004, (unsigned)"After mremap (DO move)");
097 bochs_printf("moved=%x\n", (unsigned)moved); 097 bochs_printf("moved=%x\n", (unsigned)moved);
098 098
099 _sos_mresize(moved, 4096, 099 _sos_mresize(moved, 4096,
100 & moved, 100*4096, MREMAP_MAYMO 100 & moved, 100*4096, MREMAP_MAYMOVE);
101 _sos_syscall1(4004, (unsigned)"After mremap 101 _sos_syscall1(4004, (unsigned)"After mremap (DO move)");
102 bochs_printf("moved=%x\n", (unsigned)moved); 102 bochs_printf("moved=%x\n", (unsigned)moved);
103 103
104 return 0; 104 return 0;
105 } 105 }