This is the mail archive of the binutils@sourceware.org mailing list for the binutils project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [Patch mach-o] don't set file offsets / write .zerofill sections


On Jan 11, 2012, at 3:36 PM, Iain Sandoe wrote:

> zerofill sections don't occupy any disk space - and should not have offsets.
> which we currently compute, an oversight of mine not to change this when adding support for zerofill,
> corrected as below,
> OK?

Yes.

Thanks.

> Iain
> 
> 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.
> 
> 
> bfd/mach-o.c |   20 ++++++++++++++++----
> 1 files changed, 16 insertions(+), 4 deletions(-)
> 
> diff --git a/bfd/mach-o.c b/bfd/mach-o.c
> index 1234899..1a71216 100644
> --- a/bfd/mach-o.c
> +++ b/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.  */
>   seg->vmaddr = 0;
> +  seg->vmsize = 0;
> 
>   seg->fileoff = mdata->filelen;
>   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);
> 
> -      if (s->size == 0)
> -         s->offset = 0;
> -      else
> +      s->offset = 0;
> +      if (s->size > 0)
> +       {
> +          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);
>           s->offset = mdata->filelen;
> @@ -2062,7 +2075,6 @@ bfd_mach_o_build_seg_command (const char *segment,
>     }
> 
>   seg->filesize = mdata->filelen - seg->fileoff;
> -  seg->vmsize = seg->filesize;
> 
>   return TRUE;
> }
> 


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]