mirror of
https://github.com/golang/go
synced 2024-11-26 01:17:57 -07:00
073486c3ed
fix up libmach_amd64 to handle MACH binaries and symbols db now works on mac and linux SVN=122807
70 lines
2.3 KiB
C
70 lines
2.3 KiB
C
// 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.
|
|
|
|
/*
|
|
* Definitions needed for accessing MACH object headers.
|
|
*/
|
|
|
|
typedef struct {
|
|
ulong magic; /* mach magic number identifier */
|
|
ulong cputype; /* cpu specifier */
|
|
ulong cpusubtype; /* machine specifier */
|
|
ulong filetype; /* type of file */
|
|
ulong ncmds; /* number of load commands */
|
|
ulong sizeofcmds; /* the size of all the load commands */
|
|
ulong flags; /* flags */
|
|
ulong reserved; /* reserved */
|
|
} Machhdr;
|
|
|
|
typedef struct {
|
|
ulong type; /* type of load command */
|
|
ulong size; /* total size in bytes */
|
|
} MachCmd;
|
|
|
|
typedef struct {
|
|
MachCmd cmd;
|
|
char segname[16]; /* segment name */
|
|
uvlong vmaddr; /* memory address of this segment */
|
|
uvlong vmsize; /* memory size of this segment */
|
|
uvlong fileoff; /* file offset of this segment */
|
|
uvlong filesize; /* amount to map from the file */
|
|
ulong maxprot; /* maximum VM protection */
|
|
ulong initprot; /* initial VM protection */
|
|
ulong nsects; /* number of sections in segment */
|
|
ulong flags; /* flags */
|
|
} MachSeg64; /* for 64-bit architectures */
|
|
|
|
typedef struct {
|
|
MachCmd cmd;
|
|
ulong fileoff; /* file offset of this segment */
|
|
ulong filesize; /* amount to map from the file */
|
|
} MachSymSeg;
|
|
|
|
typedef struct {
|
|
char sectname[16]; /* name of this section */
|
|
char segname[16]; /* segment this section goes in */
|
|
uvlong addr; /* memory address of this section */
|
|
uvlong size; /* size in bytes of this section */
|
|
ulong offset; /* file offset of this section */
|
|
ulong align; /* section alignment (power of 2) */
|
|
ulong reloff; /* file offset of relocation entries */
|
|
ulong nreloc; /* number of relocation entries */
|
|
ulong flags; /* flags (section type and attributes)*/
|
|
ulong reserved1; /* reserved (for offset or index) */
|
|
ulong reserved2; /* reserved (for count or sizeof) */
|
|
ulong reserved3; /* reserved */
|
|
} MachSect64; /* for 64-bit architectures */
|
|
|
|
enum {
|
|
MACH_CPU_TYPE_X86_64 = (1<<24)|7,
|
|
MACH_CPU_SUBTYPE_X86 = 3,
|
|
MACH_EXECUTABLE_TYPE = 2,
|
|
MACH_SEGMENT_64 = 0x19, /* 64-bit mapped segment */
|
|
MACH_SYMSEG = 3, /* obsolete gdb symtab, reused by go */
|
|
MACH_UNIXTHREAD = 0x5, /* thread (for stack) */
|
|
};
|
|
|
|
|
|
#define MACH_MAG ((0xcf<<24) | (0xfa<<16) | (0xed<<8) | 0xfe)
|