Add missing ChangeLog entries for my last commit.
[platform/upstream/binutils.git] / bfd / mach-o.h
1 /* Mach-O support for BFD.
2    Copyright 1999, 2000, 2001, 2002, 2003, 2005, 2007, 2008
3    Free Software Foundation, Inc.
4
5    This file is part of BFD, the Binary File Descriptor library.
6
7    This program is free software; you can redistribute it and/or modify
8    it under the terms of the GNU General Public License as published by
9    the Free Software Foundation; either version 3 of the License, or
10    (at your option) any later version.
11
12    This program is distributed in the hope that it will be useful,
13    but WITHOUT ANY WARRANTY; without even the implied warranty of
14    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15    GNU General Public License for more details.
16
17    You should have received a copy of the GNU General Public License
18    along with this program; if not, write to the Free Software
19    Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
20    MA 02110-1301, USA.  */
21
22 #ifndef _BFD_MACH_O_H_
23 #define _BFD_MACH_O_H_
24
25 #include "bfd.h"
26
27 #define BFD_MACH_O_N_STAB  0xe0 /* If any of these bits set, a symbolic debugging entry.  */
28 #define BFD_MACH_O_N_PEXT  0x10 /* Private external symbol bit.  */
29 #define BFD_MACH_O_N_TYPE  0x0e /* Mask for the type bits.  */
30 #define BFD_MACH_O_N_EXT   0x01 /* External symbol bit, set for external symbols.  */
31 #define BFD_MACH_O_N_UNDF  0x00 /* Undefined, n_sect == NO_SECT.  */
32 #define BFD_MACH_O_N_ABS   0x02 /* Absolute, n_sect == NO_SECT.  */
33 #define BFD_MACH_O_N_INDR  0x0a /* Indirect.  */
34 #define BFD_MACH_O_N_PBUD  0x0c /* Prebound undefined (defined in a dylib).  */
35 #define BFD_MACH_O_N_SECT  0x0e /* Defined in section number n_sect.  */
36
37 #define BFD_MACH_O_NO_SECT 0
38
39 #define BFD_MACH_O_SYM_NTYPE(SYM) (((SYM)->udata.i >> 24) & 0xff)
40 #define BFD_MACH_O_SYM_NSECT(SYM) (((SYM)->udata.i >> 16) & 0xff)
41 #define BFD_MACH_O_SYM_NDESC(SYM) ((SYM)->udata.i & 0xffff)
42
43 typedef enum bfd_mach_o_ppc_thread_flavour
44 {
45   BFD_MACH_O_PPC_THREAD_STATE = 1,
46   BFD_MACH_O_PPC_FLOAT_STATE = 2,
47   BFD_MACH_O_PPC_EXCEPTION_STATE = 3,
48   BFD_MACH_O_PPC_VECTOR_STATE = 4,
49   BFD_MACH_O_PPC_THREAD_STATE_64 = 5
50 }
51 bfd_mach_o_ppc_thread_flavour;
52
53 /* Defined in <mach/i386/thread_status.h> */
54 typedef enum bfd_mach_o_i386_thread_flavour
55 {
56   BFD_MACH_O_x86_THREAD_STATE32 = 1,
57   BFD_MACH_O_x86_FLOAT_STATE32 = 2,
58   BFD_MACH_O_x86_EXCEPTION_STATE32 = 3,
59   BFD_MACH_O_x86_THREAD_STATE64 = 4,
60   BFD_MACH_O_x86_FLOAT_STATE64 = 5,
61   BFD_MACH_O_x86_EXCEPTION_STATE64 = 6,
62   BFD_MACH_O_x86_THREAD_STATE = 7,
63   BFD_MACH_O_x86_FLOAT_STATE = 8,
64   BFD_MACH_O_x86_EXCEPTION_STATE = 9,
65   BFD_MACH_O_x86_DEBUG_STATE32 = 10,
66   BFD_MACH_O_x86_DEBUG_STATE64 = 11,
67   BFD_MACH_O_x86_DEBUG_STATE = 12,
68   BFD_MACH_O_THREAD_STATE_NONE = 13
69 }
70 bfd_mach_o_i386_thread_flavour;
71
72 #define BFD_MACH_O_LC_REQ_DYLD 0x80000000
73
74 typedef enum bfd_mach_o_load_command_type
75 {
76   BFD_MACH_O_LC_SEGMENT = 0x1,          /* File segment to be mapped.  */
77   BFD_MACH_O_LC_SYMTAB = 0x2,           /* Link-edit stab symbol table info (obsolete).  */
78   BFD_MACH_O_LC_SYMSEG = 0x3,           /* Link-edit gdb symbol table info.  */
79   BFD_MACH_O_LC_THREAD = 0x4,           /* Thread.  */
80   BFD_MACH_O_LC_UNIXTHREAD = 0x5,       /* UNIX thread (includes a stack).  */
81   BFD_MACH_O_LC_LOADFVMLIB = 0x6,       /* Load a fixed VM shared library.  */
82   BFD_MACH_O_LC_IDFVMLIB = 0x7,         /* Fixed VM shared library id.  */
83   BFD_MACH_O_LC_IDENT = 0x8,            /* Object identification information (obsolete).  */
84   BFD_MACH_O_LC_FVMFILE = 0x9,          /* Fixed VM file inclusion.  */
85   BFD_MACH_O_LC_PREPAGE = 0xa,          /* Prepage command (internal use).  */
86   BFD_MACH_O_LC_DYSYMTAB = 0xb,         /* Dynamic link-edit symbol table info.  */
87   BFD_MACH_O_LC_LOAD_DYLIB = 0xc,       /* Load a dynamically linked shared library.  */
88   BFD_MACH_O_LC_ID_DYLIB = 0xd,         /* Dynamically linked shared lib identification.  */
89   BFD_MACH_O_LC_LOAD_DYLINKER = 0xe,    /* Load a dynamic linker.  */
90   BFD_MACH_O_LC_ID_DYLINKER = 0xf,      /* Dynamic linker identification.  */
91   BFD_MACH_O_LC_PREBOUND_DYLIB = 0x10,  /* Modules prebound for a dynamically.  */
92   BFD_MACH_O_LC_ROUTINES = 0x11,        /* Image routines.  */
93   BFD_MACH_O_LC_SUB_FRAMEWORK = 0x12,   /* Sub framework.  */
94   BFD_MACH_O_LC_SUB_UMBRELLA = 0x13,    /* Sub umbrella.  */
95   BFD_MACH_O_LC_SUB_CLIENT = 0x14,      /* Sub client.  */
96   BFD_MACH_O_LC_SUB_LIBRARY = 0x15,     /* Sub library.  */
97   BFD_MACH_O_LC_TWOLEVEL_HINTS = 0x16,  /* Two-level namespace lookup hints.  */
98   BFD_MACH_O_LC_PREBIND_CKSUM = 0x17,   /* Prebind checksum.  */
99   /* Load a dynamically linked shared library that is allowed to be
100        missing (weak).  */
101   BFD_MACH_O_LC_LOAD_WEAK_DYLIB = 0x18,
102   BFD_MACH_O_LC_SEGMENT_64 = 0x19,      /* 64-bit segment of this file to be 
103                                            mapped.  */
104   BFD_MACH_O_LC_ROUTINES_64 = 0x1a,     /* Address of the dyld init routine 
105                                            in a dylib.  */
106   BFD_MACH_O_LC_UUID = 0x1b,            /* 128-bit UUID of the executable.  */
107   BFD_MACH_O_LC_RPATH = 0x1c,           /* Run path addiions.  */
108   BFD_MACH_O_LC_CODE_SIGNATURE = 0x1d   /* Local of code signature.  */
109 }
110 bfd_mach_o_load_command_type;
111
112 #define BFD_MACH_O_CPU_IS64BIT 0x1000000
113
114 typedef enum bfd_mach_o_cpu_type
115 {
116   BFD_MACH_O_CPU_TYPE_VAX = 1,
117   BFD_MACH_O_CPU_TYPE_MC680x0 = 6,
118   BFD_MACH_O_CPU_TYPE_I386 = 7,
119   BFD_MACH_O_CPU_TYPE_MIPS = 8,
120   BFD_MACH_O_CPU_TYPE_MC98000 = 10,
121   BFD_MACH_O_CPU_TYPE_HPPA = 11,
122   BFD_MACH_O_CPU_TYPE_ARM = 12,
123   BFD_MACH_O_CPU_TYPE_MC88000 = 13,
124   BFD_MACH_O_CPU_TYPE_SPARC = 14,
125   BFD_MACH_O_CPU_TYPE_I860 = 15,
126   BFD_MACH_O_CPU_TYPE_ALPHA = 16,
127   BFD_MACH_O_CPU_TYPE_POWERPC = 18,
128   BFD_MACH_O_CPU_TYPE_POWERPC_64 = (BFD_MACH_O_CPU_TYPE_POWERPC | BFD_MACH_O_CPU_IS64BIT),
129   BFD_MACH_O_CPU_TYPE_X86_64 = (BFD_MACH_O_CPU_TYPE_I386 | BFD_MACH_O_CPU_IS64BIT)
130 }
131 bfd_mach_o_cpu_type;
132
133 typedef enum bfd_mach_o_filetype
134 {
135   BFD_MACH_O_MH_OBJECT = 1,
136   BFD_MACH_O_MH_EXECUTE = 2,
137   BFD_MACH_O_MH_FVMLIB = 3,
138   BFD_MACH_O_MH_CORE = 4,
139   BFD_MACH_O_MH_PRELOAD = 5,
140   BFD_MACH_O_MH_DYLIB = 6,
141   BFD_MACH_O_MH_DYLINKER = 7,
142   BFD_MACH_O_MH_BUNDLE = 8
143 }
144 bfd_mach_o_filetype;
145
146 /* Constants for the type of a section.  */
147
148 typedef enum bfd_mach_o_section_type
149 {
150   /* Regular section.  */
151   BFD_MACH_O_S_REGULAR = 0x0,
152
153   /* Zero fill on demand section.  */
154   BFD_MACH_O_S_ZEROFILL = 0x1,
155
156   /* Section with only literal C strings.  */
157   BFD_MACH_O_S_CSTRING_LITERALS = 0x2,
158
159   /* Section with only 4 byte literals.  */
160   BFD_MACH_O_S_4BYTE_LITERALS = 0x3,
161
162   /* Section with only 8 byte literals.  */
163   BFD_MACH_O_S_8BYTE_LITERALS = 0x4,
164
165   /* Section with only pointers to literals.  */
166   BFD_MACH_O_S_LITERAL_POINTERS = 0x5,
167
168   /* For the two types of symbol pointers sections and the symbol stubs
169      section they have indirect symbol table entries.  For each of the
170      entries in the section the indirect symbol table entries, in
171      corresponding order in the indirect symbol table, start at the index
172      stored in the reserved1 field of the section structure.  Since the
173      indirect symbol table entries correspond to the entries in the
174      section the number of indirect symbol table entries is inferred from
175      the size of the section divided by the size of the entries in the
176      section.  For symbol pointers sections the size of the entries in
177      the section is 4 bytes and for symbol stubs sections the byte size
178      of the stubs is stored in the reserved2 field of the section
179      structure.  */
180
181   /* Section with only non-lazy symbol pointers.  */
182   BFD_MACH_O_S_NON_LAZY_SYMBOL_POINTERS = 0x6,
183
184   /* Section with only lazy symbol pointers.  */
185   BFD_MACH_O_S_LAZY_SYMBOL_POINTERS = 0x7,
186
187   /* Section with only symbol stubs, byte size of stub in the reserved2 field.  */
188   BFD_MACH_O_S_SYMBOL_STUBS = 0x8,
189
190   /* Section with only function pointers for initialization.  */
191   BFD_MACH_O_S_MOD_INIT_FUNC_POINTERS = 0x9
192 }
193 bfd_mach_o_section_type;
194
195 /* The flags field of a section structure is separated into two parts a section
196    type and section attributes.  The section types are mutually exclusive (it
197    can only have one type) but the section attributes are not (it may have more
198    than one attribute).  */
199
200 #define BFD_MACH_O_SECTION_TYPE_MASK        0x000000ff
201
202 /* Constants for the section attributes part of the flags field of a section
203    structure.  */
204 #define BFD_MACH_O_SECTION_ATTRIBUTES_MASK  0xffffff00
205 /* System setable attributes.  */
206 #define BFD_MACH_O_SECTION_ATTRIBUTES_SYS   0x00ffff00
207 /* User attributes.  */   
208 #define BFD_MACH_O_SECTION_ATTRIBUTES_USR   0xff000000
209
210 /* Section has local relocation entries.  */
211 #define BFD_MACH_O_S_ATTR_LOC_RELOC         0x00000100
212
213 /* Section has external relocation entries.  */  
214 #define BFD_MACH_O_S_ATTR_EXT_RELOC         0x00000200
215
216 /* Section contains some machine instructions.  */
217 #define BFD_MACH_O_S_ATTR_SOME_INSTRUCTIONS 0x00004000
218
219 #define BFD_MACH_O_S_ATTR_DEBUG             0x02000000
220
221 /* Section contains only true machine instructions.  */
222 #define BFD_MACH_O_S_ATTR_PURE_INSTRUCTIONS 0x80000000
223
224 typedef unsigned long bfd_mach_o_cpu_subtype;
225
226 typedef struct bfd_mach_o_header
227 {
228   unsigned long magic;
229   unsigned long cputype;
230   unsigned long cpusubtype;
231   unsigned long filetype;
232   unsigned long ncmds;
233   unsigned long sizeofcmds;
234   unsigned long flags;
235   unsigned int reserved;
236   /* Version 1: 32 bits, version 2: 64 bits.  */
237   unsigned int version;
238   enum bfd_endian byteorder;
239 }
240 bfd_mach_o_header;
241
242 typedef struct bfd_mach_o_section
243 {
244   asection *bfdsection;
245   char sectname[16 + 1];
246   char segname[16 + 1];
247   bfd_vma addr;
248   bfd_vma size;
249   bfd_vma offset;
250   unsigned long align;
251   bfd_vma reloff;
252   unsigned long nreloc;
253   unsigned long flags;
254   unsigned long reserved1;
255   unsigned long reserved2;
256   unsigned long reserved3;
257 }
258 bfd_mach_o_section;
259
260 typedef struct bfd_mach_o_segment_command
261 {
262   char segname[16 + 1];
263   bfd_vma vmaddr;
264   bfd_vma vmsize;
265   bfd_vma fileoff;
266   unsigned long filesize;
267   unsigned long maxprot;        /* Maximum permitted protection.  */
268   unsigned long initprot;       /* Initial protection.  */
269   unsigned long nsects;
270   unsigned long flags;
271   bfd_mach_o_section *sections;
272   asection *segment;
273 }
274 bfd_mach_o_segment_command;
275
276 /* Protection flags.  */
277 #define BFD_MACH_O_PROT_READ    0x01
278 #define BFD_MACH_O_PROT_WRITE   0x02
279 #define BFD_MACH_O_PROT_EXECUTE 0x04
280
281 typedef struct bfd_mach_o_symtab_command
282 {
283   unsigned long symoff;
284   unsigned long nsyms;
285   unsigned long stroff;
286   unsigned long strsize;
287   asymbol *symbols;
288   char *strtab;
289   asection *stabs_segment;
290   asection *stabstr_segment;
291 }
292 bfd_mach_o_symtab_command;
293
294 /* This is the second set of the symbolic information which is used to support
295    the data structures for the dynamically link editor.
296
297    The original set of symbolic information in the symtab_command which contains
298    the symbol and string tables must also be present when this load command is
299    present.  When this load command is present the symbol table is organized
300    into three groups of symbols:
301        local symbols (static and debugging symbols) - grouped by module
302        defined external symbols - grouped by module (sorted by name if not lib)
303        undefined external symbols (sorted by name)
304    In this load command there are offsets and counts to each of the three groups
305    of symbols.
306
307    This load command contains a the offsets and sizes of the following new
308    symbolic information tables:
309        table of contents
310        module table
311        reference symbol table
312        indirect symbol table
313    The first three tables above (the table of contents, module table and
314    reference symbol table) are only present if the file is a dynamically linked
315    shared library.  For executable and object modules, which are files
316    containing only one module, the information that would be in these three
317    tables is determined as follows:
318        table of contents - the defined external symbols are sorted by name
319        module table - the file contains only one module so everything in the
320                       file is part of the module.
321        reference symbol table - is the defined and undefined external symbols
322
323    For dynamically linked shared library files this load command also contains
324    offsets and sizes to the pool of relocation entries for all sections
325    separated into two groups:
326        external relocation entries
327        local relocation entries
328    For executable and object modules the relocation entries continue to hang
329    off the section structures.  */
330
331 typedef struct bfd_mach_o_dysymtab_command
332 {
333   /* The symbols indicated by symoff and nsyms of the LC_SYMTAB load command
334      are grouped into the following three groups:
335        local symbols (further grouped by the module they are from)
336        defined external symbols (further grouped by the module they are from)
337        undefined symbols
338
339      The local symbols are used only for debugging.  The dynamic binding
340      process may have to use them to indicate to the debugger the local
341      symbols for a module that is being bound.
342
343      The last two groups are used by the dynamic binding process to do the
344      binding (indirectly through the module table and the reference symbol
345      table when this is a dynamically linked shared library file).  */
346
347   unsigned long ilocalsym;    /* Index to local symbols.  */
348   unsigned long nlocalsym;    /* Number of local symbols.  */
349   unsigned long iextdefsym;   /* Index to externally defined symbols.  */
350   unsigned long nextdefsym;   /* Number of externally defined symbols.  */
351   unsigned long iundefsym;    /* Index to undefined symbols.  */
352   unsigned long nundefsym;    /* Number of undefined symbols.  */
353
354   /* For the for the dynamic binding process to find which module a symbol
355      is defined in the table of contents is used (analogous to the ranlib
356      structure in an archive) which maps defined external symbols to modules
357      they are defined in.  This exists only in a dynamically linked shared
358      library file.  For executable and object modules the defined external
359      symbols are sorted by name and is use as the table of contents.  */
360
361   unsigned long tocoff;       /* File offset to table of contents.  */
362   unsigned long ntoc;         /* Number of entries in table of contents.  */
363
364   /* To support dynamic binding of "modules" (whole object files) the symbol
365      table must reflect the modules that the file was created from.  This is
366      done by having a module table that has indexes and counts into the merged
367      tables for each module.  The module structure that these two entries
368      refer to is described below.  This exists only in a dynamically linked
369      shared library file.  For executable and object modules the file only
370      contains one module so everything in the file belongs to the module.  */
371
372   unsigned long modtaboff;    /* File offset to module table.  */
373   unsigned long nmodtab;      /* Number of module table entries.  */
374
375   /* To support dynamic module binding the module structure for each module
376      indicates the external references (defined and undefined) each module
377      makes.  For each module there is an offset and a count into the
378      reference symbol table for the symbols that the module references.
379      This exists only in a dynamically linked shared library file.  For
380      executable and object modules the defined external symbols and the
381      undefined external symbols indicates the external references.  */
382
383   unsigned long extrefsymoff;  /* Offset to referenced symbol table.  */
384   unsigned long nextrefsyms;   /* Number of referenced symbol table entries.  */
385
386   /* The sections that contain "symbol pointers" and "routine stubs" have
387      indexes and (implied counts based on the size of the section and fixed
388      size of the entry) into the "indirect symbol" table for each pointer
389      and stub.  For every section of these two types the index into the
390      indirect symbol table is stored in the section header in the field
391      reserved1.  An indirect symbol table entry is simply a 32bit index into
392      the symbol table to the symbol that the pointer or stub is referring to.
393      The indirect symbol table is ordered to match the entries in the section.  */
394
395   unsigned long indirectsymoff; /* File offset to the indirect symbol table.  */
396   unsigned long nindirectsyms;  /* Number of indirect symbol table entries.  */
397
398   /* To support relocating an individual module in a library file quickly the
399      external relocation entries for each module in the library need to be
400      accessed efficiently.  Since the relocation entries can't be accessed
401      through the section headers for a library file they are separated into
402      groups of local and external entries further grouped by module.  In this
403      case the presents of this load command who's extreloff, nextrel,
404      locreloff and nlocrel fields are non-zero indicates that the relocation
405      entries of non-merged sections are not referenced through the section
406      structures (and the reloff and nreloc fields in the section headers are
407      set to zero).
408
409      Since the relocation entries are not accessed through the section headers
410      this requires the r_address field to be something other than a section
411      offset to identify the item to be relocated.  In this case r_address is
412      set to the offset from the vmaddr of the first LC_SEGMENT command.
413
414      The relocation entries are grouped by module and the module table
415      entries have indexes and counts into them for the group of external
416      relocation entries for that the module.
417
418      For sections that are merged across modules there must not be any
419      remaining external relocation entries for them (for merged sections
420      remaining relocation entries must be local).  */
421
422   unsigned long extreloff;    /* Offset to external relocation entries.  */
423   unsigned long nextrel;      /* Number of external relocation entries.  */
424
425   /* All the local relocation entries are grouped together (they are not
426      grouped by their module since they are only used if the object is moved
427      from it statically link edited address).  */
428
429   unsigned long locreloff;    /* Offset to local relocation entries.  */
430   unsigned long nlocrel;      /* Number of local relocation entries.  */
431 }
432 bfd_mach_o_dysymtab_command;
433
434 /* An indirect symbol table entry is simply a 32bit index into the symbol table
435    to the symbol that the pointer or stub is refering to.  Unless it is for a
436    non-lazy symbol pointer section for a defined symbol which strip(1) as
437    removed.  In which case it has the value INDIRECT_SYMBOL_LOCAL.  If the
438    symbol was also absolute INDIRECT_SYMBOL_ABS is or'ed with that.  */
439
440 #define BFD_MACH_O_INDIRECT_SYMBOL_LOCAL 0x80000000
441 #define BFD_MACH_O_INDIRECT_SYMBOL_ABS   0x40000000
442
443 typedef struct bfd_mach_o_thread_flavour
444 {
445   unsigned long flavour;
446   bfd_vma offset;
447   unsigned long size;
448 }
449 bfd_mach_o_thread_flavour;
450
451 typedef struct bfd_mach_o_thread_command
452 {
453   unsigned long nflavours;
454   bfd_mach_o_thread_flavour *flavours;
455   asection *section;
456 }
457 bfd_mach_o_thread_command;
458
459 typedef struct bfd_mach_o_dylinker_command
460 {
461   unsigned long cmd;                   /* LC_ID_DYLIB or LC_LOAD_DYLIB.  */
462   unsigned long cmdsize;               /* Includes pathname string.  */
463   unsigned long name_offset;           /* Offset to library's path name.  */
464   unsigned long name_len;              /* Offset to library's path name.  */
465   asection *section;
466 }
467 bfd_mach_o_dylinker_command;
468
469 typedef struct bfd_mach_o_dylib_command
470 {
471   unsigned long cmd;                   /* LC_ID_DYLIB or LC_LOAD_DYLIB.  */
472   unsigned long cmdsize;               /* Includes pathname string.  */
473   unsigned long name_offset;           /* Offset to library's path name.  */
474   unsigned long name_len;              /* Offset to library's path name.  */
475   unsigned long timestamp;             /* Library's build time stamp.  */
476   unsigned long current_version;       /* Library's current version number.  */
477   unsigned long compatibility_version; /* Library's compatibility vers number.  */
478   asection *section;
479 }
480 bfd_mach_o_dylib_command;
481
482 typedef struct bfd_mach_o_prebound_dylib_command
483 {
484   unsigned long cmd;                 /* LC_PREBOUND_DYLIB.  */
485   unsigned long cmdsize;             /* Includes strings.  */
486   unsigned long name;                /* Library's path name.  */
487   unsigned long nmodules;            /* Number of modules in library.  */
488   unsigned long linked_modules;      /* Bit vector of linked modules.  */
489   asection *section;
490 }
491 bfd_mach_o_prebound_dylib_command;
492
493 typedef struct bfd_mach_o_uuid_command
494 {
495   unsigned long cmd;                 /* LC_PREBOUND_DYLIB.  */
496   unsigned long cmdsize;             /* Includes uuid.  */
497   unsigned char uuid[16];            /* Uuid.  */
498   asection *section;
499 }
500 bfd_mach_o_uuid_command;
501
502 typedef struct bfd_mach_o_load_command
503 {
504   bfd_mach_o_load_command_type type;
505   unsigned int type_required;
506   bfd_vma offset;
507   bfd_vma len;
508   union
509   {
510     bfd_mach_o_segment_command segment;
511     bfd_mach_o_symtab_command symtab;
512     bfd_mach_o_dysymtab_command dysymtab;
513     bfd_mach_o_thread_command thread;
514     bfd_mach_o_dylib_command dylib;
515     bfd_mach_o_dylinker_command dylinker;
516     bfd_mach_o_prebound_dylib_command prebound_dylib;
517     bfd_mach_o_uuid_command uuid;
518   }
519   command;
520 }
521 bfd_mach_o_load_command;
522
523 typedef struct mach_o_data_struct
524 {
525   bfd_mach_o_header header;
526   bfd_mach_o_load_command *commands;
527   unsigned long nsymbols;
528   asymbol *symbols;
529   unsigned long nsects;
530   bfd_mach_o_section **sections;
531   bfd *ibfd;
532 }
533 mach_o_data_struct;
534
535 #define bfd_get_mach_o_data(abfd) ((abfd)->tdata.mach_o_data)
536
537 typedef struct mach_o_data_struct bfd_mach_o_data_struct;
538
539 bfd_boolean        bfd_mach_o_valid  (bfd *);
540 int                bfd_mach_o_scan_read_symtab_symbol        (bfd *, bfd_mach_o_symtab_command *, asymbol *, unsigned long);
541 int                bfd_mach_o_scan_read_symtab_strtab        (bfd *, bfd_mach_o_symtab_command *);
542 int                bfd_mach_o_scan_read_symtab_symbols       (bfd *, bfd_mach_o_symtab_command *);
543 int                bfd_mach_o_scan_read_dysymtab_symbol      (bfd *, bfd_mach_o_dysymtab_command *, bfd_mach_o_symtab_command *, asymbol *, unsigned long);
544 int                bfd_mach_o_scan_start_address             (bfd *);
545 int                bfd_mach_o_scan                           (bfd *, bfd_mach_o_header *, bfd_mach_o_data_struct *);
546 bfd_boolean        bfd_mach_o_mkobject                       (bfd *);
547 const bfd_target * bfd_mach_o_object_p                       (bfd *);
548 const bfd_target * bfd_mach_o_core_p                         (bfd *);
549 const bfd_target * bfd_mach_o_archive_p                      (bfd *);
550 bfd *              bfd_mach_o_openr_next_archived_file       (bfd *, bfd *);
551 int                bfd_mach_o_lookup_section                 (bfd *, asection *, bfd_mach_o_load_command **, bfd_mach_o_section **);
552 int                bfd_mach_o_lookup_command                 (bfd *, bfd_mach_o_load_command_type, bfd_mach_o_load_command **);
553 unsigned long      bfd_mach_o_stack_addr                     (enum bfd_mach_o_cpu_type);
554 int                bfd_mach_o_core_fetch_environment         (bfd *, unsigned char **, unsigned int *);
555 char *             bfd_mach_o_core_file_failing_command      (bfd *);
556 int                bfd_mach_o_core_file_failing_signal       (bfd *);
557 bfd_boolean        bfd_mach_o_core_file_matches_executable_p (bfd *, bfd *);
558
559 extern const bfd_target mach_o_be_vec;
560 extern const bfd_target mach_o_le_vec;
561 extern const bfd_target mach_o_fat_vec;
562
563 #endif /* _BFD_MACH_O_H_ */