1/*
2 * Copyright (c) 1999 Apple Computer, Inc. All rights reserved.
3 *
4 * @APPLE_LICENSE_HEADER_START@
5 *
6 * This file contains Original Code and/or Modifications of Original Code
7 * as defined in and that are subject to the Apple Public Source License
8 * Version 2.0 (the 'License'). You may not use this file except in
9 * compliance with the License. Please obtain a copy of the License at
10 * http://www.opensource.apple.com/apsl/ and read it before using this
11 * file.
12 *
13 * The Original Code and all software distributed under the License are
14 * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
15 * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
16 * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
17 * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
18 * Please see the License for the specific language governing rights and
19 * limitations under the License.
20 *
21 * @APPLE_LICENSE_HEADER_END@
22 */
23#ifndef _MACH_O_SWAP_H_
24#define _MACH_O_SWAP_H_
25
26#include <stdint.h>
27#include <architecture/byte_order.h>
28#include <mach-o/fat.h>
29#include <mach-o/loader.h>
30#include <mach-o/nlist.h>
31#include <mach-o/reloc.h>
32#include <mach-o/ranlib.h>
33
34#ifdef __cplusplus
35extern "C" {
36#endif /* __cplusplus */
37
38extern void swap_fat_header(
39    struct fat_header *fat_header,
40    enum NXByteOrder target_byte_order);
41
42extern void swap_fat_arch(
43    struct fat_arch *fat_archs,
44    uint32_t nfat_arch,
45    enum NXByteOrder target_byte_order);
46
47extern void swap_mach_header(
48    struct mach_header *mh,
49    enum NXByteOrder target_byte_order);
50
51extern void swap_mach_header_64(
52    struct mach_header_64 *mh,
53    enum NXByteOrder target_byte_order);
54
55extern void swap_load_command(
56    struct load_command *lc,
57    enum NXByteOrder target_byte_order);
58
59extern void swap_segment_command(
60    struct segment_command *sg,
61    enum NXByteOrder target_byte_order);
62
63extern void swap_segment_command_64(
64    struct segment_command_64 *sg,
65    enum NXByteOrder target_byte_order);
66
67extern void swap_section(
68    struct section *s,
69    uint32_t nsects,
70    enum NXByteOrder target_byte_order);
71
72extern void swap_section_64(
73    struct section_64 *s,
74    uint32_t nsects,
75    enum NXByteOrder target_byte_order);
76
77extern void swap_symtab_command(
78    struct symtab_command *st,
79    enum NXByteOrder target_byte_order);
80
81extern void swap_dysymtab_command(
82    struct dysymtab_command *dyst,
83    enum NXByteOrder target_byte_sex);
84
85extern void swap_symseg_command(
86    struct symseg_command *ss,
87    enum NXByteOrder target_byte_order);
88
89extern void swap_fvmlib_command(
90    struct fvmlib_command *fl,
91    enum NXByteOrder target_byte_order);
92
93extern void swap_dylib_command(
94    struct dylib_command *dl,
95    enum NXByteOrder target_byte_sex);
96
97extern void swap_sub_framework_command(
98    struct sub_framework_command *sub,
99    enum NXByteOrder target_byte_sex);
100
101extern void swap_sub_umbrella_command(
102    struct sub_umbrella_command *usub,
103    enum NXByteOrder target_byte_sex);
104
105extern void swap_sub_library_command(
106    struct sub_library_command *lsub,
107    enum NXByteOrder target_byte_sex);
108
109extern void swap_sub_client_command(
110    struct sub_client_command *csub,
111    enum NXByteOrder target_byte_sex);
112
113extern void swap_prebound_dylib_command(
114    struct prebound_dylib_command *pbdylib,
115    enum NXByteOrder target_byte_sex);
116
117extern void swap_dylinker_command(
118    struct dylinker_command *dyld,
119    enum NXByteOrder target_byte_sex);
120
121extern void swap_fvmfile_command(
122    struct fvmfile_command *ff,
123    enum NXByteOrder target_byte_order);
124
125extern void swap_thread_command(
126    struct thread_command *ut,
127    enum NXByteOrder target_byte_order);
128
129extern void swap_ident_command(
130    struct ident_command *ident,
131    enum NXByteOrder target_byte_order);
132
133extern void swap_routines_command(
134    struct routines_command *r_cmd,
135    enum NXByteOrder target_byte_sex);
136
137extern void swap_routines_command_64(
138    struct routines_command_64 *r_cmd,
139    enum NXByteOrder target_byte_sex);
140
141extern void swap_twolevel_hints_command(
142    struct twolevel_hints_command *hints_cmd,
143    enum NXByteOrder target_byte_sex);
144
145extern void swap_prebind_cksum_command(
146    struct prebind_cksum_command *cksum_cmd,
147    enum NXByteOrder target_byte_sex);
148
149extern void swap_uuid_command(
150    struct uuid_command *uuid_cmd,
151    enum NXByteOrder target_byte_sex);
152
153extern void swap_twolevel_hint(
154    struct twolevel_hint *hints,
155    uint32_t nhints,
156    enum NXByteOrder target_byte_sex);
157
158extern void swap_nlist(
159    struct nlist *symbols,
160    uint32_t nsymbols,
161    enum NXByteOrder target_byte_order);
162
163extern void swap_nlist_64(
164    struct nlist_64 *symbols,
165    uint32_t nsymbols,
166    enum NXByteOrder target_byte_order);
167
168extern void swap_ranlib(
169    struct ranlib *ranlibs,
170    uint32_t nranlibs,
171    enum NXByteOrder target_byte_order);
172
173extern void swap_relocation_info(
174    struct relocation_info *relocs,
175    uint32_t nrelocs,
176    enum NXByteOrder target_byte_order);
177
178extern void swap_indirect_symbols(
179    uint32_t *indirect_symbols,
180    uint32_t nindirect_symbols,
181    enum NXByteOrder target_byte_sex);
182
183extern void swap_dylib_reference(
184    struct dylib_reference *refs,
185    uint32_t nrefs,
186    enum NXByteOrder target_byte_sex);
187
188extern void swap_dylib_module(
189    struct dylib_module *mods,
190    uint32_t nmods,
191    enum NXByteOrder target_byte_sex);
192
193extern void swap_dylib_module_64(
194    struct dylib_module_64 *mods,
195    uint32_t nmods,
196    enum NXByteOrder target_byte_sex);
197
198extern void swap_dylib_table_of_contents(
199    struct dylib_table_of_contents *tocs,
200    uint32_t ntocs,
201    enum NXByteOrder target_byte_sex);
202
203#ifdef __cplusplus
204}
205#endif /* __cplusplus */
206
207#endif /* _MACH_O_SWAP_H_ */
208