diff options
author | Tristan Gingold <gingold@adacore.com> | 2013-01-31 09:55:41 +0000 |
---|---|---|
committer | Tristan Gingold <gingold@adacore.com> | 2013-01-31 09:55:41 +0000 |
commit | c0fd7846dcd895eff508728d5741aee47112a469 (patch) | |
tree | 1afe3931cca64ade2e87848b72ed4234b0c007ad | |
parent | 393dab15043bf537185da910c00e5c4ed58b7845 (diff) | |
download | gdb-c0fd7846dcd895eff508728d5741aee47112a469.zip gdb-c0fd7846dcd895eff508728d5741aee47112a469.tar.gz gdb-c0fd7846dcd895eff508728d5741aee47112a469.tar.bz2 |
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.
-rw-r--r-- | bfd/ChangeLog | 6 | ||||
-rw-r--r-- | bfd/mach-o.c | 17 |
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; } |