Index: include/mach-o/external.h |
diff --git a/include/mach-o/external.h b/include/mach-o/external.h |
index ebb09a7761e11d0a659798b1f59e804e5abbfad7..41a2932500ccdd6c5ccfbe8c7d1bb974bca01e71 100644 |
--- a/include/mach-o/external.h |
+++ b/include/mach-o/external.h |
@@ -1,5 +1,5 @@ |
/* Mach-O support for BFD. |
- Copyright 2011 |
+ Copyright 2011, 2012 |
Free Software Foundation, Inc. |
This file is part of BFD, the Binary File Descriptor library. |
@@ -116,12 +116,51 @@ struct mach_o_reloc_info_external |
}; |
#define BFD_MACH_O_RELENT_SIZE 8 |
+/* Relocations are based on 'address' being a section offset and an assumption |
+ that sections are never more than 2^24-1 bytes in size. Relocation data |
+ also carry information on type/size/PC-relative/extern and whether scattered |
+ or not [stored in the MSB of the r_address]. */ |
+ |
+#define BFD_MACH_O_SR_SCATTERED 0x80000000 |
+ |
+/* For a non-scattered reloc, the relocation info is found in r_symbolnum. |
+ Bytes 1 to 3 contain the symbol number (0xffffff, in a non-scattered PAIR). |
+ Byte 4 contains the relocation info - but with differing bit-positions |
+ dependent on target endian-ness - as below. */ |
+ |
+#define BFD_MACH_O_LE_PCREL 0x01 |
+#define BFD_MACH_O_LE_LENGTH_SHIFT 1 |
+#define BFD_MACH_O_LE_EXTERN 0x08 |
+#define BFD_MACH_O_LE_TYPE_SHIFT 4 |
+ |
+#define BFD_MACH_O_BE_PCREL 0x80 |
+#define BFD_MACH_O_BE_LENGTH_SHIFT 5 |
+#define BFD_MACH_O_BE_EXTERN 0x10 |
+#define BFD_MACH_O_BE_TYPE_SHIFT 0 |
+ |
+/* The field sizes are the same for both BE and LE. */ |
+#define BFD_MACH_O_LENGTH_MASK 0x03 |
+#define BFD_MACH_O_TYPE_MASK 0x0f |
+ |
+/* For a scattered reloc entry the info is contained in r_address. There |
+ is no need to discriminate on target endian-ness, since the design was |
+ arranged to produce the same layout on both. Scattered relocations are |
+ only used for local items, therefore there is no 'extern' field. */ |
+ |
+#define BFD_MACH_O_SR_PCREL 0x40000000 |
+#define BFD_MACH_O_GET_SR_LENGTH(s) (((s) >> 28) & 0x3) |
+#define BFD_MACH_O_GET_SR_TYPE(s) (((s) >> 24) & 0x0f) |
+#define BFD_MACH_O_GET_SR_ADDRESS(s) ((s) & 0x00ffffff) |
+#define BFD_MACH_O_SET_SR_LENGTH(l) (((l) & 0x3) << 28) |
+#define BFD_MACH_O_SET_SR_TYPE(t) (((t) & 0xf) << 24) |
+#define BFD_MACH_O_SET_SR_ADDRESS(s) ((s) & 0x00ffffff) |
+ |
struct mach_o_symtab_command_external |
{ |
- unsigned char symoff[4]; |
- unsigned char nsyms[4]; |
- unsigned char stroff[4]; |
- unsigned char strsize[4]; |
+ unsigned char symoff[4]; /* File offset of the symbol table. */ |
+ unsigned char nsyms[4]; /* Number of symbols. */ |
+ unsigned char stroff[4]; /* File offset of the string table. */ |
+ unsigned char strsize[4]; /* String table size. */ |
}; |
struct mach_o_nlist_external |
@@ -255,6 +294,20 @@ struct mach_o_version_min_command_external |
unsigned char reserved[4]; |
}; |
+struct mach_o_encryption_info_command_external |
+{ |
+ unsigned char cryptoff[4]; /* File offset of the encrypted area. */ |
+ unsigned char cryptsize[4]; /* Size of the encrypted area. */ |
+ unsigned char cryptid[4]; /* Encryption method. */ |
+}; |
+ |
+struct mach_o_fvmlib_command_external |
+{ |
+ unsigned char name[4]; /* Offset of the name. */ |
+ unsigned char minor_version[4]; |
+ unsigned char header_addr[4]; |
+}; |
+ |
struct mach_o_fat_header_external |
{ |
unsigned char magic[4]; |