| // Copyright 2009 The Go Authors. All rights reserved. | |
| // Use of this source code is governed by a BSD-style | |
| // license that can be found in the LICENSE file. | |
| typedef struct MachoHdr MachoHdr; | |
| struct MachoHdr { | |
| uint32 cpu; | |
| uint32 subcpu; | |
| }; | |
| typedef struct MachoSect MachoSect; | |
| struct MachoSect { | |
| char* name; | |
| uint64 addr; | |
| uint64 size; | |
| uint32 off; | |
| uint32 align; | |
| uint32 reloc; | |
| uint32 nreloc; | |
| uint32 flag; | |
| uint32 res1; | |
| uint32 res2; | |
| }; | |
| typedef struct MachoSeg MachoSeg; | |
| struct MachoSeg { | |
| char* name; | |
| uint64 vsize; | |
| uint64 vaddr; | |
| uint64 fileoffset; | |
| uint64 filesize; | |
| uint32 prot1; | |
| uint32 prot2; | |
| uint32 nsect; | |
| uint32 msect; | |
| MachoSect *sect; | |
| uint32 flag; | |
| }; | |
| typedef struct MachoLoad MachoLoad; | |
| struct MachoLoad { | |
| uint32 type; | |
| uint32 ndata; | |
| uint32 *data; | |
| }; | |
| typedef struct MachoDebug MachoDebug; | |
| struct MachoDebug { | |
| uint32 fileoffset; | |
| uint32 filesize; | |
| }; | |
| MachoHdr* getMachoHdr(); | |
| MachoSeg* newMachoSeg(char*, int); | |
| MachoSect* newMachoSect(MachoSeg*, char*); | |
| MachoLoad* newMachoLoad(uint32, uint32); | |
| MachoDebug* newMachoDebug(void); | |
| int machowrite(void); | |
| void machoinit(void); | |
| /* | |
| * Total amount of space to reserve at the start of the file | |
| * for Header, PHeaders, and SHeaders. | |
| * May waste some. | |
| */ | |
| #define INITIAL_MACHO_HEADR 4*1024 | |
| enum { | |
| MACHO_CPU_AMD64 = (1<<24)|7, | |
| MACHO_CPU_386 = 7, | |
| MACHO_SUBCPU_X86 = 3, | |
| MACHO32SYMSIZE = 12, | |
| MACHO64SYMSIZE = 16, | |
| MACHO_X86_64_RELOC_UNSIGNED = 0, | |
| MACHO_X86_64_RELOC_SIGNED = 1, | |
| MACHO_X86_64_RELOC_BRANCH = 2, | |
| MACHO_X86_64_RELOC_GOT_LOAD = 3, | |
| MACHO_X86_64_RELOC_GOT = 4, | |
| MACHO_X86_64_RELOC_SUBTRACTOR = 5, | |
| MACHO_X86_64_RELOC_SIGNED_1 = 6, | |
| MACHO_X86_64_RELOC_SIGNED_2 = 7, | |
| MACHO_X86_64_RELOC_SIGNED_4 = 8, | |
| MACHO_GENERIC_RELOC_VANILLA = 0, | |
| MACHO_FAKE_GOTPCREL = 100, | |
| }; | |
| void domacho(void); | |
| vlong domacholink(void); | |
| void asmbmacho(void); | |
| void machoadddynlib(char*); |