• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2024 Huawei Device Co., Ltd.
3  * Licensed under the Apache License, Version 2.0 (the "License");
4  * you may not use this file except in compliance with the License.
5  * You may obtain a copy of the License at
6  *
7  *     http://www.apache.org/licenses/LICENSE-2.0
8  *
9  * Unless required by applicable law or agreed to in writing, software
10  * distributed under the License is distributed on an "AS IS" BASIS,
11  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12  * See the License for the specific language governing permissions and
13  * limitations under the License.
14  */
15 
16 #ifndef OHOS_LUME_ASSET_COMPILER_H
17 #define OHOS_LUME_ASSET_COMPILER_H
18 enum : uint32_t {
19     LC_SEGMENT_64 = 0x19,
20     LC_SYMTAB = 0x2,
21 };
22 
23 enum : uint8_t {
24     N_UNDF = 0x0u,
25     N_ABS = 0x2u,
26     N_SECT = 0xeu,
27     N_PBUD = 0xcu,
28     N_INDR = 0xau
29 };
30 
31 enum : uint32_t {
32     MH_OBJECT = 0x1u,
33     MH_EXECUTE = 0x2u,
34     MH_FVMLIB = 0x3u,
35     MH_CORE = 0x4u,
36     MH_PRELOAD = 0x5u,
37     MH_DYLIB = 0x6u,
38     MH_DYLINKER = 0x7u,
39     MH_BUNDLE = 0x8u,
40     MH_DYLIB_STUB = 0x9u,
41     MH_DSYM = 0xAu,
42     MH_KEXT_BUNDLE = 0xBu,
43     MH_FILESET = 0xCu,
44 };
45 
46 enum : uint32_t {
47     CPU_ARCH_MASK = 0xff000000,
48     CPU_ARCH_ABI64 = 0x01000000,
49     CPU_ARCH_ABI64_32 = 0x02000000,
50 };
51 
52 enum : uint32_t {
53     CPU_TYPE_ANY = static_cast<uint32_t>(-1),
54     CPU_TYPE_X86 = 7,
55     CPU_TYPE_I386 = CPU_TYPE_X86,
56     CPU_TYPE_X86_64 = CPU_TYPE_X86 | CPU_ARCH_ABI64,
57     /* CPU_TYPE_MIPS      = 8, */
58     CPU_TYPE_MC98000 = 10,
59     CPU_TYPE_ARM = 12,
60     CPU_TYPE_ARM64 = CPU_TYPE_ARM | CPU_ARCH_ABI64,
61     CPU_TYPE_ARM64_32 = CPU_TYPE_ARM | CPU_ARCH_ABI64_32,
62     CPU_TYPE_SPARC = 14,
63     CPU_TYPE_POWERPC = 18,
64     CPU_TYPE_POWERPC64 = CPU_TYPE_POWERPC | CPU_ARCH_ABI64
65 };
66 
67 enum : uint32_t {
68     CPU_SUBTYPE_MASK = 0xff000000,
69     CPU_SUBTYPE_LIB64 = 0x80000000,
70     CPU_SUBTYPE_MULTIPLE = ~0u
71 };
72 
73 enum : uint32_t {
74     CPU_SUBTYPE_I386_ALL = 3,
75     CPU_SUBTYPE_386 = 3,
76     CPU_SUBTYPE_486 = 4,
77     CPU_SUBTYPE_486SX = 0x84,
78     CPU_SUBTYPE_586 = 5,
79     CPU_SUBTYPE_PENT = CPU_SUBTYPE_586,
80     CPU_SUBTYPE_PENTPRO = 0x16,
81     CPU_SUBTYPE_PENTII_M3 = 0x36,
82     CPU_SUBTYPE_PENTII_M5 = 0x56,
83     CPU_SUBTYPE_CELERON = 0x67,
84     CPU_SUBTYPE_CELERON_MOBILE = 0x77,
85     CPU_SUBTYPE_PENTIUM_3 = 0x08,
86     CPU_SUBTYPE_PENTIUM_3_M = 0x18,
87     CPU_SUBTYPE_PENTIUM_3_XEON = 0x28,
88     CPU_SUBTYPE_PENTIUM_M = 0x09,
89     CPU_SUBTYPE_PENTIUM_4 = 0x0a,
90     CPU_SUBTYPE_PENTIUM_4_M = 0x1a,
91     CPU_SUBTYPE_ITANIUM = 0x0b,
92     CPU_SUBTYPE_ITANIUM_2 = 0x1b,
93     CPU_SUBTYPE_XEON = 0x0c,
94     CPU_SUBTYPE_XEON_MP = 0x1c,
95 
96     CPU_SUBTYPE_X86_ALL = 3,
97     CPU_SUBTYPE_X86_64_ALL = 3,
98     CPU_SUBTYPE_X86_ARCH1 = 4,
99     CPU_SUBTYPE_X86_64_H = 8
100 };
101 
102 enum : uint32_t {
103     CPU_SUBTYPE_ARM64_ALL = 0,
104     CPU_SUBTYPE_ARM64_V8 = 1,
105     CPU_SUBTYPE_ARM64E = 2,
106 };
107 
108 enum : uint32_t {
109     MH_MAGIC = 0xFEEDFACEu,
110     MH_CIGAM = 0xCEFAEDFEu,
111     MH_MAGIC_64 = 0xFEEDFACFu,
112     MH_CIGAM_64 = 0xCFFAEDFEu,
113     FAT_MAGIC = 0xCAFEBABEu,
114     FAT_CIGAM = 0xBEBAFECAu,
115     FAT_MAGIC_64 = 0xCAFEBABFu,
116     FAT_CIGAM_64 = 0xBFBAFECAu
117 };
118 
119 enum {
120     MH_NOUNDEFS = 0x00000001u,
121     MH_INCRLINK = 0x00000002u,
122     MH_DYLDLINK = 0x00000004u,
123     MH_BINDATLOAD = 0x00000008u,
124     MH_PREBOUND = 0x00000010u,
125     MH_SPLIT_SEGS = 0x00000020u,
126     MH_LAZY_INIT = 0x00000040u,
127     MH_TWOLEVEL = 0x00000080u,
128     MH_FORCE_FLAT = 0x00000100u,
129     MH_NOMULTIDEFS = 0x00000200u,
130     MH_NOFIXPREBINDING = 0x00000400u,
131     MH_PREBINDABLE = 0x00000800u,
132     MH_ALLMODSBOUND = 0x00001000u,
133     MH_SUBSECTIONS_VIA_SYMBOLS = 0x00002000u,
134     MH_CANONICAL = 0x00004000u,
135     MH_WEAK_DEFINES = 0x00008000u,
136     MH_BINDS_TO_WEAK = 0x00010000u,
137     MH_ALLOW_STACK_EXECUTION = 0x00020000u,
138     MH_ROOT_SAFE = 0x00040000u,
139     MH_SETUID_SAFE = 0x00080000u,
140     MH_NO_REEXPORTED_DYLIBS = 0x00100000u,
141     MH_PIE = 0x00200000u,
142     MH_DEAD_STRIPPABLE_DYLIB = 0x00400000u,
143     MH_HAS_TLV_DESCRIPTORS = 0x00800000u,
144     MH_NO_HEAP_EXECUTION = 0x01000000u,
145     MH_APP_EXTENSION_SAFE = 0x02000000u,
146     MH_NLIST_OUTOFSYNC_WITH_DYLDINFO = 0x04000000u,
147     MH_SIM_SUPPORT = 0x08000000u,
148     MH_DYLIB_IN_CACHE = 0x80000000u
149 };
150 
151 enum {
152     N_STAB = 0xe0,
153     N_PEXT = 0x10,
154     N_TYPE = 0x0e,
155     N_EXT = 0x01
156 };
157 
158 enum { VM_PROT_READ = 0x1, VM_PROT_WRITE = 0x2, VM_PROT_EXECUTE = 0x4 };
159 
160 
161 enum cpu_subtype_t {};
162 enum cpu_type_t {};
163 typedef int vm_prot_t;
164 
165 struct fat_header {
166     uint32_t magic;
167     uint32_t nfat_arch;
168 };
169 
170 struct fat_arch {
171     cpu_type_t cputype;
172     cpu_subtype_t cpusubtype;
173     uint32_t offset;
174     uint32_t size;
175     uint32_t align;
176 };
177 
178 struct mach_header_64 {
179     uint32_t magic;
180 
181     cpu_type_t cputype;
182 
183     cpu_subtype_t cpusubtype;
184 
185     uint32_t filetype;
186 
187     uint32_t ncmds;
188 
189     uint32_t sizeofcmds;
190 
191     uint32_t flags;
192 
193     uint32_t reserved;
194 };
195 
196 struct symtab_command {
197     uint32_t cmd;
198     uint32_t cmdsize;
199     uint32_t nsyms;
200     uint32_t stroff;
201     uint32_t strsize;
202     uint32_t symoff;
203 };
204 
205 struct section_64 {
206     char sectname[16];
207 
208     char segname[16];
209 
210     uint64_t addr;
211 
212     uint64_t size;
213 
214     uint32_t offset;
215 
216     uint32_t align;
217 
218     uint32_t reloff;
219 
220     uint32_t nreloc;
221 
222     uint32_t flags;
223 
224     uint32_t reserved1;
225 
226     uint32_t reserved2;
227 
228     uint32_t reserved3;
229 };
230 
231 struct segment_command_64 {
232     uint32_t cmd;
233 
234     uint32_t cmdsize;
235 
236     char segname[16];
237 
238     uint64_t vmaddr;
239 
240     uint64_t vmsize;
241 
242     uint64_t fileoff;
243 
244     uint64_t filesize;
245 
246     uint32_t maxprot;
247 
248     uint32_t initprot;
249 
250     uint32_t nsects;
251 
252     uint32_t flags;
253 };
254 
255 struct nlist_64 {
256     uint32_t n_strx;
257     uint8_t n_type;
258     uint8_t n_sect;
259     uint16_t n_desc;
260     uint64_t n_value;
261 };
262 
263 enum SectionType : uint32_t {
264     S_REGULAR = 0x00u,
265     S_ZEROFILL = 0x01u,
266     S_CSTRING_LITERALS = 0x02u,
267     S_4BYTE_LITERALS = 0x03u,
268     S_8BYTE_LITERALS = 0x04u,
269     S_LITERAL_POINTERS = 0x05u,
270     S_NON_LAZY_SYMBOL_POINTERS = 0x06u,
271     S_LAZY_SYMBOL_POINTERS = 0x07u,
272     S_SYMBOL_STUBS = 0x08u,
273     S_MOD_INIT_FUNC_POINTERS = 0x09u,
274     S_MOD_TERM_FUNC_POINTERS = 0x0au,
275     S_COALESCED = 0x0bu,
276     S_GB_ZEROFILL = 0x0cu,
277     S_INTERPOSING = 0x0du,
278     S_16BYTE_LITERALS = 0x0eu,
279     S_DTRACE_DOF = 0x0fu,
280     S_LAZY_DYLIB_SYMBOL_POINTERS = 0x10u,
281     S_THREAD_LOCAL_REGULAR = 0x11u,
282     S_THREAD_LOCAL_ZEROFILL = 0x12u,
283     S_THREAD_LOCAL_VARIABLES = 0x13u,
284     S_THREAD_LOCAL_VARIABLE_POINTERS = 0x14u,
285     S_THREAD_LOCAL_INIT_FUNCTION_POINTERS = 0x15u,
286     S_INIT_FUNC_OFFSETS = 0x16u,
287     LAST_KNOWN_SECTION_TYPE = S_INIT_FUNC_OFFSETS
288 };
289 
290 enum : uint32_t {
291     SG_HIGHVM = 0x1u,
292     SG_FVMLIB = 0x2u,
293     SG_NORELOC = 0x4u,
294     SG_PROTECTED_VERSION_1 = 0x8u,
295     SG_READ_ONLY = 0x10u,
296     SECTION_TYPE = 0x000000ffu,
297     SECTION_ATTRIBUTES = 0xffffff00u,
298     SECTION_ATTRIBUTES_USR = 0xff000000u,
299     SECTION_ATTRIBUTES_SYS = 0x00ffff00u
300 };
301 
302 enum {
303     REFERENCE_TYPE = 0x7,
304     REFERENCE_FLAG_UNDEFINED_NON_LAZY = 0,
305     REFERENCE_FLAG_UNDEFINED_LAZY = 1,
306     REFERENCE_FLAG_DEFINED = 2,
307     REFERENCE_FLAG_PRIVATE_DEFINED = 3,
308     REFERENCE_FLAG_PRIVATE_UNDEFINED_NON_LAZY = 4,
309     REFERENCE_FLAG_PRIVATE_UNDEFINED_LAZY = 5,
310     N_ARM_THUMB_DEF = 0x0008u,
311     REFERENCED_DYNAMICALLY = 0x0010u,
312     N_NO_DEAD_STRIP = 0x0020u,
313     N_WEAK_REF = 0x0040u,
314     N_WEAK_DEF = 0x0080u,
315     N_SYMBOL_RESOLVER = 0x0100u,
316     N_ALT_ENTRY = 0x0200u,
317     N_COLD_FUNC = 0x0400u,
318     SELF_LIBRARY_ORDINAL = 0x0,
319     MAX_LIBRARY_ORDINAL = 0xfd,
320     DYNAMIC_LOOKUP_ORDINAL = 0xfe,
321     EXECUTABLE_ORDINAL = 0xff
322 };
323 #endif
324