Print this page
OS-5192 need faster clock_gettime
Reviewed by: Jerry Jelinek <jerry.jelinek@joyent.com>
Reviewed by: Robert Mustacchi <rm@joyent.com>
Reviewed by: Joshua M. Clulow <jmc@joyent.com>
Reviewed by: Ryan Zezeski <ryan@zinascii.com>
OS-5072 lxbrand support PT_GNU_STACK
Reviewed by: Jerry Jelinek <jerry.jelinek@joyent.com>
OS-4119 lxbrand panic when running native perl inside lx zone
Reviewed by: Jerry Jelinek <jerry.jelinek@joyent.com>
OS-3611 lx brand: 64-bit processes should not use VAs above VA hole
OS-3517 lx brand: branded zones don't interpret .interp section
OS-3280 need a way to specify the root of a native system in the lx brand
OS-3279 lx brand should allow delegated datasets
Reviewed by: Jerry Jelinek <jerry.jelinek@joyent.com>
OS-2877 lx_librtld_db falls to load due to NULL DT_DEBUG

@@ -24,10 +24,14 @@
  */
 
 /*      Copyright (c) 1984, 1986, 1987, 1988, 1989 AT&T */
 /*        All Rights Reserved   */
 
+/*
+ * Copyright 2016, Joyent, Inc.
+ */
+
 #ifndef _SYS_EXEC_H
 #define _SYS_EXEC_H
 
 #include <sys/systm.h>
 #include <vm/seg.h>

@@ -100,14 +104,18 @@
         uintptr_t entry;
         uintptr_t thrptr;
         vnode_t *ex_vp;
         char    *emulator;
         char    *brandname;
+        const char *brand_nroot;
         char    *auxp_auxflags; /* addr of auxflags auxv on the user stack */
         char    *auxp_brand; /* address of first brand auxv on user stack */
         cred_t  *pfcred;
         boolean_t scrubenv;
+        uintptr_t maxstack;
+        boolean_t stk_prot_override;
+        uintptr_t commpage;
 } uarg_t;
 
 /*
  * Possible brand actions for exec.
  */

@@ -173,11 +181,11 @@
         int     exec_magoff;
         int     exec_maglen;
         int     (*exec_func)(struct vnode *vp, struct execa *uap,
                     struct uarg *args, struct intpdata *idata, int level,
                     long *execsz, int setid, caddr_t exec_file,
-                    struct cred *cred, int brand_action);
+                    struct cred *cred, int *brand_action);
         int     (*exec_core)(struct vnode *vp, struct proc *p,
                     struct cred *cred, rlim64_t rlimit, int sig,
                     core_content_t content);
         krwlock_t       *exec_lock;
 };

@@ -211,11 +219,11 @@
 extern int exece(const char *fname, const char **argp, const char **envp);
 extern int exec_common(const char *fname, const char **argp,
     const char **envp, int brand_action);
 extern int gexec(vnode_t **vp, struct execa *uap, struct uarg *args,
     struct intpdata *idata, int level, long *execsz, caddr_t exec_file,
-    struct cred *cred, int brand_action);
+    struct cred *cred, int *brand_action);
 extern struct execsw *allocate_execsw(char *name, char *magic,
     size_t magic_size);
 extern struct execsw *findexecsw(char *magic);
 extern struct execsw *findexec_by_hdr(char *header);
 extern struct execsw *findexec_by_magic(char *magic);

@@ -236,20 +244,26 @@
 /*
  * When compiling 64-bit kernels we don't want these definitions included
  * when compiling the 32-bit compatability elf code in the elfexec module.
  */
 extern int elfexec(vnode_t *, execa_t *, uarg_t *, intpdata_t *, int,
-    long *, int, caddr_t, cred_t *, int);
+    long *, int, caddr_t, cred_t *, int *);
 extern int mapexec_brand(vnode_t *, uarg_t *, Ehdr *, Addr *,
-    intptr_t *, caddr_t, int *, caddr_t *, caddr_t *, size_t *, uintptr_t *);
+    intptr_t *, caddr_t, char **, caddr_t *, caddr_t *, size_t *,
+    uintptr_t *, uintptr_t *);
+extern int elfreadhdr(vnode_t *, cred_t *, Ehdr *, int *, caddr_t *,
+    ssize_t *);
 #endif /* !_ELF32_COMPAT */
 
 #if defined(_LP64)
 extern int elf32exec(vnode_t *, execa_t *, uarg_t *, intpdata_t *, int,
-    long *, int, caddr_t, cred_t *, int);
+    long *, int, caddr_t, cred_t *, int *);
 extern int mapexec32_brand(vnode_t *, uarg_t *, Elf32_Ehdr *, Elf32_Addr *,
-    intptr_t *, caddr_t, int *, caddr_t *, caddr_t *, size_t *, uintptr_t *);
+    intptr_t *, caddr_t, char **, caddr_t *, caddr_t *, size_t *,
+    uintptr_t *, uintptr_t *);
+extern int elf32readhdr(vnode_t *, cred_t *, Elf32_Ehdr *, int *, caddr_t *,
+    ssize_t *);
 #endif  /* _LP64 */
 
 /*
  * Utility functions for exec module core routines:
  */