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.
This commit is contained in:
H.J. Lu 2007-03-22 15:52:29 +00:00
parent 0920dee7ba
commit 50572669e4
7 changed files with 59 additions and 3 deletions

View file

@ -1,3 +1,10 @@
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.
2007-03-22 H.J. Lu <hongjiu.lu@intel.com>
PR ld/4007

View file

@ -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);

View file

@ -1,3 +1,12 @@
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.
2007-03-22 H.J. Lu <hongjiu.lu@intel.com>
PR ld/4007

View file

@ -0,0 +1,9 @@
#name: PE-COFF SizeOfImage
#ld: -T image_size.t
#objdump: -p
#target: i*86-*-mingw32
.*: file format .*
#...
SizeOfImage 00004000
#...

View file

@ -0,0 +1,8 @@
.text
.global _start
_start:
.byte 1
.global data
.data
data:
.byte 2

View file

@ -0,0 +1,15 @@
SECTIONS
{
. = SIZEOF_HEADERS;
. = ALIGN(__section_alignment__);
.text __image_base__ + ( __section_alignment__ < 0x1000 ? . : __section_alignment__ ) :
{
*(.text)
}
. = . + 0x1000;
.data BLOCK(__section_alignment__) :
{
*(.data)
}
/DISCARD/ : { *(.*) }
}

View file

@ -32,3 +32,5 @@ set pe_tests {
}
run_ld_link_tests $pe_tests
run_dump_test "image_size"