 040362e379
			
		
	
	
		040362e379
		
	
	
	
	
		
			
			. make exec() callers (i.e. vfs and rs) determine the memory layout by explicitly reserving regions using mmap() calls on behalf of the exec()ing process, i.e. handling all of the exec logic, thereby eliminating all special exec() knowledge from VM. . the new procedure is: clear the exec()ing process first, then call third-party mmap()s to reserve memory, then copy the executable file section contents in, all using callbacks tailored to the caller's way of starting an executable . i.e. no more explicit EXEC_NEWMEM-style calls in PM or VM as with rigid 2-section arguments . this naturally allows generalizing exec() by simply loading all ELF sections . drop/merge of lots of duplicate exec() code into libexec . not copying the code sections to vfs and into the executable again is a measurable performance improvement (about 3.3% faster for 'make' in src/servers/)
		
			
				
	
	
		
			57 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			57 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| /* The following names are synonyms for the variables in the input message. */
 | |
| #define exec_name	m1_p1
 | |
| #define exec_len	m1_i1
 | |
| #define func		m6_f1
 | |
| #define grp_id		m1_i1
 | |
| #define grp_no		m1_i1
 | |
| #define groupsp		m1_p1
 | |
| #define namelen		m1_i2
 | |
| #define pid		m1_i1
 | |
| #define seconds		m1_i1
 | |
| #define which_timer	m1_i1
 | |
| #define new_val		m1_p1
 | |
| #define old_val		m1_p2
 | |
| #define sig		m6_i1
 | |
| #define msg_frame_len	m1_i2
 | |
| #define frame_ptr	m1_p2
 | |
| #define status		m1_i1
 | |
| #define usr_id		m1_i1
 | |
| #define request		m2_i2
 | |
| #define data		m2_l2
 | |
| #define sig_nr		m1_i2
 | |
| #define sig_nsa		m1_p1
 | |
| #define sig_osa		m1_p2
 | |
| #define sig_ret		m1_p3
 | |
| #define stat_nr		m2_i1
 | |
| #define sig_set		m2_l1
 | |
| #define sig_how		m2_i1
 | |
| #define sig_context	m2_p1
 | |
| #define reboot_flag	m1_i1
 | |
| #define reboot_code	m1_p1
 | |
| #define reboot_strlen	m1_i2
 | |
| #define svrctl_req	m2_i1
 | |
| #define svrctl_argp	m2_p1
 | |
| #define stime      	m2_l1
 | |
| #define memsize      	m4_l1
 | |
| #define membase      	m4_l2
 | |
| #define sysuname_req	m1_i1
 | |
| #define sysuname_field	m1_i2
 | |
| #define sysuname_len	m1_i3
 | |
| #define sysuname_value	m1_p1
 | |
| 
 | |
| /* The following names are synonyms for the variables in a reply message. */
 | |
| #define reply_res	m_type
 | |
| #define reply_res2	m2_i1
 | |
| #define reply_res3	m2_i2
 | |
| #define reply_ptr	m2_p1
 | |
| #define reply_mask	m2_l1 	
 | |
| #define reply_trace	m2_l2 	
 | |
| #define reply_time      m2_l1
 | |
| #define reply_utime     m2_l2
 | |
| #define reply_t1 	m4_l1
 | |
| #define reply_t2 	m4_l2
 | |
| #define reply_t3 	m4_l3
 | |
| #define reply_t4 	m4_l4
 | |
| #define reply_t5 	m4_l5
 | |
| 
 |