aboutsummaryrefslogtreecommitdiff
path: root/bfd/mach-o.c
diff options
context:
space:
mode:
authorIain Sandoe <iain@codesourcery.com>2012-01-13 12:08:23 +0000
committerIain Sandoe <iain@codesourcery.com>2012-01-13 12:08:23 +0000
commitbb76d9401ec780f95f7c13a93067ae030cb612e8 (patch)
tree7c337420e5fad1fbaec6ce0528b1c07be015ec7c /bfd/mach-o.c
parentc3402d205655e74dda81fd58387a2d5fac870dea (diff)
downloadgdb-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.c27
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;
}