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/)
56 lines
1.4 KiB
C
56 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
|
|
|