bfd:
* mach-o.c (bfd_mach_o_build_seg_command): Separate computation of vmsize from filesize. Don't compute offsets or file sizes for zerofill sections.
This commit is contained in:
parent
bbd561712c
commit
e5081f2f8f
|
@ -1,3 +1,9 @@
|
||||||
|
2012-01-11 Iain Sandoe <idsandoe@googlemail.com>
|
||||||
|
|
||||||
|
* mach-o.c (bfd_mach_o_build_seg_command): Separate computation of
|
||||||
|
vmsize from filesize. Don't compute offsets or file sizes for
|
||||||
|
zerofill sections.
|
||||||
|
|
||||||
2012-01-11 Iain Sandoe <idsandoe@googlemail.com>
|
2012-01-11 Iain Sandoe <idsandoe@googlemail.com>
|
||||||
|
|
||||||
* mach-o.c (bfd_mach_o_build_commands): Make the building of each
|
* mach-o.c (bfd_mach_o_build_commands): Make the building of each
|
||||||
|
|
20
bfd/mach-o.c
20
bfd/mach-o.c
|
@ -2023,6 +2023,7 @@ bfd_mach_o_build_seg_command (const char *segment,
|
||||||
|
|
||||||
/* TODO: fix this up for non-MH_OBJECT cases. */
|
/* TODO: fix this up for non-MH_OBJECT cases. */
|
||||||
seg->vmaddr = 0;
|
seg->vmaddr = 0;
|
||||||
|
seg->vmsize = 0;
|
||||||
|
|
||||||
seg->fileoff = mdata->filelen;
|
seg->fileoff = mdata->filelen;
|
||||||
seg->filesize = 0;
|
seg->filesize = 0;
|
||||||
|
@ -2048,9 +2049,21 @@ bfd_mach_o_build_seg_command (const char *segment,
|
||||||
|
|
||||||
bfd_mach_o_append_section_to_segment (seg, sec);
|
bfd_mach_o_append_section_to_segment (seg, sec);
|
||||||
|
|
||||||
if (s->size == 0)
|
s->offset = 0;
|
||||||
s->offset = 0;
|
if (s->size > 0)
|
||||||
else
|
{
|
||||||
|
seg->vmsize = FILE_ALIGN (seg->vmsize, s->align);
|
||||||
|
seg->vmsize += s->size;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Zerofill sections have zero file size & offset,
|
||||||
|
and are not written. */
|
||||||
|
if ((s->flags & BFD_MACH_O_SECTION_TYPE_MASK) == BFD_MACH_O_S_ZEROFILL
|
||||||
|
|| (s->flags & BFD_MACH_O_SECTION_TYPE_MASK)
|
||||||
|
== BFD_MACH_O_S_GB_ZEROFILL)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
if (s->size > 0)
|
||||||
{
|
{
|
||||||
mdata->filelen = FILE_ALIGN (mdata->filelen, s->align);
|
mdata->filelen = FILE_ALIGN (mdata->filelen, s->align);
|
||||||
s->offset = mdata->filelen;
|
s->offset = mdata->filelen;
|
||||||
|
@ -2062,7 +2075,6 @@ bfd_mach_o_build_seg_command (const char *segment,
|
||||||
}
|
}
|
||||||
|
|
||||||
seg->filesize = mdata->filelen - seg->fileoff;
|
seg->filesize = mdata->filelen - seg->fileoff;
|
||||||
seg->vmsize = seg->filesize;
|
|
||||||
|
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue