@@ -192,27 +192,26 @@ void exec(const char *program_name, const char **argv) {
192192 for (uint64_t size = 0 ; size < cur -> user_program_size ; size += PAGE_SIZE ) {
193193 uint64_t virtual_addr = USER_PROGRAM_BASE + size ;
194194 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 );
197- update_page_table (cur , virtual_addr , physical_addr , 0b101 );
195+ update_page_table (cur , virtual_addr , physical_addr , PD_USER_RW );
198196 }
199197
200198 // map vc memory
201199 for (uint64_t size = 0 ; size < PERIPHERAL_END - PERIPHERAL_START ; size += PAGE_SIZE ) {
202200 uint64_t identity_page = PERIPHERAL_START + size ;
203201 // printf("identity_page=%p\n",identity_page);
204- update_page_table (cur , identity_page , identity_page , 0b101 );
202+ update_page_table (cur , identity_page , identity_page , PD_USER_RW );
205203 }
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 );
213204 uint64_t virtual_addr = USER_STACK_BASE ;
214205 uint64_t physical_addr = VA2PA (cur -> user_stack_base );
215- update_page_table (cur , virtual_addr , physical_addr , 0b110 );
206+ update_page_table (cur , virtual_addr , physical_addr , PD_USER_RW );
207+
208+ // el0_VA2PA(cur,USER_PROGRAM_BASE);
209+ // el0_VA2PA(cur,0x3f000000);
210+ // el0_VA2PA(cur,0x3f000000-1);
211+ // el0_VA2PA(cur,0x3c25e76c);
212+ // el0_VA2PA(cur,0x3c100000);
213+ // el0_VA2PA(cur,0x3c000000);
214+ // el0_VA2PA(cur,0x3c000000-1);
216215
217216 uint64_t next_pgd = (uint64_t )cur -> pgd ;
218217 switch_pgd (next_pgd );
@@ -262,11 +261,25 @@ void create_child(thread_info *parent, thread_info *child) {
262261 for (uint64_t size = 0 ; size < child -> user_program_size ; size += PAGE_SIZE ) {
263262 uint64_t virtual_addr = USER_PROGRAM_BASE + size ;
264263 uint64_t physical_addr = VA2PA (child -> user_program_base + size );
265- update_page_table (child , virtual_addr , physical_addr , 0b101 );
264+ update_page_table (child , virtual_addr , physical_addr , PD_USER_RW );
265+ }
266+
267+ for (uint64_t size = 0 ; size < PERIPHERAL_END - PERIPHERAL_START ; size += PAGE_SIZE ) {
268+ uint64_t identity_page = PERIPHERAL_START + size ;
269+ // printf("identity_page=%p\n",identity_page);
270+ update_page_table (child , identity_page , identity_page , PD_USER_RW );
266271 }
267272 uint64_t virtual_addr = USER_STACK_BASE ;
268273 uint64_t physical_addr = VA2PA (child -> user_stack_base );
269- update_page_table (child , virtual_addr , physical_addr , 0b110 );
274+ update_page_table (child , virtual_addr , physical_addr , PD_USER_RW );
275+
276+ // el0_VA2PA(child,USER_PROGRAM_BASE);
277+ // el0_VA2PA(child,0x3f000000);
278+ // el0_VA2PA(child,0x3f000000-1);
279+ // el0_VA2PA(child,0x3c25e76c);
280+ // el0_VA2PA(child,0x3c100000);
281+ // el0_VA2PA(child,0x3c000000);
282+ // el0_VA2PA(child,0x3c000000-1);
270283
271284 char * src , * dst ;
272285 // copy saved context in thread info
0 commit comments