diff options
Diffstat (limited to 'src/cmd/ld/macho.h')
-rw-r--r-- | src/cmd/ld/macho.h | 94 |
1 files changed, 94 insertions, 0 deletions
diff --git a/src/cmd/ld/macho.h b/src/cmd/ld/macho.h new file mode 100644 index 000000000..f55104150 --- /dev/null +++ b/src/cmd/ld/macho.h @@ -0,0 +1,94 @@ +// 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*); |