@@ -19,7 +19,7 @@ void foo() {
1919
2020void user_test1 () {
2121 const char * argv [] = {"argv_test" , "-o" , "arg2" , 0 };
22- exec ("my_test " , argv );
22+ exec ("mailbox_test " , argv );
2323}
2424
2525void user_test2 () {
@@ -41,11 +41,10 @@ void user_test5() {
4141 exec ("vm.img" , argv );
4242}
4343
44- void thread_test1 () { // thread test
44+ void thread_test1 () { // mailbox test
4545 thread_info * idle_t = thread_create (0 );
4646 asm volatile ("msr tpidr_el1, %0\n" ::"r" ((uint64_t )idle_t ));
4747 thread_create (user_test1 );
48- thread_create (user_test2 );
4948 idle ();
5049}
5150
@@ -143,7 +142,7 @@ void idle() {
143142}
144143
145144void exit () {
146- printf ("[exit]\n" );
145+ // printf("[exit]\n");
147146 thread_info * cur = get_current ();
148147 // thread_free_page(cur);
149148 cur -> status = THREAD_DEAD ;
@@ -177,22 +176,24 @@ void kill_zombies() {
177176}
178177
179178void exec (const char * program_name , const char * * argv ) {
180- printf ("[exec]\n" );
179+ // printf("[exec]\n");
181180 thread_info * cur = get_current ();
182181 if (cur -> user_program_base == 0 ) {
183182 cur -> user_program_base = thread_allocate_page (cur , USER_PROGRAM_SIZE );
184183 cur -> user_stack_base = thread_allocate_page (cur , STACK_SIZE );
185184 init_page_table (cur , & (cur -> pgd ));
186185 }
187- printf ("cur_pgd: 0x%p\n" , (uint64_t )(cur -> pgd ));
188- printf ("user program base: 0x%p\n" , cur -> user_program_base );
189- printf ("user stack base: 0x%p\n" , cur -> user_stack_base );
186+ // printf("cur_pgd: 0x%p\n", (uint64_t)(cur->pgd));
187+ // printf("user program base: 0x%p\n", cur->user_program_base);
188+ // printf("user stack base: 0x%p\n", cur->user_stack_base);
190189
191190 cur -> user_program_size =
192191 cpio_load_user_program (program_name , cur -> user_program_base );
193192 for (uint64_t size = 0 ; size < cur -> user_program_size ; size += PAGE_SIZE ) {
194193 uint64_t virtual_addr = USER_PROGRAM_BASE + size ;
195194 uint64_t physical_addr = VA2PA (cur -> user_program_base + size );
195+ if (size == 0 )
196+ printf ("[first_map]va:%p map to pa:%p\n" ,virtual_addr ,physical_addr );
196197 update_page_table (cur , virtual_addr , physical_addr , 0b101 );
197198 }
198199
@@ -202,7 +203,13 @@ void exec(const char *program_name, const char **argv) {
202203 // printf("identity_page=%p\n",identity_page);
203204 update_page_table (cur , identity_page , identity_page , 0b101 );
204205 }
205-
206+ el0_VA2PA (cur ,USER_PROGRAM_BASE );
207+ el0_VA2PA (cur ,0x3f000000 );
208+ el0_VA2PA (cur ,0x3f000000 - 1 );
209+ el0_VA2PA (cur ,0x3c25e76c );
210+ el0_VA2PA (cur ,0x3c100000 );
211+ el0_VA2PA (cur ,0x3c000000 );
212+ el0_VA2PA (cur ,0x3c000000 - 1 );
206213 uint64_t virtual_addr = USER_STACK_BASE ;
207214 uint64_t physical_addr = VA2PA (cur -> user_stack_base );
208215 update_page_table (cur , virtual_addr , physical_addr , 0b110 );
0 commit comments