aboutsummaryrefslogtreecommitdiff
path: root/bfd/mach-o.h
diff options
context:
space:
mode:
authorRoman Bolshakov <r.bolshakov@yadro.com>2018-11-07 15:20:22 +0000
committerNick Clifton <nickc@redhat.com>2018-11-07 15:20:22 +0000
commitfc7b364aba41819a5d74ae0ac69f050af282d057 (patch)
tree3822fd2dce022a7971badc51cf07800dc103786c /bfd/mach-o.h
parent35ee2dc2e4de8b1ae73f420d5db3375f92300b70 (diff)
downloadfsf-binutils-gdb-fc7b364aba41819a5d74ae0ac69f050af282d057.zip
fsf-binutils-gdb-fc7b364aba41819a5d74ae0ac69f050af282d057.tar.gz
fsf-binutils-gdb-fc7b364aba41819a5d74ae0ac69f050af282d057.tar.bz2
Add support for new load commands added by Apple to the MACH-O file format.
bfd * mach-o.h: Add new enums for BFD_MACH_O_PLATFORM_MACOS, BFD_MACH_O_PLATFORM_IOS, BFD_MACH_O_PLATFORM_TVOS, BFD_MACH_O_PLATFORM_WATCHOS, BFD_MACH_O_PLATFORM_BRIDGEOS, BFD_MACH_O_TOOL_CLANG, BFD_MACH_O_TOOL_SWIFT, BFD_MACH_O_TOOL_LD. (struct bfd_mach_o_note_command): New. (struct bfd_mach_o_build_version_tool): New. (struct bfd_mach_o_build_version_command): New. (bfd_mach_o_read_version_min): Don't split version into a few fields. Rename reserved to sdk. * mach-o.c (bfd_mach_o_read_version_min): Don't split version into a few fields. Rename reserved to sdk. (bfd_mach_o_read_command): Handle LC_VERSION_MIN_TVOS, LC_NOTE, LC_BUILD_VERSION. (bfd_mach_o_read_note): New. (bfd_mach_o_read_build_version): New. PR 23728 binutils* od-macho.c (printf_version): New. (dump_load_command): Use it to print version. Print sdk version. Print version info for watchOS and tvOS. Print LC_NOTE, LC_BUILD_VERSION. (dump_buld_version): New. (bfd_mach_o_platform_name): New (bfd_mach_o_tool_name): New * mach-o/external.h (mach_o_nversion_min_command_external): Rename reserved to sdk. (mach_o_note_command_external): New. (mach_o_build_version_command_external): New. * mach-o/loader.h (BFD_MACH_O_LC_VERSION_MIN_TVOS): Define. (BFD_MACH_O_LC_NOTE): Define.
Diffstat (limited to 'bfd/mach-o.h')
-rw-r--r--bfd/mach-o.h48
1 files changed, 42 insertions, 6 deletions
diff --git a/bfd/mach-o.h b/bfd/mach-o.h
index d80d439..61428d6 100644
--- a/bfd/mach-o.h
+++ b/bfd/mach-o.h
@@ -113,6 +113,18 @@ bfd_mach_o_segment_command;
#define BFD_MACH_O_PROT_WRITE 0x02
#define BFD_MACH_O_PROT_EXECUTE 0x04
+/* Target platforms. */
+#define BFD_MACH_O_PLATFORM_MACOS 1
+#define BFD_MACH_O_PLATFORM_IOS 2
+#define BFD_MACH_O_PLATFORM_TVOS 3
+#define BFD_MACH_O_PLATFORM_WATCHOS 4
+#define BFD_MACH_O_PLATFORM_BRIDGEOS 5
+
+/* Build tools. */
+#define BFD_MACH_O_TOOL_CLANG 1
+#define BFD_MACH_O_TOOL_SWIFT 2
+#define BFD_MACH_O_TOOL_LD 3
+
/* Expanded internal representation of a relocation entry. */
typedef struct bfd_mach_o_reloc_info
{
@@ -519,10 +531,8 @@ bfd_mach_o_dyld_info_command;
typedef struct bfd_mach_o_version_min_command
{
- unsigned char rel;
- unsigned char maj;
- unsigned char min;
- unsigned int reserved;
+ uint32_t version;
+ uint32_t sdk;
}
bfd_mach_o_version_min_command;
@@ -551,6 +561,30 @@ typedef struct bfd_mach_o_source_version_command
}
bfd_mach_o_source_version_command;
+typedef struct bfd_mach_o_note_command
+{
+ char data_owner[16];
+ bfd_uint64_t offset;
+ bfd_uint64_t size;
+}
+bfd_mach_o_note_command;
+
+typedef struct bfd_mach_o_build_version_tool
+{
+ uint32_t tool;
+ uint32_t version;
+}
+bfd_mach_o_build_version_tool;
+
+typedef struct bfd_mach_o_build_version_command
+{
+ uint32_t platform;
+ uint32_t minos;
+ uint32_t sdk;
+ uint32_t ntools;
+}
+bfd_mach_o_build_version_command;
+
typedef struct bfd_mach_o_load_command
{
/* Next command in the single linked list. */
@@ -584,6 +618,8 @@ typedef struct bfd_mach_o_load_command
bfd_mach_o_fvmlib_command fvmlib;
bfd_mach_o_main_command main;
bfd_mach_o_source_version_command source_version;
+ bfd_mach_o_note_command note;
+ bfd_mach_o_build_version_command build_version;
} command;
}
bfd_mach_o_load_command;
@@ -617,10 +653,10 @@ typedef struct mach_o_data_struct
/* A place to stash dwarf2 info for this bfd. */
void *dwarf2_find_line_info;
- /* BFD of .dSYM file. */
+ /* BFD of .dSYM file. */
bfd *dsym_bfd;
- /* Cache of dynamic relocs. */
+ /* Cache of dynamic relocs. */
arelent *dyn_reloc_cache;
}
bfd_mach_o_data_struct;