summaryrefslogtreecommitdiff
path: root/src/cmd/ld/macho.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/cmd/ld/macho.h')
-rw-r--r--src/cmd/ld/macho.h94
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*);