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 <libc.h> 019 #include <libc.h>
020 #include <stdarg.h> 020 #include <stdarg.h>
021 #include <debug.h> 021 #include <debug.h>
022 022
023 static unsigned rien[16384]; 023 static unsigned rien[16384];
024 024
025 025
026 026
027 027
028 028
029 029
030 030
031 031
032 032
033 static void assign(unsigned * addr, const unsi 033 static void assign(unsigned * addr, const unsigned val)
034 { 034 {
035 bochs_printf("[0x%x]=0x%x <- 0x%x\n", (unsig 035 bochs_printf("[0x%x]=0x%x <- 0x%x\n", (unsigned)addr, *addr, val);
036 *addr = val; 036 *addr = val;
037 bochs_printf(" ===> 0x%x\n", *addr); 037 bochs_printf(" ===> 0x%x\n", *addr);
038 } 038 }
039 039
040 040
041 int main() !! 041 int main(void)
042 { 042 {
043 int i, level; 043 int i, level;
044 044
045 bochs_printf("myprog7: Hello\n"); 045 bochs_printf("myprog7: Hello\n");
046 046
047 assign(& rien[0], 0x42); 047 assign(& rien[0], 0x42);
048 assign(& rien[1000], 0x42); 048 assign(& rien[1000], 0x42);
049 049
050 level = 0; 050 level = 0;
051 for (i = 0 ; i < 10 ; i++) 051 for (i = 0 ; i < 10 ; i++)
052 { 052 {
053 pid_t fork_status; 053 pid_t fork_status;
054 054
055 fork_status = fork(); 055 fork_status = fork();
056 if (fork_status == 0) 056 if (fork_status == 0)
057 { 057 {
058 level ++; 058 level ++;
059 bochs_printf("myprog7: I am the chil 059 bochs_printf("myprog7: I am the child %d %d\n", level, i);
060 060
061 assign(& rien[0], 0x0f<<24 | (level 061 assign(& rien[0], 0x0f<<24 | (level << 8) | i);
062 assign(& rien[1000], 0x0a<<24 | (lev 062 assign(& rien[1000], 0x0a<<24 | (level << 8) | i);
063 063
064 if ((i % 2) == 0) 064 if ((i % 2) == 0)
065 { 065 {
066 char strprog[20]; 066 char strprog[20];
067 snprintf(strprog, sizeof(strprog 067 snprintf(strprog, sizeof(strprog), "myprog%d", i/2 + 1);
068 exec(strprog); 068 exec(strprog);
069 } 069 }
070 } 070 }
071 else if (fork_status > 0) 071 else if (fork_status > 0)
072 { 072 {
073 bochs_printf("myprog7: I am the fath 073 bochs_printf("myprog7: I am the father %d %d\n", level, i);
074 074
075 assign(& rien[0], 0x8f<<24 | (level 075 assign(& rien[0], 0x8f<<24 | (level << 8) | i);
076 assign(& rien[1000], 0x8a<<24 | (lev 076 assign(& rien[1000], 0x8a<<24 | (level << 8) | i);
077 } 077 }
078 else 078 else
079 bochs_printf("myprog7: fork error %d ! 079 bochs_printf("myprog7: fork error %d !\n", fork_status);
080 } 080 }
081 081
082 bochs_printf("myprog7: The end %d %d\n", lev 082 bochs_printf("myprog7: The end %d %d\n", level, i);
083 assign(& rien[0], 0xff<<24 | (level << 8) | 083 assign(& rien[0], 0xff<<24 | (level << 8) | i);
084 assign(& rien[1000], 0xfa<<24 | (level << 8) 084 assign(& rien[1000], 0xfa<<24 | (level << 8) | i);
085 085
086 return 0; 086 return 0;
087 } 087 }