github.com/bgentry/go@v0.0.0-20150121062915-6cf5a733d54d/src/cmd/ld/macho.h (about)

     1  // Copyright 2009 The Go Authors. All rights reserved.
     2  // Use of this source code is governed by a BSD-style
     3  // license that can be found in the LICENSE file.
     4  
     5  typedef struct MachoHdr MachoHdr;
     6  struct MachoHdr {
     7  	uint32	cpu;
     8  	uint32	subcpu;
     9  };
    10  
    11  typedef struct MachoSect MachoSect;
    12  struct MachoSect {
    13  	char*	name;
    14  	char*	segname;
    15  	uint64	addr;
    16  	uint64	size;
    17  	uint32	off;
    18  	uint32	align;
    19  	uint32	reloc;
    20  	uint32	nreloc;
    21  	uint32	flag;
    22  	uint32	res1;
    23  	uint32	res2;
    24  };
    25  
    26  typedef struct MachoSeg MachoSeg;
    27  struct MachoSeg {
    28  	char*	name;
    29  	uint64	vsize;
    30  	uint64	vaddr;
    31  	uint64	fileoffset;
    32  	uint64	filesize;
    33  	uint32	prot1;
    34  	uint32	prot2;
    35  	uint32	nsect;
    36  	uint32	msect;
    37  	MachoSect	*sect;
    38  	uint32	flag;
    39  };
    40  
    41  typedef struct MachoLoad MachoLoad;
    42  struct MachoLoad {
    43  	uint32	type;
    44  	uint32	ndata;
    45  	uint32	*data;
    46  };
    47  
    48  MachoHdr*	getMachoHdr(void);
    49  MachoSeg*	newMachoSeg(char*, int);
    50  MachoSect*	newMachoSect(MachoSeg*, char*, char*);
    51  MachoLoad*	newMachoLoad(uint32, uint32);
    52  int	machowrite(void);
    53  void	machoinit(void);
    54  void	machosymorder(void);
    55  void	machoemitreloc(void);
    56  int	machoreloc1(Reloc*, vlong);
    57  
    58  /*
    59   * Total amount of space to reserve at the start of the file
    60   * for Header, PHeaders, and SHeaders.
    61   * May waste some.
    62   */
    63  #define	INITIAL_MACHO_HEADR	4*1024
    64  
    65  enum {
    66  	MACHO_CPU_AMD64 = (1<<24)|7,
    67  	MACHO_CPU_386 = 7,
    68  	MACHO_SUBCPU_X86 = 3,
    69  
    70  	MACHO32SYMSIZE = 12,
    71  	MACHO64SYMSIZE = 16,
    72  	
    73  	MACHO_X86_64_RELOC_UNSIGNED = 0,
    74  	MACHO_X86_64_RELOC_SIGNED = 1,
    75  	MACHO_X86_64_RELOC_BRANCH = 2,
    76  	MACHO_X86_64_RELOC_GOT_LOAD = 3,
    77  	MACHO_X86_64_RELOC_GOT = 4,
    78  	MACHO_X86_64_RELOC_SUBTRACTOR = 5,
    79  	MACHO_X86_64_RELOC_SIGNED_1 = 6,
    80  	MACHO_X86_64_RELOC_SIGNED_2 = 7,
    81  	MACHO_X86_64_RELOC_SIGNED_4 = 8,
    82  	
    83  	MACHO_GENERIC_RELOC_VANILLA = 0,
    84  	
    85  	MACHO_FAKE_GOTPCREL = 100,
    86  };
    87  
    88  void	domacho(void);
    89  vlong	domacholink(void);
    90  void	asmbmacho(void);
    91  void	machoadddynlib(char*);