| // Copyright (c) 2022, the Dart project authors. Please see the AUTHORS file |
| // for details. All rights reserved. Use of this source code is governed by a |
| // BSD-style license that can be found in the LICENSE file. |
| |
| #ifndef RUNTIME_PLATFORM_MACH_O_H_ |
| #define RUNTIME_PLATFORM_MACH_O_H_ |
| |
| #include <platform/globals.h> |
| |
| namespace dart { |
| |
| namespace mach_o { |
| |
| #pragma pack(push, 1) |
| |
| typedef int cpu_type_t; |
| typedef int cpu_subtype_t; |
| typedef int vm_prot_t; |
| |
| struct mach_header { |
| uint32_t magic; |
| cpu_type_t cputype; |
| cpu_subtype_t cpusubtype; |
| uint32_t filetype; |
| uint32_t ncmds; |
| uint32_t sizeofcmds; |
| uint32_t flags; |
| }; |
| |
| static const uint32_t MH_MAGIC = 0xfeedface; |
| static const uint32_t MH_CIGAM = 0xcefaedfe; |
| |
| struct mach_header_64 { |
| uint32_t magic; |
| cpu_type_t cputype; |
| cpu_subtype_t cpusubtype; |
| uint32_t filetype; |
| uint32_t ncmds; |
| uint32_t sizeofcmds; |
| uint32_t flags; |
| uint32_t reserved; |
| }; |
| |
| static const uint32_t MH_MAGIC_64 = 0xfeedfacf; |
| static const uint32_t MH_CIGAM_64 = 0xcffaedfe; |
| |
| struct load_command { |
| uint32_t cmd; |
| uint32_t cmdsize; |
| }; |
| |
| static const uint32_t LC_SEGMENT = 0x1; |
| static const uint32_t LC_SEGMENT_64 = 0x19; |
| |
| struct section { |
| char sectname[16]; |
| char segname[16]; |
| uint32_t addr; |
| uint32_t size; |
| uint32_t offset; |
| uint32_t align; |
| uint32_t reloff; |
| uint32_t nreloc; |
| uint32_t flags; |
| uint32_t reserved1; |
| uint32_t reserved2; |
| }; |
| |
| struct section_64 { |
| char sectname[16]; |
| char segname[16]; |
| uint64_t addr; |
| uint64_t size; |
| uint32_t offset; |
| uint32_t align; |
| uint32_t reloff; |
| uint32_t nreloc; |
| uint32_t flags; |
| uint32_t reserved1; |
| uint32_t reserved2; |
| uint32_t reserved3; |
| }; |
| |
| struct segment_command_64 { |
| uint32_t cmd; |
| uint32_t cmdsize; |
| char segname[16]; |
| uint64_t vmaddr; |
| uint64_t vmsize; |
| uint64_t fileoff; |
| uint64_t filesize; |
| vm_prot_t maxprot; |
| vm_prot_t initprot; |
| uint32_t nsects; |
| uint32_t flags; |
| }; |
| |
| #pragma pack(pop) |
| |
| } // namespace mach_o |
| |
| } // namespace dart |
| |
| #endif // RUNTIME_PLATFORM_MACH_O_H_ |