X-Git-Url: https://git.saurik.com/apple/xnu.git/blobdiff_plain/3903760236c30e3b5ace7a4eefac3a269d68957c..94ff46dc2849db4d43eaaf144872decc522aafb4:/bsd/sys/imgact.h?ds=sidebyside diff --git a/bsd/sys/imgact.h b/bsd/sys/imgact.h index f20dfb2d4..a0138830e 100644 --- a/bsd/sys/imgact.h +++ b/bsd/sys/imgact.h @@ -2,7 +2,7 @@ * Copyright (c) 2004-2005, 2011 Apple Computer, Inc. All rights reserved. * * @APPLE_OSREFERENCE_LICENSE_HEADER_START@ - * + * * This file contains Original Code and/or Modifications of Original Code * as defined in and that are subject to the Apple Public Source License * Version 2.0 (the 'License'). You may not use this file except in @@ -11,10 +11,10 @@ * unlawful or unlicensed copies of an Apple operating system, or to * circumvent, violate, or enable the circumvention or violation of, any * terms of an Apple operating system software license agreement. - * + * * Please obtain a copy of the License at * http://www.opensource.apple.com/apsl/ and read it before using this file. - * + * * The Original Code and all software distributed under the License are * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, @@ -22,7 +22,7 @@ * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT. * Please see the License for the specific language governing rights and * limitations under the License. - * + * * @APPLE_OSREFERENCE_LICENSE_HEADER_END@ */ /* @@ -64,74 +64,91 @@ * Version 2.0. */ #ifndef _SYS_IMGACT_H_ -#define _SYS_IMGACT_H_ +#define _SYS_IMGACT_H_ -#define IMG_SHSIZE 512 /* largest shell interpreter, in bytes */ +#define IMG_SHSIZE 512 /* largest shell interpreter, in bytes */ struct label; struct proc; struct nameidata; struct image_params { - user_addr_t ip_user_fname; /* argument */ - user_addr_t ip_user_argv; /* argument */ - user_addr_t ip_user_envv; /* argument */ - int ip_seg; /* segment for arguments */ - struct vnode *ip_vp; /* file */ - struct vnode_attr *ip_vattr; /* run file attributes */ - struct vnode_attr *ip_origvattr; /* invocation file attributes */ - cpu_type_t ip_origcputype; /* cputype of invocation file */ - cpu_subtype_t ip_origcpusubtype; /* subtype of invocation file */ - char *ip_vdata; /* file data (up to one page) */ - int ip_flags; /* image flags */ - int ip_argc; /* argument count */ - int ip_envc; /* environment count */ - int ip_applec; /* apple vector count */ + user_addr_t ip_user_fname; /* argument */ + user_addr_t ip_user_argv; /* argument */ + user_addr_t ip_user_envv; /* argument */ + int ip_seg; /* segment for arguments */ + struct vnode *ip_vp; /* file */ + struct vnode_attr *ip_vattr; /* run file attributes */ + struct vnode_attr *ip_origvattr; /* invocation file attributes */ + cpu_type_t ip_origcputype; /* cputype of invocation file */ + cpu_subtype_t ip_origcpusubtype; /* subtype of invocation file */ + char *ip_vdata; /* file data (up to one page) */ + int ip_flags; /* image flags */ + int ip_argc; /* argument count */ + int ip_envc; /* environment count */ + int ip_applec; /* apple vector count */ - char *ip_startargv; /* argument vector beginning */ - char *ip_endargv; /* end of argv/start of envv */ - char *ip_endenvv; /* end of envv/start of applev */ + char *ip_startargv; /* argument vector beginning */ + char *ip_endargv; /* end of argv/start of envv */ + char *ip_endenvv; /* end of envv/start of applev */ - char *ip_strings; /* base address for strings */ - char *ip_strendp; /* current end pointer */ + char *ip_strings; /* base address for strings */ + char *ip_strendp; /* current end pointer */ - int ip_argspace; /* remaining space of NCARGS limit (argv+envv) */ - int ip_strspace; /* remaining total string space */ + int ip_argspace; /* remaining space of NCARGS limit (argv+envv) */ + int ip_strspace; /* remaining total string space */ - user_size_t ip_arch_offset; /* subfile offset in ip_vp */ - user_size_t ip_arch_size; /* subfile length in ip_vp */ - char ip_interp_buffer[IMG_SHSIZE]; /* interpreter buffer space */ - int ip_interp_sugid_fd; /* fd for sugid script */ + user_size_t ip_arch_offset; /* subfile offset in ip_vp */ + user_size_t ip_arch_size; /* subfile length in ip_vp */ + char ip_interp_buffer[IMG_SHSIZE]; /* interpreter buffer space */ + int ip_interp_sugid_fd; /* fd for sugid script */ /* Next two fields are for support of architecture translation... */ - struct vfs_context *ip_vfs_context; /* VFS context */ - struct nameidata *ip_ndp; /* current nameidata */ - thread_t ip_new_thread; /* thread for spawn/vfork */ + struct vfs_context *ip_vfs_context; /* VFS context */ + struct nameidata *ip_ndp; /* current nameidata */ + thread_t ip_new_thread; /* thread for spawn/vfork */ - struct label *ip_execlabelp; /* label of the executable */ - struct label *ip_scriptlabelp; /* label of the script */ - struct vnode *ip_scriptvp; /* script */ - unsigned int ip_csflags; /* code signing flags */ - int ip_mac_return; /* return code from mac policy checks */ - void *ip_px_sa; - void *ip_px_sfa; - void *ip_px_spa; - void *ip_px_smpx; /* MAC-specific spawn attrs. */ - void *ip_px_persona; /* persona args */ - void *ip_cs_error; /* codesigning error reason */ + struct label *ip_execlabelp; /* label of the executable */ + struct label *ip_scriptlabelp; /* label of the script */ + struct vnode *ip_scriptvp; /* script */ + unsigned int ip_csflags; /* code signing flags */ + int ip_mac_return; /* return code from mac policy checks */ + void *ip_px_sa; + void *ip_px_sfa; + void *ip_px_spa; + void *ip_px_smpx; /* MAC-specific spawn attrs. */ + void *ip_px_persona; /* persona args */ + void *ip_px_pcred_info; /* posix cred args */ + void *ip_cs_error; /* codesigning error reason */ + + uint64_t ip_dyld_fsid; + uint64_t ip_dyld_fsobjid; + unsigned int ip_simulator_binary; /* simulator binary flags */ }; /* * Image flags */ -#define IMGPF_NONE 0x00000000 /* No flags */ -#define IMGPF_INTERPRET 0x00000001 /* Interpreter invoked */ -#define IMGPF_RESERVED 0x00000002 -#define IMGPF_WAS_64BIT 0x00000004 /* exec from a 64Bit binary */ -#define IMGPF_IS_64BIT 0x00000008 /* exec to a 64Bit binary */ -#define IMGPF_SPAWN 0x00000010 /* spawn (without setexec) */ -#define IMGPF_DISABLE_ASLR 0x00000020 /* disable ASLR */ -#define IMGPF_ALLOW_DATA_EXEC 0x00000040 /* forcibly disallow data execution */ -#define IMGPF_VFORK_EXEC 0x00000080 /* vfork followed by exec */ +#define IMGPF_NONE 0x00000000 /* No flags */ +#define IMGPF_INTERPRET 0x00000001 /* Interpreter invoked */ +#define IMGPF_RESERVED 0x00000002 +#define IMGPF_WAS_64BIT_ADDR 0x00000004 /* exec from a 64Bit address space */ +#define IMGPF_IS_64BIT_ADDR 0x00000008 /* exec to a 64Bit address space */ +#define IMGPF_SPAWN 0x00000010 /* spawn (without setexec) */ +#define IMGPF_DISABLE_ASLR 0x00000020 /* disable ASLR */ +#define IMGPF_ALLOW_DATA_EXEC 0x00000040 /* forcibly disallow data execution */ +#define IMGPF_VFORK_EXEC 0x00000080 /* vfork followed by exec */ +#define IMGPF_EXEC 0x00000100 /* exec */ +#define IMGPF_HIGH_BITS_ASLR 0x00000200 /* randomize high bits of ASLR slide */ +#define IMGPF_IS_64BIT_DATA 0x00000400 /* exec to a 64Bit register state */ +#define IMGPF_DRIVER 0x00000800 /* exec of a driver binary (no LC_MAIN) */ +#define IMGPF_NOJOP 0x80000000 + +/* + * Simulator binary flags + */ +#define IMGPF_SB_DEFAULT 0 /* Default value, did not check if it is a simulator binary */ +#define IMGPF_SB_TRUE 1 /* Binary is a simulator binary */ +#define IMGPF_SB_FALSE 2 /* Binary is not a simulator binary */ -#endif /* !_SYS_IMGACT */ +#endif /* !_SYS_IMGACT */