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 int fd; <<
040 039
041 fd = open("/dev/zero", O_RDWR); <<
042 zoup = mmap((void*)4096, 8*1024*1024, 040 zoup = mmap((void*)4096, 8*1024*1024,
043 PROT_READ | PROT_WRITE, 041 PROT_READ | PROT_WRITE,
044 MAP_SHARED, 042 MAP_SHARED,
045 fd, 34); !! 043 "/dev/zero", 34);
046 close(fd); <<
047 <<
048 bochs_printf("mapped @%x\n", (unsigned)zoup) 044 bochs_printf("mapped @%x\n", (unsigned)zoup);
049 045
050 046
051 fork(); 047 fork();
052 fork(); 048 fork();
053 049
054 050
055 051
056 _sos_syscall1(4004, (unsigned)"Initial"); 052 _sos_syscall1(4004, (unsigned)"Initial");
057 mprotect(zoup, 10*4096, PROT_READ); 053 mprotect(zoup, 10*4096, PROT_READ);
058 zoup += 10*4096; 054 zoup += 10*4096;
059 _sos_syscall1(4004, (unsigned)"After mprotec 055 _sos_syscall1(4004, (unsigned)"After mprotect Low");
060 056
061 mprotect(zoup-4096, 2*4096, PROT_READ); 057 mprotect(zoup-4096, 2*4096, PROT_READ);
062 zoup += 4096; 058 zoup += 4096;
063 _sos_syscall1(4004, (unsigned)"After mprotec 059 _sos_syscall1(4004, (unsigned)"After mprotect Before Low");
064 060
065 mprotect(zoup-4096, 4096, PROT_READ); 061 mprotect(zoup-4096, 4096, PROT_READ);
066 _sos_syscall1(4004, (unsigned)"After mprotec 062 _sos_syscall1(4004, (unsigned)"After mprotect Before low (bis)");
067 063
068 mprotect(zoup + 1024*1024, 4096, PROT_READ); 064 mprotect(zoup + 1024*1024, 4096, PROT_READ);
069 _sos_syscall1(4004, (unsigned)"After mprotec 065 _sos_syscall1(4004, (unsigned)"After mprotect Middle");
070 066
071 mprotect(zoup + 1024*1024, 4096, PROT_READ); 067 mprotect(zoup + 1024*1024, 4096, PROT_READ);
072 _sos_syscall1(4004, (unsigned)"After mprotec 068 _sos_syscall1(4004, (unsigned)"After mprotect Middle (bis)");
073 069
074 mprotect(zoup + 8*1024*1024 - 11*4096 - 4096 070 mprotect(zoup + 8*1024*1024 - 11*4096 - 4096, 4096, PROT_READ);
075 _sos_syscall1(4004, (unsigned)"After mprotec 071 _sos_syscall1(4004, (unsigned)"After mprotect High");
076 072
077 mprotect(zoup + 8*1024*1024 - 11*4096 - 2*40 073 mprotect(zoup + 8*1024*1024 - 11*4096 - 2*4096, 3*4096, PROT_READ);
078 _sos_syscall1(4004, (unsigned)"After mprotec 074 _sos_syscall1(4004, (unsigned)"After mprotect Past High");
079 075
080 mprotect((void*)0x40000000, 0x10000000, PROT 076 mprotect((void*)0x40000000, 0x10000000, PROT_READ);
081 _sos_syscall1(4004, (unsigned)"After mprotec 077 _sos_syscall1(4004, (unsigned)"After mprotect Complete VR");
082 078
083 mprotect((void*)0x40000000, 0x10000000, PROT 079 mprotect((void*)0x40000000, 0x10000000, PROT_READ);
084 _sos_syscall1(4004, (unsigned)"After mprotec 080 _sos_syscall1(4004, (unsigned)"After mprotect Complete VR (bis)");
085 081
086 082
087 moved = zoup + 8*1024*1024 - 11*4096 - 10*40 083 moved = zoup + 8*1024*1024 - 11*4096 - 10*4096;
088 _sos_mresize(zoup + 8*1024*1024 - 11*4096 - 084 _sos_mresize(zoup + 8*1024*1024 - 11*4096 - 2*4096, 3*4096,
089 & moved, 40*4096, 0); 085 & moved, 40*4096, 0);
090 _sos_syscall1(4004, (unsigned)"After mremap 086 _sos_syscall1(4004, (unsigned)"After mremap (not allowed)");
091 bochs_printf("moved=%x\n", (unsigned)moved); 087 bochs_printf("moved=%x\n", (unsigned)moved);
092 088
093 _sos_mresize(zoup + 8*1024*1024 - 11*4096 - 089 _sos_mresize(zoup + 8*1024*1024 - 11*4096 - 2*4096, 4096,
094 & moved, 40*4096, 0); 090 & moved, 40*4096, 0);
095 _sos_syscall1(4004, (unsigned)"After mremap 091 _sos_syscall1(4004, (unsigned)"After mremap (not allowed - bis)");
096 bochs_printf("moved=%x\n", (unsigned)moved); 092 bochs_printf("moved=%x\n", (unsigned)moved);
097 093
098 _sos_mresize(zoup + 8*1024*1024 - 11*4096 - 094 _sos_mresize(zoup + 8*1024*1024 - 11*4096 - 2*4096, 4096,
099 & moved, 40*4096, MREMAP_MAYMOV 095 & moved, 40*4096, MREMAP_MAYMOVE);
100 _sos_syscall1(4004, (unsigned)"After mremap 096 _sos_syscall1(4004, (unsigned)"After mremap (DO move)");
101 bochs_printf("moved=%x\n", (unsigned)moved); 097 bochs_printf("moved=%x\n", (unsigned)moved);
102 098
103 _sos_mresize(moved, 4096, 099 _sos_mresize(moved, 4096,
104 & moved, 100*4096, MREMAP_MAYMO 100 & moved, 100*4096, MREMAP_MAYMOVE);
105 _sos_syscall1(4004, (unsigned)"After mremap 101 _sos_syscall1(4004, (unsigned)"After mremap (DO move)");
106 bochs_printf("moved=%x\n", (unsigned)moved); 102 bochs_printf("moved=%x\n", (unsigned)moved);
107 103
108 return 0; 104 return 0;
109 } 105 }