Rev 5191 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 5191 | Rev 6324 | ||
---|---|---|---|
Line 1... | Line 1... | ||
1 | /* Mach-O support for BFD. |
1 | /* Mach-O support for BFD. |
2 | Copyright 2011, 2012 |
- | |
3 | Free Software Foundation, Inc. |
2 | Copyright (C) 2011-2015 Free Software Foundation, Inc. |
Line 4... | Line 3... | ||
4 | 3 | ||
Line 5... | Line 4... | ||
5 | This file is part of BFD, the Binary File Descriptor library. |
4 | This file is part of BFD, the Binary File Descriptor library. |
6 | 5 | ||
Line 31... | Line 30... | ||
31 | BFD_MACH_O_MH_MAGIC_64 = 0xfeedfacf, |
30 | BFD_MACH_O_MH_MAGIC_64 = 0xfeedfacf, |
32 | BFD_MACH_O_MH_CIGAM_64 = 0xcffaedfe |
31 | BFD_MACH_O_MH_CIGAM_64 = 0xcffaedfe |
33 | } |
32 | } |
34 | bfd_mach_o_mach_header_magic; |
33 | bfd_mach_o_mach_header_magic; |
Line -... | Line 34... | ||
- | 34 | ||
- | 35 | /* Capability bits in cpu type. */ |
|
- | 36 | #define BFD_MACH_O_CPU_ARCH_MASK 0xff000000 |
|
35 | 37 | #define BFD_MACH_O_CPU_ARCH_ABI64 0x01000000 |
|
Line 36... | Line 38... | ||
36 | #define BFD_MACH_O_CPU_IS64BIT 0x1000000 |
38 | #define BFD_MACH_O_CPU_IS64BIT 0x01000000 |
37 | 39 | ||
38 | typedef enum bfd_mach_o_cpu_type |
40 | typedef enum bfd_mach_o_cpu_type |
39 | { |
41 | { |
Line 47... | Line 49... | ||
47 | BFD_MACH_O_CPU_TYPE_MC88000 = 13, |
49 | BFD_MACH_O_CPU_TYPE_MC88000 = 13, |
48 | BFD_MACH_O_CPU_TYPE_SPARC = 14, |
50 | BFD_MACH_O_CPU_TYPE_SPARC = 14, |
49 | BFD_MACH_O_CPU_TYPE_I860 = 15, |
51 | BFD_MACH_O_CPU_TYPE_I860 = 15, |
50 | BFD_MACH_O_CPU_TYPE_ALPHA = 16, |
52 | BFD_MACH_O_CPU_TYPE_ALPHA = 16, |
51 | BFD_MACH_O_CPU_TYPE_POWERPC = 18, |
53 | BFD_MACH_O_CPU_TYPE_POWERPC = 18, |
- | 54 | BFD_MACH_O_CPU_TYPE_POWERPC_64 = |
|
52 | BFD_MACH_O_CPU_TYPE_POWERPC_64 = (BFD_MACH_O_CPU_TYPE_POWERPC | BFD_MACH_O_CPU_IS64BIT), |
55 | (BFD_MACH_O_CPU_TYPE_POWERPC | BFD_MACH_O_CPU_IS64BIT), |
- | 56 | BFD_MACH_O_CPU_TYPE_X86_64 = |
|
53 | BFD_MACH_O_CPU_TYPE_X86_64 = (BFD_MACH_O_CPU_TYPE_I386 | BFD_MACH_O_CPU_IS64BIT) |
57 | (BFD_MACH_O_CPU_TYPE_I386 | BFD_MACH_O_CPU_IS64BIT), |
- | 58 | BFD_MACH_O_CPU_TYPE_ARM64 = |
|
- | 59 | (BFD_MACH_O_CPU_TYPE_ARM | BFD_MACH_O_CPU_IS64BIT) |
|
54 | } |
60 | } |
55 | bfd_mach_o_cpu_type; |
61 | bfd_mach_o_cpu_type; |
Line -... | Line 62... | ||
- | 62 | ||
- | 63 | /* Capability bits in cpu subtype. */ |
|
- | 64 | #define BFD_MACH_O_CPU_SUBTYPE_MASK 0xff000000 |
|
- | 65 | #define BFD_MACH_O_CPU_SUBTYPE_LIB64 0x80000000 |
|
56 | 66 | ||
57 | typedef enum bfd_mach_o_cpu_subtype |
67 | typedef enum bfd_mach_o_cpu_subtype |
58 | { |
68 | { |
59 | /* i386. */ |
69 | /* i386. */ |
Line 330... | Line 340... | ||
330 | #define BFD_MACH_O_N_SYMBOL_RESOLVER 0x100 |
340 | #define BFD_MACH_O_N_SYMBOL_RESOLVER 0x100 |
Line 331... | Line 341... | ||
331 | 341 | ||
332 | #define BFD_MACH_O_INDIRECT_SYM_LOCAL 0x80000000 |
342 | #define BFD_MACH_O_INDIRECT_SYM_LOCAL 0x80000000 |
333 | #define BFD_MACH_O_INDIRECT_SYM_ABS 0x40000000 |
343 | #define BFD_MACH_O_INDIRECT_SYM_ABS 0x40000000 |
- | 344 | ||
- | 345 | /* Constants for dyld info rebase. */ |
|
- | 346 | #define BFD_MACH_O_REBASE_OPCODE_MASK 0xf0 |
|
- | 347 | #define BFD_MACH_O_REBASE_IMMEDIATE_MASK 0x0f |
|
- | 348 | ||
- | 349 | /* The rebase opcodes. */ |
|
- | 350 | #define BFD_MACH_O_REBASE_OPCODE_DONE 0x00 |
|
- | 351 | #define BFD_MACH_O_REBASE_OPCODE_SET_TYPE_IMM 0x10 |
|
- | 352 | #define BFD_MACH_O_REBASE_OPCODE_SET_SEGMENT_AND_OFFSET_ULEB 0x20 |
|
- | 353 | #define BFD_MACH_O_REBASE_OPCODE_ADD_ADDR_ULEB 0x30 |
|
- | 354 | #define BFD_MACH_O_REBASE_OPCODE_ADD_ADDR_IMM_SCALED 0x40 |
|
- | 355 | #define BFD_MACH_O_REBASE_OPCODE_DO_REBASE_IMM_TIMES 0x50 |
|
- | 356 | #define BFD_MACH_O_REBASE_OPCODE_DO_REBASE_ULEB_TIMES 0x60 |
|
- | 357 | #define BFD_MACH_O_REBASE_OPCODE_DO_REBASE_ADD_ADDR_ULEB 0x70 |
|
- | 358 | #define BFD_MACH_O_REBASE_OPCODE_DO_REBASE_ULEB_TIMES_SKIPPING_ULEB 0x80 |
|
- | 359 | ||
- | 360 | /* The rebase type. */ |
|
- | 361 | #define BFD_MACH_O_REBASE_TYPE_POINTER 1 |
|
- | 362 | #define BFD_MACH_O_REBASE_TYPE_TEXT_ABSOLUTE32 2 |
|
- | 363 | #define BFD_MACH_O_REBASE_TYPE_TEXT_PCREL32 3 |
|
- | 364 | ||
- | 365 | /* Constants for dyld info bind. */ |
|
- | 366 | #define BFD_MACH_O_BIND_OPCODE_MASK 0xf0 |
|
- | 367 | #define BFD_MACH_O_BIND_IMMEDIATE_MASK 0x0f |
|
- | 368 | ||
- | 369 | /* The bind opcodes. */ |
|
- | 370 | #define BFD_MACH_O_BIND_OPCODE_DONE 0x00 |
|
- | 371 | #define BFD_MACH_O_BIND_OPCODE_SET_DYLIB_ORDINAL_IMM 0x10 |
|
- | 372 | #define BFD_MACH_O_BIND_OPCODE_SET_DYLIB_ORDINAL_ULEB 0x20 |
|
- | 373 | #define BFD_MACH_O_BIND_OPCODE_SET_DYLIB_SPECIAL_IMM 0x30 |
|
- | 374 | #define BFD_MACH_O_BIND_OPCODE_SET_SYMBOL_TRAILING_FLAGS_IMM 0x40 |
|
- | 375 | #define BFD_MACH_O_BIND_OPCODE_SET_TYPE_IMM 0x50 |
|
- | 376 | #define BFD_MACH_O_BIND_OPCODE_SET_ADDEND_SLEB 0x60 |
|
- | 377 | #define BFD_MACH_O_BIND_OPCODE_SET_SEGMENT_AND_OFFSET_ULEB 0x70 |
|
- | 378 | #define BFD_MACH_O_BIND_OPCODE_ADD_ADDR_ULEB 0x80 |
|
- | 379 | #define BFD_MACH_O_BIND_OPCODE_DO_BIND 0x90 |
|
- | 380 | #define BFD_MACH_O_BIND_OPCODE_DO_BIND_ADD_ADDR_ULEB 0xa0 |
|
- | 381 | #define BFD_MACH_O_BIND_OPCODE_DO_BIND_ADD_ADDR_IMM_SCALED 0xb0 |
|
- | 382 | #define BFD_MACH_O_BIND_OPCODE_DO_BIND_ULEB_TIMES_SKIPPING_ULEB 0xc0 |
|
- | 383 | ||
- | 384 | /* The bind types. */ |
|
- | 385 | #define BFD_MACH_O_BIND_TYPE_POINTER 1 |
|
- | 386 | #define BFD_MACH_O_BIND_TYPE_TEXT_ABSOLUTE32 2 |
|
- | 387 | #define BFD_MACH_O_BIND_TYPE_TEXT_PCREL32 3 |
|
- | 388 | ||
- | 389 | /* The special dylib. */ |
|
- | 390 | #define BFD_MACH_O_BIND_SPECIAL_DYLIB_SELF 0 |
|
- | 391 | #define BFD_MACH_O_BIND_SPECIAL_DYLIB_MAIN_EXECUTABLE -1 |
|
- | 392 | #define BFD_MACH_O_BIND_SPECIAL_DYLIB_FLAT_LOOKUP -2 |
|
- | 393 | ||
- | 394 | /* Constants for dyld info export. */ |
|
- | 395 | #define BFD_MACH_O_EXPORT_SYMBOL_FLAGS_KIND_MASK 0x03 |
|
- | 396 | #define BFD_MACH_O_EXPORT_SYMBOL_FLAGS_KIND_REGULAR 0x00 |
|
- | 397 | #define BFD_MACH_O_EXPORT_SYMBOL_FLAGS_KIND_THREAD_LOCAL 0x01 |
|
- | 398 | #define BFD_MACH_O_EXPORT_SYMBOL_FLAGS_WEAK_DEFINITION 0x04 |
|
- | 399 | #define BFD_MACH_O_EXPORT_SYMBOL_FLAGS_REEXPORT 0x08 |
|
- | 400 | #define BFD_MACH_O_EXPORT_SYMBOL_FLAGS_STUB_AND_RESOLVER 0x10 |
|
334 | 401 | ||
335 | /* Constants for DATA_IN_CODE entries. */ |
402 | /* Constants for DATA_IN_CODE entries. */ |
336 | typedef enum bfd_mach_o_data_in_code_entry_kind |
403 | typedef enum bfd_mach_o_data_in_code_entry_kind |
337 | { |
404 | { |
338 | BFD_MACH_O_DICE_KIND_DATA = 0x0001, /* Data */ |
405 | BFD_MACH_O_DICE_KIND_DATA = 0x0001, /* Data */ |