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