The Design and Implementation of the FreeBSD Operating System, Second Edition
Now available: The Design and Implementation of the FreeBSD Operating System (Second Edition)


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]

FreeBSD/Linux Kernel Cross Reference
sys/sys/exec_macho.h

Version: -  FREEBSD  -  FREEBSD-13-STABLE  -  FREEBSD-13-0  -  FREEBSD-12-STABLE  -  FREEBSD-12-0  -  FREEBSD-11-STABLE  -  FREEBSD-11-0  -  FREEBSD-10-STABLE  -  FREEBSD-10-0  -  FREEBSD-9-STABLE  -  FREEBSD-9-0  -  FREEBSD-8-STABLE  -  FREEBSD-8-0  -  FREEBSD-7-STABLE  -  FREEBSD-7-0  -  FREEBSD-6-STABLE  -  FREEBSD-6-0  -  FREEBSD-5-STABLE  -  FREEBSD-5-0  -  FREEBSD-4-STABLE  -  FREEBSD-3-STABLE  -  FREEBSD22  -  l41  -  OPENBSD  -  linux-2.6  -  MK84  -  PLAN9  -  xnu-8792 
SearchContext: -  none  -  3  -  10 

    1 /*      $NetBSD: exec_macho.h,v 1.20 2008/04/28 20:24:10 martin Exp $   */
    2 
    3 /*-
    4  * Copyright (c) 2001 The NetBSD Foundation, Inc.
    5  * All rights reserved.
    6  *
    7  * This code is derived from software contributed to The NetBSD Foundation
    8  * by Christos Zoulas.
    9  *
   10  * Redistribution and use in source and binary forms, with or without
   11  * modification, are permitted provided that the following conditions
   12  * are met:
   13  * 1. Redistributions of source code must retain the above copyright
   14  *    notice, this list of conditions and the following disclaimer.
   15  * 2. Redistributions in binary form must reproduce the above copyright
   16  *    notice, this list of conditions and the following disclaimer in the
   17  *    documentation and/or other materials provided with the distribution.
   18  *
   19  * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
   20  * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
   21  * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
   22  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
   23  * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
   24  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
   25  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
   26  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
   27  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
   28  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
   29  * POSSIBILITY OF SUCH DAMAGE.
   30  */
   31 
   32 #ifndef _SYS_EXEC_MACHO_H_
   33 #define _SYS_EXEC_MACHO_H_
   34 
   35 #include <sys/param.h>
   36 
   37 #include <machine/int_types.h>
   38 #include <machine/macho_machdep.h>
   39 
   40 /*
   41  * CPU supported by a given arch, in sys/arch/<arch>/<arch>/macho_machdep.c
   42  */
   43 extern uint32_t exec_macho_supported_cpu[];
   44 
   45 /*
   46  * the `fat' binary description
   47  */
   48 struct exec_macho_fat_header {
   49         __uint32_t      magic;
   50         __uint32_t      nfat_arch;
   51 };
   52 
   53 #define MACHO_FAT_MAGIC 0xcafebabe
   54 
   55 /*
   56  * The fat architecture header
   57  */
   58 struct exec_macho_fat_arch {
   59         __uint32_t      cputype;
   60         __uint32_t      cpusubtype;
   61         u_long          offset;
   62         u_long          size;
   63         u_long          align;
   64 };
   65 
   66 #define MACHO_CPU_TYPE_ANY      ~0
   67 #define MACHO_CPU_TYPE_VAX       1
   68 #define MACHO_CPU_TYPE_MC680x0   6
   69 #define MACHO_CPU_TYPE_I386      7
   70 #define MACHO_CPU_TYPE_MIPS      8
   71 #define MACHO_CPU_TYPE_MC98000  10
   72 #define MACHO_CPU_TYPE_HPPA     11
   73 #define MACHO_CPU_TYPE_ARM      12
   74 #define MACHO_CPU_TYPE_MC88000  13
   75 #define MACHO_CPU_TYPE_SPARC    14
   76 #define MACHO_CPU_TYPE_I860     15
   77 #define MACHO_CPU_TYPE_ALPHA    16
   78 #define MACHO_CPU_TYPE_POWERPC  18
   79 
   80 #define MACHO_CPU_SUBTYPE_MULTIPLE              ~0
   81 #define MACHO_CPU_SUBTYPE_LITTLE_ENDIAN          0
   82 #define MACHO_CPU_SUBTYPE_BIG_ENDIAN             1
   83 
   84 /*
   85  * m68k
   86  */
   87 #define MACHO_CPU_SUBTYPE_MC680x0_ALL           1
   88 #define MACHO_CPU_SUBTYPE_MC68030               1
   89 #define MACHO_CPU_SUBTYPE_MC68040               2
   90 #define MACHO_CPU_SUBTYPE_MC68030_ONLY          3
   91 
   92 /*
   93  * x86
   94  */
   95 #define MACHO_CPU_SUBTYPE_I386_ALL      3
   96 #define MACHO_CPU_SUBTYPE_386           3
   97 #define MACHO_CPU_SUBTYPE_486           4
   98 #define MACHO_CPU_SUBTYPE_486SX         (4 + 128)
   99 #define MACHO_CPU_SUBTYPE_586           5
  100 #define MACHO_CPU_SUBTYPE_INTEL(f, m)   ((f) + ((m) << 4))
  101 #define MACHO_CPU_SUBTYPE_PENT          MACHO_CPU_SUBTYPE_INTEL(5, 0)
  102 #define MACHO_CPU_SUBTYPE_PENTPRO       MACHO_CPU_SUBTYPE_INTEL(6, 1)
  103 #define MACHO_CPU_SUBTYPE_PENTII_M3     MACHO_CPU_SUBTYPE_INTEL(6, 3)
  104 #define MACHO_CPU_SUBTYPE_PENTII_M5     MACHO_CPU_SUBTYPE_INTEL(6, 5)
  105 #define MACHO_CPU_SUBTYPE_INTEL_FAMILY(x)       ((x) & 15)
  106 #define MACHO_CPU_SUBTYPE_INTEL_FAMILY_MAX      15
  107 #define MACHO_CPU_SUBTYPE_INTEL_MODEL(x)        ((x) >> 4)
  108 #define MACHO_CPU_SUBTYPE_INTEL_MODEL_ALL       0
  109 /*
  110  * PowerPC
  111  */
  112 #define MACHO_CPU_SUBTYPE_POWERPC_ALL            0
  113 #define MACHO_CPU_SUBTYPE_POWERPC_601            1
  114 #define MACHO_CPU_SUBTYPE_POWERPC_602            2
  115 #define MACHO_CPU_SUBTYPE_POWERPC_603            3
  116 #define MACHO_CPU_SUBTYPE_POWERPC_603e           4
  117 #define MACHO_CPU_SUBTYPE_POWERPC_603ev          5
  118 #define MACHO_CPU_SUBTYPE_POWERPC_604            6
  119 #define MACHO_CPU_SUBTYPE_POWERPC_604e           7
  120 #define MACHO_CPU_SUBTYPE_POWERPC_620            8
  121 #define MACHO_CPU_SUBTYPE_POWERPC_750            9
  122 #define MACHO_CPU_SUBTYPE_POWERPC_7400          10
  123 #define MACHO_CPU_SUBTYPE_POWERPC_7450          11
  124 
  125 
  126 struct exec_macho_object_header {
  127         u_long  magic;
  128         __uint32_t      cputype;
  129         __uint32_t      cpusubtype;
  130         u_long  filetype;
  131         u_long  ncmds;
  132         u_long  sizeofcmds;
  133         u_long  flags;
  134 };
  135 
  136 #define MACHO_MOH_MAGIC 0xfeedface
  137 
  138 /*
  139  * Object header filetype
  140  */
  141 #define MACHO_MOH_OBJECT        0x1
  142 #define MACHO_MOH_EXECUTE       0x2
  143 #define MACHO_MOH_FVMLIB        0x3
  144 #define MACHO_MOH_CORE          0x4
  145 #define MACHO_MOH_PRELOAD       0x5
  146 #define MACHO_MOH_DYLIB         0x6
  147 #define MACHO_MOH_DYLINKER      0x7
  148 #define MACHO_MOH_BUNDLE        0x8
  149 
  150 /*
  151  * Object header flags
  152  */
  153 #define MACHO_MOH_NOUNDEFS      0x001
  154 #define MACHO_MOH_INCRLINK      0x002
  155 #define MACHO_MOH_DYLDLINK      0x004
  156 #define MACHO_MOH_BINDATLOAD    0x008
  157 #define MACHO_MOH_PREBOUND      0x010
  158 #define MACHO_MOH_SPLIT_SEGS    0x020
  159 #define MACHO_MOH_LAZY_INIT     0x040
  160 #define MACHO_MOH_TWOLEVEL      0x080
  161 #define MACHO_MOH_FORCE_FLAT    0x100
  162 
  163 struct exec_macho_load_command {
  164         u_long cmd;
  165         u_long cmdsize;
  166 };
  167 
  168 #define MACHO_LC_SEGMENT        0x01
  169 #define MACHO_LC_SYMTAB         0x02
  170 #define MACHO_LC_SYMSEG         0x03
  171 #define MACHO_LC_THREAD         0x04
  172 #define MACHO_LC_UNIXTHREAD     0x05
  173 #define MACHO_LC_LOADFVMLIB     0x06
  174 #define MACHO_LC_IDFVMLIB       0x07
  175 #define MACHO_LC_IDENT          0x08
  176 #define MACHO_LC_FVMFILE        0x09
  177 #define MACHO_LC_PREPAGE        0x0a
  178 #define MACHO_LC_DYSYMTAB       0x0b
  179 #define MACHO_LC_LOAD_DYLIB     0x0c
  180 #define MACHO_LC_ID_DYLIB       0x0d
  181 #define MACHO_LC_LOAD_DYLINKER  0x0e
  182 #define MACHO_LC_ID_DYLINKER    0x0f
  183 #define MACHO_LC_PREBOUND_DYLIB 0x10
  184 #define MACHO_LC_ROUTINES       0x11
  185 #define MACHO_LC_SUB_FRAMEWORK  0x12
  186 #define MACHO_LC_SUB_UMBRELLA   0x13
  187 #define MACHO_LC_SUB_CLIENT     0x14
  188 
  189 struct exec_macho_segment_command {
  190         u_long  cmd;
  191         u_long  cmdsize;
  192         char    segname[16];
  193         u_long  vmaddr;
  194         u_long  vmsize;
  195         u_long  fileoff;
  196         u_long  filesize;
  197         __uint32_t      maxprot;
  198         __uint32_t      initprot;
  199         u_long  nsects;
  200         u_long  flags;
  201 };
  202 
  203 union macho_lc_str {
  204         u_long  offset;
  205         char            *ptr;
  206 };
  207 
  208 #define MACHO_SG_HIGHVM         0x1
  209 #define MACHO_SG_FVMLIB         0x2
  210 #define MACHO_SG_NORELOC        0x4
  211 
  212 struct exec_macho_dylinker_command {
  213         u_long  cmd;
  214         u_long  cmdsize;
  215         union macho_lc_str      name;
  216 };
  217 
  218 struct exec_macho_dylib {
  219     union macho_lc_str name;
  220     u_long timestamp;
  221     u_long current_version;
  222     u_long compatibility_version;
  223 };
  224 
  225 struct exec_macho_dylib_command {
  226         u_long  cmd;
  227         u_long  cmdsize;
  228         struct exec_macho_dylib dylib;
  229 };
  230 
  231 struct exec_macho_thread_command {
  232         u_long  cmd;
  233         u_long  cmdsize;
  234         u_long  flavor;
  235         u_long  count;
  236 };
  237 
  238 struct exec_macho_emul_arg {
  239         const char *path;
  240         char filename[MAXPATHLEN];
  241         struct exec_macho_object_header *macho_hdr;
  242         int dynamic;
  243 };
  244 
  245 #ifndef _LKM
  246 #include "opt_execfmt.h"
  247 #endif
  248 
  249 #ifdef _KERNEL
  250 struct exec_package;
  251 struct ps_strings;
  252 u_long  exec_macho_thread_entry(struct exec_macho_thread_command *);
  253 int     exec_macho_makecmds(struct lwp *, struct exec_package *);
  254 int     exec_macho_copyargs(struct proc *, struct exec_package *,
  255                             struct ps_strings *, char **, void *);
  256 #endif /* _KERNEL */
  257 
  258 #endif /* !_SYS_EXEC_MACHO_H_ */

Cache object: b70b79d6af1b5abf3e33c9bfcaf248c9


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]


This page is part of the FreeBSD/Linux Linux Kernel Cross-Reference, and was automatically generated using a modified version of the LXR engine.