aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--bfd/ChangeLog6
-rw-r--r--bfd/mach-o.c17
2 files changed, 21 insertions, 2 deletions
diff --git a/bfd/ChangeLog b/bfd/ChangeLog
index c53af4b..470ecb9 100644
--- a/bfd/ChangeLog
+++ b/bfd/ChangeLog
@@ -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>
diff --git a/bfd/mach-o.c b/bfd/mach-o.c
index 7f4b968..e3bfa58 100644
--- a/bfd/mach-o.c
+++ b/bfd/mach-o.c
@@ -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;
}