mirror of
https://sourceware.org/git/binutils-gdb.git
synced 2024-11-27 03:51:15 +08:00
bfd/
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:
parent
0b2de10705
commit
9f4a5bd19a
@ -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.
|
||||
|
29
bfd/mach-o.c
29
bfd/mach-o.c
@ -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:
|
||||
|
11
bfd/mach-o.h
11
bfd/mach-o.h
@ -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;
|
||||
}
|
||||
|
@ -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.
|
||||
|
@ -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:
|
||||
|
@ -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.
|
||||
|
@ -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];
|
||||
|
Loading…
Reference in New Issue
Block a user