1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273
|
/* Mach-O support for BFD.
Copyright 2011
Free Software Foundation, Inc.
This file is part of BFD, the Binary File Descriptor library.
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
MA 02110-1301, USA. */
#ifndef _MACH_O_EXTERNAL_H
#define _MACH_O_EXTERNAL_H
struct mach_o_header_external
{
unsigned char magic[4]; /* Magic number. */
unsigned char cputype[4]; /* CPU that this object is for. */
unsigned char cpusubtype[4]; /* CPU subtype. */
unsigned char filetype[4]; /* Type of file. */
unsigned char ncmds[4]; /* Number of load commands. */
unsigned char sizeofcmds[4]; /* Total size of load commands. */
unsigned char flags[4]; /* Flags. */
unsigned char reserved[4]; /* Reserved (on 64-bit version only). */
};
#define BFD_MACH_O_HEADER_SIZE 28
#define BFD_MACH_O_HEADER_64_SIZE 32
/* 32-bit section header. */
struct mach_o_section_32_external
{
unsigned char sectname[16]; /* Section name. */
unsigned char segname[16]; /* Segment that the section belongs to. */
unsigned char addr[4]; /* Address of this section in memory. */
unsigned char size[4]; /* Size in bytes of this section. */
unsigned char offset[4]; /* File offset of this section. */
unsigned char align[4]; /* log2 of this section's alignment. */
unsigned char reloff[4]; /* File offset of this section's relocs. */
unsigned char nreloc[4]; /* Number of relocs for this section. */
unsigned char flags[4]; /* Section flags/attributes. */
unsigned char reserved1[4];
unsigned char reserved2[4];
};
#define BFD_MACH_O_SECTION_SIZE 68
/* 64-bit section header. */
struct mach_o_section_64_external
{
unsigned char sectname[16]; /* Section name. */
unsigned char segname[16]; /* Segment that the section belongs to. */
unsigned char addr[8]; /* Address of this section in memory. */
unsigned char size[8]; /* Size in bytes of this section. */
unsigned char offset[4]; /* File offset of this section. */
unsigned char align[4]; /* log2 of this section's alignment. */
unsigned char reloff[4]; /* File offset of this section's relocs. */
unsigned char nreloc[4]; /* Number of relocs for this section. */
unsigned char flags[4]; /* Section flags/attributes. */
unsigned char reserved1[4];
unsigned char reserved2[4];
unsigned char reserved3[4];
};
#define BFD_MACH_O_SECTION_64_SIZE 80
struct mach_o_load_command_external
{
unsigned char cmd[4]; /* The type of load command. */
unsigned char cmdsize[4]; /* Size in bytes of entire command. */
};
#define BFD_MACH_O_LC_SIZE 8
struct mach_o_segment_command_32_external
{
unsigned char segname[16]; /* Name of this segment. */
unsigned char vmaddr[4]; /* Virtual memory address of this segment. */
unsigned char vmsize[4]; /* Size there, in bytes. */
unsigned char fileoff[4]; /* Offset in bytes of the data to be mapped. */
unsigned char filesize[4]; /* Size in bytes on disk. */
unsigned char maxprot[4]; /* Maximum permitted vm protection. */
unsigned char initprot[4]; /* Initial vm protection. */
unsigned char nsects[4]; /* Number of sections in this segment. */
unsigned char flags[4]; /* Flags that affect the loading. */
};
#define BFD_MACH_O_LC_SEGMENT_SIZE 56 /* Include the header. */
struct mach_o_segment_command_64_external
{
unsigned char segname[16]; /* Name of this segment. */
unsigned char vmaddr[8]; /* Virtual memory address of this segment. */
unsigned char vmsize[8]; /* Size there, in bytes. */
unsigned char fileoff[8]; /* Offset in bytes of the data to be mapped. */
unsigned char filesize[8]; /* Size in bytes on disk. */
unsigned char maxprot[4]; /* Maximum permitted vm protection. */
unsigned char initprot[4]; /* Initial vm protection. */
unsigned char nsects[4]; /* Number of sections in this segment. */
unsigned char flags[4]; /* Flags that affect the loading. */
};
#define BFD_MACH_O_LC_SEGMENT_64_SIZE 72 /* Include the header. */
struct mach_o_reloc_info_external
{
unsigned char r_address[4];
unsigned char r_symbolnum[4];
};
#define BFD_MACH_O_RELENT_SIZE 8
struct mach_o_symtab_command_external
{
unsigned char symoff[4];
unsigned char nsyms[4];
unsigned char stroff[4];
unsigned char strsize[4];
};
struct mach_o_nlist_external
{
unsigned char n_strx[4];
unsigned char n_type[1];
unsigned char n_sect[1];
unsigned char n_desc[2];
unsigned char n_value[4];
};
#define BFD_MACH_O_NLIST_SIZE 12
struct mach_o_nlist_64_external
{
unsigned char n_strx[4];
unsigned char n_type[1];
unsigned char n_sect[1];
unsigned char n_desc[2];
unsigned char n_value[8];
};
#define BFD_MACH_O_NLIST_64_SIZE 16
struct mach_o_thread_command_external
{
unsigned char flavour[4];
unsigned char count[4];
};
/* For commands that just have a string or a path. */
struct mach_o_str_command_external
{
unsigned char str[4];
};
struct mach_o_dylib_command_external
{
unsigned char name[4];
unsigned char timestamp[4];
unsigned char current_version[4];
unsigned char compatibility_version[4];
};
struct mach_o_dysymtab_command_external
{
unsigned char ilocalsym[4]; /* Index of. */
unsigned char nlocalsym[4]; /* Number of. */
unsigned char iextdefsym[4];
unsigned char nextdefsym[4];
unsigned char iundefsym[4];
unsigned char nundefsym[4];
unsigned char tocoff[4];
unsigned char ntoc[4];
unsigned char modtaboff[4];
unsigned char nmodtab[4];
unsigned char extrefsymoff[4];
unsigned char nextrefsyms[4];
unsigned char indirectsymoff[4];
unsigned char nindirectsyms[4];
unsigned char extreloff[4];
unsigned char nextrel[4];
unsigned char locreloff[4];
unsigned char nlocrel[4];
};
struct mach_o_dylib_module_external
{
unsigned char module_name[4];
unsigned char iextdefsym[4];
unsigned char nextdefsym[4];
unsigned char irefsym[4];
unsigned char nrefsym[4];
unsigned char ilocalsym[4];
unsigned char nlocalsym[4];
unsigned char iextrel[4];
unsigned char nextrel[4];
unsigned char iinit_iterm[4];
unsigned char ninit_nterm[4];
unsigned char objc_module_info_addr[4];
unsigned char objc_module_info_size[4];
};
#define BFD_MACH_O_DYLIB_MODULE_SIZE 52
struct mach_o_dylib_module_64_external
{
unsigned char module_name[4];
unsigned char iextdefsym[4];
unsigned char nextdefsym[4];
unsigned char irefsym[4];
unsigned char nrefsym[4];
unsigned char ilocalsym[4];
unsigned char nlocalsym[4];
unsigned char iextrel[4];
unsigned char nextrel[4];
unsigned char iinit_iterm[4];
unsigned char ninit_nterm[4];
unsigned char objc_module_info_size[4];
unsigned char objc_module_info_addr[8];
};
#define BFD_MACH_O_DYLIB_MODULE_64_SIZE 56
struct mach_o_dylib_table_of_contents_external
{
unsigned char symbol_index[4];
unsigned char module_index[4];
};
#define BFD_MACH_O_TABLE_OF_CONTENT_SIZE 8
struct mach_o_linkedit_data_command_external
{
unsigned char dataoff[4];
unsigned char datasize[4];
};
struct mach_o_dyld_info_command_external
{
unsigned char rebase_off[4];
unsigned char rebase_size[4];
unsigned char bind_off[4];
unsigned char bind_size[4];
unsigned char weak_bind_off[4];
unsigned char weak_bind_size[4];
unsigned char lazy_bind_off[4];
unsigned char lazy_bind_size[4];
unsigned char export_off[4];
unsigned char export_size[4];
};
struct mach_o_version_min_command_external
{
unsigned char version[4];
unsigned char reserved[4];
};
struct mach_o_fat_header_external
{
unsigned char magic[4];
unsigned char nfat_arch[4]; /* Number of components. */
};
struct mach_o_fat_arch_external
{
unsigned char cputype[4];
unsigned char cpusubtype[4];
unsigned char offset[4]; /* File offset of the member. */
unsigned char size[4]; /* Size of the member. */
unsigned char align[4]; /* Power of 2. */
};
#endif /* _MACH_O_EXTERNAL_H */
|