mirror of
https://github.com/bminor/binutils-gdb.git
synced 2025-12-26 17:18:55 +00:00
mach-o: layout executables
bfd/ * mach-o.h (bfd_mach_o_dyld_info_command): Add rebase_content, bind_content, weak_bind_content, lazy_bind_content, export_content. (bfd_mach_o_load_command): Add comments, add next field. (mach_o_data_struct): Replace commands field by first_command and last_command. * mach-o.c (bfd_mach_o_append_command): New function. (bfd_mach_o_bfd_copy_private_symbol_data): Add blank lines. (bfd_mach_o_bfd_copy_private_section_data): Check flavour, copy fields. (bfd_mach_o_bfd_copy_private_header_data): Copy load commands. (bfd_mach_o_pad4, bfd_mach_o_pad_command): New functions. (bfd_mach_o_write_thread): Use macro instead of literal. (bfd_mach_o_write_dylinker, bfd_mach_o_write_dylib) (bfd_mach_o_write_main, bfd_mach_o_write_dyld_info): New functions. (bfd_mach_o_write_symtab_content): New function (extracted from bfd_mach_o_write_symtab). (bfd_mach_o_write_symtab): Split. (bfd_mach_o_count_indirect_symbols): Move (bfd_mach_o_build_dysymtab): Remove layout code. (bfd_mach_o_write_contents): Rewritten to build commands in order. (bfd_mach_o_count_sections_for_seg): Remove. (bfd_mach_o_build_obj_seg_command): New function (extracted from bfd_mach_o_build_seg_command). (bfd_mach_o_build_exec_seg_command): New function. (bfd_mach_o_build_dysymtab_command): Remove. (bfd_mach_o_layout_commands): New function. (bfd_mach_o_init_segment): New function. (bfd_mach_o_build_commands): Major rework to handle non-object files. (bfd_mach_o_alloc_and_read, bfd_mach_o_read_dyld_content): New function. (bfd_mach_o_read_dyld_info): Clear content fields. (bfd_mach_o_read_segment): Adjust call. (bfd_mach_o_flatten_sections): Adjust as now load commands are chained. (bfd_mach_o_scan_start_address, bfd_mach_o_scan) (bfd_mach_o_mkobject_init, bfd_mach_o_get_base_address) (bfd_mach_o_lookup_command, bfd_mach_o_core_fetch_environment): Likewise. binutils/ * od-macho.c (dump_section_map): Adjust as load commands are now chained. (dump_load_command, dump_section_content): Likewise.
This commit is contained in:
@@ -317,22 +317,22 @@ static void
|
||||
dump_section_map (bfd *abfd)
|
||||
{
|
||||
bfd_mach_o_data_struct *mdata = bfd_mach_o_get_data (abfd);
|
||||
unsigned int i;
|
||||
bfd_mach_o_load_command *cmd;
|
||||
unsigned int sec_nbr = 0;
|
||||
|
||||
fputs (_("Segments and Sections:\n"), stdout);
|
||||
fputs (_(" #: Segment name Section name Address\n"), stdout);
|
||||
|
||||
for (i = 0; i < mdata->header.ncmds; i++)
|
||||
for (cmd = mdata->first_command; cmd != NULL; cmd = cmd->next)
|
||||
{
|
||||
bfd_mach_o_segment_command *seg;
|
||||
bfd_mach_o_section *sec;
|
||||
|
||||
if (mdata->commands[i].type != BFD_MACH_O_LC_SEGMENT
|
||||
&& mdata->commands[i].type != BFD_MACH_O_LC_SEGMENT_64)
|
||||
if (cmd->type != BFD_MACH_O_LC_SEGMENT
|
||||
&& cmd->type != BFD_MACH_O_LC_SEGMENT_64)
|
||||
continue;
|
||||
|
||||
seg = &mdata->commands[i].command.segment;
|
||||
seg = &cmd->command.segment;
|
||||
|
||||
printf ("[Segment %-16s ", seg->segname);
|
||||
printf_vma (seg->vmaddr);
|
||||
@@ -1644,12 +1644,11 @@ static void
|
||||
dump_load_commands (bfd *abfd, unsigned int cmd32, unsigned int cmd64)
|
||||
{
|
||||
bfd_mach_o_data_struct *mdata = bfd_mach_o_get_data (abfd);
|
||||
bfd_mach_o_load_command *cmd;
|
||||
unsigned int i;
|
||||
|
||||
for (i = 0; i < mdata->header.ncmds; i++)
|
||||
for (cmd = mdata->first_command, i = 0; cmd != NULL; cmd = cmd->next, i++)
|
||||
{
|
||||
bfd_mach_o_load_command *cmd = &mdata->commands[i];
|
||||
|
||||
if (cmd32 == 0)
|
||||
dump_load_command (abfd, cmd, i, FALSE);
|
||||
else if (cmd->type == cmd32 || cmd->type == cmd64)
|
||||
@@ -2070,11 +2069,10 @@ dump_section_content (bfd *abfd,
|
||||
void (*dump)(bfd*, const unsigned char*, bfd_size_type))
|
||||
{
|
||||
bfd_mach_o_data_struct *mdata = bfd_mach_o_get_data (abfd);
|
||||
unsigned int i;
|
||||
bfd_mach_o_load_command *cmd;
|
||||
|
||||
for (i = 0; i < mdata->header.ncmds; i++)
|
||||
for (cmd = mdata->first_command; cmd != NULL; cmd = cmd->next)
|
||||
{
|
||||
bfd_mach_o_load_command *cmd = &mdata->commands[i];
|
||||
if (cmd->type == BFD_MACH_O_LC_SEGMENT
|
||||
|| cmd->type == BFD_MACH_O_LC_SEGMENT_64)
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user