Removing CSU patches
* Removed startup code patches in lib/csu regarding kernel to userland
ABI.
* Aligned stack layout on NetBSD stack layout.
* Generate valid stack pointers instead of offsets by taking into account
_minix_kerninfo->kinfo->user_sp.
* Refactored stack generation, by moving part of execve in two
functions {minix_stack_params(), minix_stack_fill()} and using them
in execve(), rs and vm.
* Changed load offset of rtld (ld.so) to:
execi.args.stack_high - execi.args.stack_size - 0xa00000
which is 10MB below the main executable stack.
Change-Id: I839daf3de43321cded44105634102d419cb36cec
This commit is contained in:
@@ -21,6 +21,14 @@
|
||||
|
||||
#include <minix/ipc.h>
|
||||
|
||||
struct ps_strings; /* forward declaration for minix_stack_fill. */
|
||||
|
||||
void minix_stack_params(const char *path, char * const *argv, char * const *envp,
|
||||
size_t *stack_size, char *overflow, int *argc, int *envc);
|
||||
void minix_stack_fill(const char *path, int argc, char * const *argv,
|
||||
int envc, char * const *envp, size_t stack_size, char *frame,
|
||||
int *vsp, struct ps_strings **psp);
|
||||
|
||||
int __execve(const char *_path, char *const _argv[], char *const
|
||||
_envp[], int _nargs, int _nenvps);
|
||||
int _syscall(endpoint_t _who, int _syscallnr, message *_msgptr);
|
||||
|
||||
@@ -549,6 +549,7 @@
|
||||
#define PR_STACK_PTR m1_p1 /* used for stack ptr in sys_exec, sys_getsp */
|
||||
#define PR_NAME_PTR m1_p2 /* tells where program name is for dmp */
|
||||
#define PR_IP_PTR m1_p3 /* initial value for ip after exec */
|
||||
#define PR_PS_STR_PTR m1_p4 /* pointer to ps_strings, expected by __start */
|
||||
#define PR_FORK_FLAGS m1_i3 /* optional flags for fork operation */
|
||||
#define PR_FORK_MSGADDR m1_p1 /* reply message address of forked child */
|
||||
#define PR_CTX_PTR m1_p1 /* pointer to mcontext_t structure */
|
||||
@@ -557,9 +558,7 @@
|
||||
#define PMEXEC_FLAGS m1_i3 /* PMEF_* */
|
||||
|
||||
#define PMEF_AUXVECTORS 20
|
||||
#define PMEF_EXECNAMELEN1 256
|
||||
#define PMEF_AUXVECTORSPACE 0x01 /* space for PMEF_AUXVECTORS on stack */
|
||||
#define PMEF_EXECNAMESPACE1 0x02 /* space for PMEF_EXECNAMELEN1 execname */
|
||||
#define PMEF_EXECNAMELEN1 PATH_MAX
|
||||
|
||||
/* Flags for PR_FORK_FLAGS. */
|
||||
#define PFF_VMINHIBIT 0x01 /* Don't schedule until release by VM. */
|
||||
@@ -811,11 +810,13 @@
|
||||
# define PM_FRAME m7_p2 /* arguments and environment */
|
||||
# define PM_FRAME_LEN m7_i3 /* size of frame */
|
||||
# define PM_EXECFLAGS m7_i4 /* PMEXEC_FLAGS */
|
||||
# define PM_PS_STR m7_i5 /* ps_strings pointer */
|
||||
|
||||
/* Additional parameters for PM_EXEC_REPLY and PM_CORE_REPLY */
|
||||
# define PM_STATUS m7_i2 /* OK or failure */
|
||||
# define PM_PC m7_p1 /* program counter */
|
||||
# define PM_NEWSP m7_p2 /* possibly-changed stack ptr */
|
||||
# define PM_NEWPS_STR m7_i5 /* possibly-changed ps_strings ptr */
|
||||
|
||||
/* Additional parameters for PM_FORK and PM_SRV_FORK */
|
||||
# define PM_PPROC m7_i2 /* parent process endpoint */
|
||||
@@ -848,6 +849,7 @@
|
||||
#define EXC_RS_PROC m1_i1 /* process that needs to be restarted */
|
||||
#define EXC_RS_RESULT m1_i2 /* result of the exec */
|
||||
#define EXC_RS_PC m1_p1 /* program counter */
|
||||
#define EXC_RS_PS_STR m1_p2 /* ps_strings pointer */
|
||||
|
||||
/*===========================================================================*
|
||||
* Messages used from VFS to file servers *
|
||||
|
||||
@@ -15,7 +15,7 @@
|
||||
#define M3_STRING 16 /* legacy m3_ca1 size (must not be changed) */
|
||||
#define M3_LONG_STRING 16 /* current m3_ca1 size (may be increased) */
|
||||
|
||||
typedef struct {int m1i1, m1i2, m1i3; char *m1p1, *m1p2, *m1p3;} mess_1;
|
||||
typedef struct {int m1i1, m1i2, m1i3; char *m1p1, *m1p2, *m1p3, *m1p4;} mess_1;
|
||||
typedef struct {int m2i1, m2i2, m2i3; long m2l1, m2l2; char *m2p1;
|
||||
short m2s1;} mess_2;
|
||||
typedef struct {int m3i1, m3i2; char *m3p1; char m3ca1[M3_LONG_STRING];} mess_3;
|
||||
@@ -84,6 +84,7 @@ typedef struct {
|
||||
#define m1_p1 m_u.m_m1.m1p1
|
||||
#define m1_p2 m_u.m_m1.m1p2
|
||||
#define m1_p3 m_u.m_m1.m1p3
|
||||
#define m1_p4 m_u.m_m1.m1p4
|
||||
|
||||
#define m2_i1 m_u.m_m2.m2i1
|
||||
#define m2_i2 m_u.m_m2.m2i2
|
||||
|
||||
@@ -30,8 +30,8 @@ int _sendcall(endpoint_t who, int type, message *msgptr);
|
||||
|
||||
int sys_abort(int how);
|
||||
int sys_enable_iop(endpoint_t proc_ep);
|
||||
int sys_exec(endpoint_t proc_ep, char *ptr, char *aout, vir_bytes
|
||||
initpc);
|
||||
int sys_exec(endpoint_t proc_ep, char *stack_ptr, char *progname,
|
||||
vir_bytes pc, vir_bytes ps_str);
|
||||
int sys_fork(endpoint_t parent, endpoint_t child, endpoint_t *,
|
||||
u32_t vm, vir_bytes *);
|
||||
int sys_clear(endpoint_t proc_ep);
|
||||
|
||||
Reference in New Issue
Block a user