summaryrefslogtreecommitdiff
path: root/bfd/peXXigen.c
diff options
context:
space:
mode:
authorH.J. Lu <hjl@lucon.org>2007-03-22 15:52:29 +0000
committerH.J. Lu <hjl@lucon.org>2007-03-22 15:52:29 +0000
commitf7fa3b0ef59335564611e9329cde71508511325e (patch)
tree60867c7f1b4ec42295fc95bba5954f5687037588 /bfd/peXXigen.c
parentc52abb21c958712db8d79ac1fa9ab8851a178583 (diff)
downloadbinutils-redhat-f7fa3b0ef59335564611e9329cde71508511325e.tar.gz
bfd/
2003-03-22 H.J. Lu <hongjiu.lu@intel.com> PR ld/4210 * peXXigen.c (_bfd_XXi_swap_aouthdr_out): Use the virtual address and virtual size of the last section for the image size. ld/testsuite/ 2003-03-22 H.J. Lu <hongjiu.lu@intel.com> PR ld/4210 * ld-pe/image_size.d: New file. * ld-pe/image_size.s: Likewise. * ld-pe/image_size.t: Likewise. * ld-pe/pe.exp: Run image_size.
Diffstat (limited to 'bfd/peXXigen.c')
-rw-r--r--bfd/peXXigen.c12
1 files changed, 9 insertions, 3 deletions
diff --git a/bfd/peXXigen.c b/bfd/peXXigen.c
index 2454436308..bbb3c77b35 100644
--- a/bfd/peXXigen.c
+++ b/bfd/peXXigen.c
@@ -645,16 +645,22 @@ _bfd_XXi_swap_aouthdr_out (bfd * abfd, void * in, void * out)
in the virt_size field). Files have been seen (from MSVC
5.0 link.exe) where the file size of the .data segment is
quite small compared to the virtual size. Without this
- fix, strip munges the file. */
+ fix, strip munges the file.
+
+ FIXME: We need to handle holes between sections, which may
+ happpen when we covert from another format. We just use
+ the virtual address and virtual size of the last section
+ for the image size. */
if (coff_section_data (abfd, sec) != NULL
&& pei_section_data (abfd, sec) != NULL)
- isize += SA (FA (pei_section_data (abfd, sec)->virt_size));
+ isize = (sec->vma - extra->ImageBase
+ + SA (FA (pei_section_data (abfd, sec)->virt_size)));
}
aouthdr_in->dsize = dsize;
aouthdr_in->tsize = tsize;
extra->SizeOfHeaders = hsize;
- extra->SizeOfImage = SA (hsize) + isize;
+ extra->SizeOfImage = isize;
}
H_PUT_16 (abfd, aouthdr_in->magic, aouthdr_out->standard.magic);