diff options
author | Iain Sandoe <iain@codesourcery.com> | 2012-01-13 12:08:23 +0000 |
---|---|---|
committer | Iain Sandoe <iain@codesourcery.com> | 2012-01-13 12:08:23 +0000 |
commit | bb76d9401ec780f95f7c13a93067ae030cb612e8 (patch) | |
tree | 7c337420e5fad1fbaec6ce0528b1c07be015ec7c /bfd/mach-o.c | |
parent | c3402d205655e74dda81fd58387a2d5fac870dea (diff) | |
download | gdb-bb76d9401ec780f95f7c13a93067ae030cb612e8.zip gdb-bb76d9401ec780f95f7c13a93067ae030cb612e8.tar.gz gdb-bb76d9401ec780f95f7c13a93067ae030cb612e8.tar.bz2 |
order relocs after segments for mach-o
bfd:
* mach-o.c (bfd_mach_o_write_relocs): Move compuation of relocs file
position from here... to (bfd_mach_o_build_seg_command): Here.
Diffstat (limited to 'bfd/mach-o.c')
-rw-r--r-- | bfd/mach-o.c | 27 |
1 files changed, 19 insertions, 8 deletions
diff --git a/bfd/mach-o.c b/bfd/mach-o.c index c519663..2625319 100644 --- a/bfd/mach-o.c +++ b/bfd/mach-o.c @@ -1185,7 +1185,6 @@ bfd_mach_o_canonicalize_dynamic_reloc (bfd *abfd, arelent **rels, static bfd_boolean bfd_mach_o_write_relocs (bfd *abfd, bfd_mach_o_section *section) { - bfd_mach_o_data_struct *mdata = bfd_mach_o_get_data (abfd); unsigned int i; arelent **entries; asection *sec; @@ -1198,13 +1197,6 @@ bfd_mach_o_write_relocs (bfd *abfd, bfd_mach_o_section *section) if (bed->_bfd_mach_o_swap_reloc_out == NULL) return TRUE; - /* Allocate relocation room. */ - mdata->filelen = FILE_ALIGN(mdata->filelen, 2); - section->nreloc = sec->reloc_count; - sec->rel_filepos = mdata->filelen; - section->reloff = sec->rel_filepos; - mdata->filelen += sec->reloc_count * BFD_MACH_O_RELENT_SIZE; - if (bfd_seek (abfd, section->reloff, SEEK_SET) != 0) return FALSE; @@ -2075,6 +2067,25 @@ bfd_mach_o_build_seg_command (const char *segment, } seg->filesize = mdata->filelen - seg->fileoff; + seg->filesize = FILE_ALIGN(seg->filesize, 2); + + /* Allocate relocation room. */ + mdata->filelen = FILE_ALIGN(mdata->filelen, 2); + + for (i = 0; i < mdata->nsects; ++i) + { + bfd_mach_o_section *ms = mdata->sections[i]; + asection *sec = ms->bfdsection; + + if ((ms->nreloc = sec->reloc_count) == 0) + { + ms->reloff = 0; + continue; + } + sec->rel_filepos = mdata->filelen; + ms->reloff = sec->rel_filepos; + mdata->filelen += sec->reloc_count * BFD_MACH_O_RELENT_SIZE; + } return TRUE; } |