]> git.saurik.com Git - apple/xnu.git/blobdiff - EXTERNAL_HEADERS/mach-o/loader.h
xnu-4903.270.47.tar.gz
[apple/xnu.git] / EXTERNAL_HEADERS / mach-o / loader.h
index d26ad14e3d80ff807d4b1d052c9f85b07577d36b..d6bc7e0cdf069726da9ae7948244f3f78ff59da5 100644 (file)
@@ -207,6 +207,9 @@ struct mach_header_64 {
                                           require it. Only used in MH_EXECUTE
                                           filetypes. */
 
+#define MH_APP_EXTENSION_SAFE 0x02000000 /* The code was linked for use in an
+                                           application extension. */
+
 /*
  * The load commands directly follow the mach_header.  The total size of all
  * of the commands is given by the sizeofcmds field in the mach_header.  All
@@ -295,7 +298,12 @@ struct load_command {
 #define LC_SOURCE_VERSION 0x2A /* source version used to build binary */
 #define LC_DYLIB_CODE_SIGN_DRS 0x2B /* Code signing DRs copied from linked dylibs */
 #define        LC_ENCRYPTION_INFO_64 0x2C /* 64-bit encrypted segment information */
-
+#define LC_LINKER_OPTION 0x2D /* linker options in MH_OBJECT files */
+#define LC_LINKER_OPTIMIZATION_HINT 0x2E /* optimization hints in MH_OBJECT files */
+#define LC_VERSION_MIN_TVOS 0x2F /* build for AppleTV min OS version */
+#define LC_VERSION_MIN_WATCHOS 0x30 /* build for Watch min OS version */
+#define LC_NOTE 0x31 /* arbitrary data included within a Mach-O file */
+#define LC_BUILD_VERSION 0x32 /* build for platform min OS version */
 
 /*
  * A variable length string in a load command is represented by an lc_str
@@ -1156,7 +1164,8 @@ struct rpath_command {
 struct linkedit_data_command {
     uint32_t   cmd;            /* LC_CODE_SIGNATURE, LC_SEGMENT_SPLIT_INFO,
                                    LC_FUNCTION_STARTS, LC_DATA_IN_CODE,
-                                  or LC_DYLIB_CODE_SIGN_DRS */
+                                  LC_DYLIB_CODE_SIGN_DRS or
+                                  LC_LINKER_OPTIMIZATION_HINT. */
     uint32_t   cmdsize;        /* sizeof(struct linkedit_data_command) */
     uint32_t   dataoff;        /* file offset of data in __LINKEDIT segment */
     uint32_t   datasize;       /* file size of data in __LINKEDIT segment  */
@@ -1177,7 +1186,7 @@ struct encryption_info_command {
 
 /*
  * The encryption_info_command_64 contains the file offset and size of an
- * of an encrypted segment (for use in 64-bit targets).
+ * of an encrypted segment (for use in x86_64 targets).
  */
 struct encryption_info_command_64 {
    uint32_t    cmd;            /* LC_ENCRYPTION_INFO_64 */
@@ -1196,12 +1205,45 @@ struct encryption_info_command_64 {
  */
 struct version_min_command {
     uint32_t   cmd;            /* LC_VERSION_MIN_MACOSX or
-                                  LC_VERSION_MIN_IPHONEOS  */
+                                  LC_VERSION_MIN_IPHONEOS or
+                                  LC_VERSION_MIN_WATCHOS or
+                                  LC_VERSION_MIN_TVOS */
     uint32_t   cmdsize;        /* sizeof(struct min_version_command) */
     uint32_t   version;        /* X.Y.Z is encoded in nibbles xxxx.yy.zz */
     uint32_t   sdk;            /* X.Y.Z is encoded in nibbles xxxx.yy.zz */
 };
 
+/*
+ * The build_version_command contains the min OS version on which this
+ * binary was built to run for its platform.  The list of known platforms and
+ * tool values following it.
+ */
+struct build_version_command {
+    uint32_t   cmd;            /* LC_BUILD_VERSION */
+    uint32_t   cmdsize;        /* sizeof(struct build_version_command) plus */
+                                /* ntools * sizeof(struct build_tool_version) */
+    uint32_t   platform;       /* platform */
+    uint32_t   minos;          /* X.Y.Z is encoded in nibbles xxxx.yy.zz */
+    uint32_t   sdk;            /* X.Y.Z is encoded in nibbles xxxx.yy.zz */
+    uint32_t   ntools;         /* number of tool entries following this */
+};
+
+struct build_tool_version {
+    uint32_t   tool;           /* enum for the tool */
+    uint32_t   version;        /* version number of the tool */
+};
+
+/* Known values for the platform field above. */
+#define PLATFORM_MACOS 1
+#define PLATFORM_IOS 2
+#define PLATFORM_TVOS 3
+#define PLATFORM_WATCHOS 4
+
+/* Known values for the tool field above. */
+#define TOOL_CLANG 1
+#define TOOL_SWIFT 2
+#define TOOL_LD        3
+
 /*
  * The dyld_info_command contains the file offsets and sizes of 
  * the new compressed form of the information dyld needs to 
@@ -1375,6 +1417,17 @@ struct dyld_info_command {
 #define EXPORT_SYMBOL_FLAGS_REEXPORT                           0x08
 #define EXPORT_SYMBOL_FLAGS_STUB_AND_RESOLVER                  0x10
 
+/*
+ * The linker_option_command contains linker options embedded in object files.
+ */
+struct linker_option_command {
+    uint32_t  cmd;     /* LC_LINKER_OPTION only used in MH_OBJECT filetypes */
+    uint32_t  cmdsize;
+    uint32_t  count;   /* number of strings */
+    /* concatenation of zero terminated UTF8 strings.
+       Zero filled at end to align */
+};
+
 /*
  * The symseg_command contains the offset and size of the GNU style
  * symbol table information as described in the header file <symseg.h>.
@@ -1470,4 +1523,16 @@ struct tlv_descriptor
        unsigned long   offset;
 };
 
+/*
+ * LC_NOTE commands describe a region of arbitrary data included in a Mach-O
+ * file.  Its initial use is to record extra data in MH_CORE files.
+ */
+struct note_command {
+    uint32_t   cmd;            /* LC_NOTE */
+    uint32_t   cmdsize;        /* sizeof(struct note_command) */
+    char       data_owner[16]; /* owner name for this LC_NOTE */
+    uint64_t   offset;         /* file offset of this data */
+    uint64_t   size;           /* length of data region */
+};
+
 #endif /* _MACHO_LOADER_H_ */