2012-01-04  Tristan Gingold  <gingold@adacore.com>

	* mach-o.h (bfd_mach_o_fvmlib_command): New structure.
	(bfd_mach_o_load_command): Add fvmlib field.

	* mach-o.c (bfd_mach_o_read_fvmlib): New function.
	(bfd_mach_o_read_command): Handle fvmlib.

binutils/
2012-01-04  Tristan Gingold  <gingold@adacore.com>

	* od-macho.c (dump_load_command): Handle fvmlib.

include/mach-o/
2012-01-04  Tristan Gingold  <gingold@adacore.com>

	* external.h (mach_o_fvmlib_command_external): New structure.
This commit is contained in:
Tristan Gingold 2012-01-04 10:37:36 +00:00
parent 0b2de10705
commit 9f4a5bd19a
7 changed files with 73 additions and 1 deletions

View File

@ -1,3 +1,11 @@
2012-01-04 Tristan Gingold <gingold@adacore.com>
* mach-o.h (bfd_mach_o_fvmlib_command): New structure.
(bfd_mach_o_load_command): Add fvmlib field.
* mach-o.c (bfd_mach_o_read_fvmlib): New function.
(bfd_mach_o_read_command): Handle fvmlib.
2012-01-04 Tristan Gingold <gingold@adacore.com>
* mach-o.c (bfd_mach_o_convert_architecture): Reindent.

View File

@ -3044,6 +3044,32 @@ bfd_mach_o_read_prebound_dylib (bfd *abfd ATTRIBUTE_UNUSED,
return 0;
}
static int
bfd_mach_o_read_fvmlib (bfd *abfd, bfd_mach_o_load_command *command)
{
bfd_mach_o_fvmlib_command *fvm = &command->command.fvmlib;
struct mach_o_fvmlib_command_external raw;
unsigned int nameoff;
if (bfd_seek (abfd, command->offset + BFD_MACH_O_LC_SIZE, SEEK_SET) != 0
|| bfd_bread (&raw, sizeof (raw), abfd) != sizeof (raw))
return -1;
nameoff = bfd_h_get_32 (abfd, raw.name);
fvm->minor_version = bfd_h_get_32 (abfd, raw.minor_version);
fvm->header_addr = bfd_h_get_32 (abfd, raw.header_addr);
fvm->name_offset = command->offset + nameoff;
fvm->name_len = command->len - nameoff;
fvm->name_str = bfd_alloc (abfd, fvm->name_len);
if (fvm->name_str == NULL)
return -1;
if (bfd_seek (abfd, fvm->name_offset, SEEK_SET) != 0
|| bfd_bread (fvm->name_str, fvm->name_len, abfd) != fvm->name_len)
return -1;
return 0;
}
static int
bfd_mach_o_read_thread (bfd *abfd, bfd_mach_o_load_command *command)
{
@ -3618,6 +3644,9 @@ bfd_mach_o_read_command (bfd *abfd, bfd_mach_o_load_command *command)
break;
case BFD_MACH_O_LC_LOADFVMLIB:
case BFD_MACH_O_LC_IDFVMLIB:
if (bfd_mach_o_read_fvmlib (abfd, command) != 0)
return -1;
break;
case BFD_MACH_O_LC_IDENT:
case BFD_MACH_O_LC_FVMFILE:
case BFD_MACH_O_LC_PREPAGE:

View File

@ -450,6 +450,16 @@ typedef struct bfd_mach_o_str_command
}
bfd_mach_o_str_command;
typedef struct bfd_mach_o_fvmlib_command
{
unsigned int name_offset;
unsigned int name_len;
char *name_str;
unsigned int minor_version;
unsigned int header_addr;
}
bfd_mach_o_fvmlib_command;
typedef struct bfd_mach_o_dyld_info_command
{
/* File offset and size to rebase info. */
@ -512,6 +522,7 @@ typedef struct bfd_mach_o_load_command
bfd_mach_o_dyld_info_command dyld_info;
bfd_mach_o_version_min_command version_min;
bfd_mach_o_encryption_info_command encryption_info;
bfd_mach_o_fvmlib_command fvmlib;
}
command;
}

View File

@ -1,3 +1,7 @@
2012-01-04 Tristan Gingold <gingold@adacore.com>
* od-macho.c (dump_load_command): Handle fvmlib.
2012-01-04 Tristan Gingold <gingold@adacore.com>
* od-macho.c: Update copyright year.

View File

@ -896,8 +896,8 @@ dump_load_command (bfd *abfd, bfd_mach_o_load_command *cmd,
dylib->current_version);
printf (" comptibility version: 0x%08lx\n",
dylib->compatibility_version);
break;
}
break;
case BFD_MACH_O_LC_LOAD_DYLINKER:
case BFD_MACH_O_LC_ID_DYLINKER:
printf (" %s\n", cmd->command.dylinker.name_str);
@ -920,6 +920,15 @@ dump_load_command (bfd *abfd, bfd_mach_o_load_command *cmd,
putchar ('\n');
dump_dysymtab (abfd, cmd, verbose);
break;
case BFD_MACH_O_LC_LOADFVMLIB:
case BFD_MACH_O_LC_IDFVMLIB:
{
bfd_mach_o_fvmlib_command *fvmlib = &cmd->command.fvmlib;
printf (" %s\n", fvmlib->name_str);
printf (" minor version: 0x%08x\n", fvmlib->minor_version);
printf (" header address: 0x%08x\n", fvmlib->header_addr);
}
break;
case BFD_MACH_O_LC_CODE_SIGNATURE:
case BFD_MACH_O_LC_SEGMENT_SPLIT_INFO:
case BFD_MACH_O_LC_FUNCTION_STARTS:

View File

@ -1,3 +1,7 @@
2012-01-04 Tristan Gingold <gingold@adacore.com>
* external.h (mach_o_fvmlib_command_external): New structure.
2012-01-04 Tristan Gingold <gingold@adacore.com>
* loader.h: Update copyright year.

View File

@ -262,6 +262,13 @@ struct mach_o_encryption_info_command_external
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];