2013-01-31 Tristan Gingold <gingold@adacore.com>

* mach-o.c (bfd_mach_o_scan): Call bfd_mach_o_flatten_sections
	earlier.  Fix status checking of bfd_mach_o_scan_start_address.
	(bfd_mach_o_scan_start_address): Handle LC_MAIN.
This commit is contained in:
Tristan Gingold 2013-01-31 09:55:41 +00:00
parent 393dab1504
commit c0fd7846dc
2 changed files with 21 additions and 2 deletions

View File

@ -1,3 +1,9 @@
2013-01-31 Tristan Gingold <gingold@adacore.com>
* mach-o.c (bfd_mach_o_scan): Call bfd_mach_o_flatten_sections
earlier. Fix status checking of bfd_mach_o_scan_start_address.
(bfd_mach_o_scan_start_address): Handle LC_MAIN.
2013-01-31 Alan Modra <amodra@gmail.com>
David S. Miller <davem@davemloft.net>

View File

@ -3979,6 +3979,18 @@ bfd_mach_o_scan_start_address (bfd *abfd)
cmd = &mdata->commands[i].command.thread;
break;
}
else if (mdata->commands[i].type == BFD_MACH_O_LC_MAIN
&& mdata->nsects > 1)
{
bfd_mach_o_main_command *main_cmd = &mdata->commands[i].command.main;
bfd_mach_o_section *text_sect = mdata->sections[0];
if (text_sect)
{
abfd->start_address = main_cmd->entryoff
+ (text_sect->addr - text_sect->offset);
return TRUE;
}
}
if (cmd == NULL)
return FALSE;
@ -4121,10 +4133,11 @@ bfd_mach_o_scan (bfd *abfd,
}
}
if (bfd_mach_o_scan_start_address (abfd) < 0)
/* Sections should be flatten before scanning start address. */
bfd_mach_o_flatten_sections (abfd);
if (!bfd_mach_o_scan_start_address (abfd))
return FALSE;
bfd_mach_o_flatten_sections (abfd);
return TRUE;
}