diff options
Diffstat (limited to 'bfd')
-rw-r--r-- | bfd/ChangeLog | 10 | ||||
-rw-r--r-- | bfd/mach-o.c | 22 | ||||
-rw-r--r-- | bfd/mach-o.h | 12 |
3 files changed, 42 insertions, 2 deletions
diff --git a/bfd/ChangeLog b/bfd/ChangeLog index 0974a0a..e3d2a48 100644 --- a/bfd/ChangeLog +++ b/bfd/ChangeLog @@ -1,3 +1,13 @@ +2012-01-04 Tristan Gingold <gingold@adacore.com> + + * mach-o.h: Reindent header. + (bfd_mach_o_encryption_info_command): New structure. + (bfd_mach_o_load_command): Add encryption_info field. + + * mach-o.c (bfd_mach_o_read_encryption_info): New function. + (bfd_mach_o_read_command): Handle BFD_MACH_O_LC_ENCRYPTION_INFO. + (bfd_mach_o_read_command): Adjust error message. + 2012-01-04 Shinichiro Hamaji <shinichiro.hamaji@gmail.com> * dwarf2.c (_bfd_dwarf2_slurp_debug_info): Factor out the part diff --git a/bfd/mach-o.c b/bfd/mach-o.c index 30b77d8..57c37d8 100644 --- a/bfd/mach-o.c +++ b/bfd/mach-o.c @@ -3411,6 +3411,22 @@ bfd_mach_o_read_version_min (bfd *abfd, bfd_mach_o_load_command *command) return TRUE; } +static bfd_boolean +bfd_mach_o_read_encryption_info (bfd *abfd, bfd_mach_o_load_command *command) +{ + bfd_mach_o_encryption_info_command *cmd = &command->command.encryption_info; + struct mach_o_encryption_info_command_external raw; + + if (bfd_seek (abfd, command->offset + BFD_MACH_O_LC_SIZE, SEEK_SET) != 0 + || bfd_bread (&raw, sizeof (raw), abfd) != sizeof (raw)) + return FALSE; + + cmd->cryptoff = bfd_get_32 (abfd, raw.cryptoff); + cmd->cryptsize = bfd_get_32 (abfd, raw.cryptsize); + cmd->cryptid = bfd_get_32 (abfd, raw.cryptid); + return TRUE; +} + static int bfd_mach_o_read_segment (bfd *abfd, bfd_mach_o_load_command *command, @@ -3587,6 +3603,10 @@ bfd_mach_o_read_command (bfd *abfd, bfd_mach_o_load_command *command) if (bfd_mach_o_read_linkedit (abfd, command) != 0) return -1; break; + case BFD_MACH_O_LC_ENCRYPTION_INFO: + if (!bfd_mach_o_read_encryption_info (abfd, command)) + return -1; + break; case BFD_MACH_O_LC_DYLD_INFO: if (bfd_mach_o_read_dyld_info (abfd, command) != 0) return -1; @@ -3597,7 +3617,7 @@ bfd_mach_o_read_command (bfd *abfd, bfd_mach_o_load_command *command) return -1; break; default: - (*_bfd_error_handler)(_("%B: unable to read unknown load command 0x%lx"), + (*_bfd_error_handler)(_("%B: unknown load command 0x%lx"), abfd, (unsigned long) command->type); break; } diff --git a/bfd/mach-o.h b/bfd/mach-o.h index da4363b..b32b6a8 100644 --- a/bfd/mach-o.h +++ b/bfd/mach-o.h @@ -1,6 +1,7 @@ /* Mach-O support for BFD. Copyright 1999, 2000, 2001, 2002, 2003, 2005, 2007, 2008, 2009, 2011, - 2012 Free Software Foundation, Inc. + 2012 + Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. @@ -482,6 +483,14 @@ typedef struct bfd_mach_o_version_min_command } bfd_mach_o_version_min_command; +typedef struct bfd_mach_o_encryption_info_command +{ + unsigned int cryptoff; + unsigned int cryptsize; + unsigned int cryptid; +} +bfd_mach_o_encryption_info_command; + typedef struct bfd_mach_o_load_command { bfd_mach_o_load_command_type type; @@ -502,6 +511,7 @@ typedef struct bfd_mach_o_load_command bfd_mach_o_str_command str; bfd_mach_o_dyld_info_command dyld_info; bfd_mach_o_version_min_command version_min; + bfd_mach_o_encryption_info_command encryption_info; } command; } |