diff options
author | H.J. Lu <hjl.tools@gmail.com> | 2007-03-22 15:52:29 +0000 |
---|---|---|
committer | H.J. Lu <hjl.tools@gmail.com> | 2007-03-22 15:52:29 +0000 |
commit | 50572669e457b60b8eb8e2a10fcd22d217dc7e09 (patch) | |
tree | 8e7179d30424c73170e205c7d60aa59e864f7c78 | |
parent | 0920dee7bad8a96ae1866b9cd451103d8897abf5 (diff) | |
download | gdb-50572669e457b60b8eb8e2a10fcd22d217dc7e09.zip gdb-50572669e457b60b8eb8e2a10fcd22d217dc7e09.tar.gz gdb-50572669e457b60b8eb8e2a10fcd22d217dc7e09.tar.bz2 |
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.
-rw-r--r-- | bfd/ChangeLog | 7 | ||||
-rw-r--r-- | bfd/peXXigen.c | 12 | ||||
-rw-r--r-- | ld/testsuite/ChangeLog | 9 | ||||
-rw-r--r-- | ld/testsuite/ld-pe/image_size.d | 9 | ||||
-rw-r--r-- | ld/testsuite/ld-pe/image_size.s | 8 | ||||
-rw-r--r-- | ld/testsuite/ld-pe/image_size.t | 15 | ||||
-rw-r--r-- | ld/testsuite/ld-pe/pe.exp | 2 |
7 files changed, 59 insertions, 3 deletions
diff --git a/bfd/ChangeLog b/bfd/ChangeLog index 7c6bc2e..e05457a 100644 --- a/bfd/ChangeLog +++ b/bfd/ChangeLog @@ -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 diff --git a/bfd/peXXigen.c b/bfd/peXXigen.c index 2454436..bbb3c77 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); diff --git a/ld/testsuite/ChangeLog b/ld/testsuite/ChangeLog index 07f2895..1f15714 100644 --- a/ld/testsuite/ChangeLog +++ b/ld/testsuite/ChangeLog @@ -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 diff --git a/ld/testsuite/ld-pe/image_size.d b/ld/testsuite/ld-pe/image_size.d new file mode 100644 index 0000000..6d41fcc --- /dev/null +++ b/ld/testsuite/ld-pe/image_size.d @@ -0,0 +1,9 @@ +#name: PE-COFF SizeOfImage +#ld: -T image_size.t +#objdump: -p +#target: i*86-*-mingw32 + +.*: file format .* +#... +SizeOfImage 00004000 +#... diff --git a/ld/testsuite/ld-pe/image_size.s b/ld/testsuite/ld-pe/image_size.s new file mode 100644 index 0000000..3b56d7f --- /dev/null +++ b/ld/testsuite/ld-pe/image_size.s @@ -0,0 +1,8 @@ + .text + .global _start +_start: + .byte 1 + .global data + .data +data: + .byte 2 diff --git a/ld/testsuite/ld-pe/image_size.t b/ld/testsuite/ld-pe/image_size.t new file mode 100644 index 0000000..f646eca --- /dev/null +++ b/ld/testsuite/ld-pe/image_size.t @@ -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/ : { *(.*) } +} diff --git a/ld/testsuite/ld-pe/pe.exp b/ld/testsuite/ld-pe/pe.exp index 8657f22..7568f10 100644 --- a/ld/testsuite/ld-pe/pe.exp +++ b/ld/testsuite/ld-pe/pe.exp @@ -32,3 +32,5 @@ set pe_tests { }
run_ld_link_tests $pe_tests
+
+run_dump_test "image_size"
|