If a section holds uninitialized data and is from an object file or from an
executable image that has not initialized the s_size field, or if the physical size is padded, use the virtual size (stored in s_paddr) instead.
This commit is contained in:
parent
ca4fa240d6
commit
a3476bef94
2 changed files with 17 additions and 8 deletions
|
@ -1,3 +1,11 @@
|
||||||
|
2003-04-15 Brian Ford <ford@vss.fsi.com>
|
||||||
|
|
||||||
|
* peicode.h (coff_swap_scnhdr_in): If a section holds
|
||||||
|
uninitialized data and is from an object file or from an
|
||||||
|
executable image that has not initialized the s_size field, or if
|
||||||
|
the physical size is padded, use the virtual size (stored in
|
||||||
|
s_paddr) instead.
|
||||||
|
|
||||||
2003-04-15 H.J. Lu <hjl@gnu.org>
|
2003-04-15 H.J. Lu <hjl@gnu.org>
|
||||||
|
|
||||||
* elflink.h (elf_link_add_object_symbols): Properly report
|
* elflink.h (elf_link_add_object_symbols): Properly report
|
||||||
|
|
|
@ -256,14 +256,15 @@ coff_swap_scnhdr_in (abfd, ext, in)
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifndef COFF_NO_HACK_SCNHDR_SIZE
|
#ifndef COFF_NO_HACK_SCNHDR_SIZE
|
||||||
/* If this section holds uninitialized data, use the virtual size
|
/* If this section holds uninitialized data and is from an object file
|
||||||
(stored in s_paddr) instead of the physical size. */
|
or from an executable image that has not initialized the field,
|
||||||
if ((scnhdr_int->s_flags & IMAGE_SCN_CNT_UNINITIALIZED_DATA) != 0
|
or if the physical size is padded, use the virtual size (stored in
|
||||||
&& (scnhdr_int->s_paddr > 0))
|
s_paddr) instead. */
|
||||||
|
if (scnhdr_int->s_paddr > 0
|
||||||
|
&& (((scnhdr_int->s_flags & IMAGE_SCN_CNT_UNINITIALIZED_DATA) != 0
|
||||||
|
&& (! bfd_pe_executable_p (abfd) || scnhdr_int->s_size == 0))
|
||||||
|
|| scnhdr_int->s_size > scnhdr_int->s_paddr))
|
||||||
{
|
{
|
||||||
/* Always set it for non pe-obj files, and don't overwrite it
|
|
||||||
if it's zero for object files. */
|
|
||||||
if (! bfd_pe_executable_p (abfd) || !scnhdr_int->s_size)
|
|
||||||
scnhdr_int->s_size = scnhdr_int->s_paddr;
|
scnhdr_int->s_size = scnhdr_int->s_paddr;
|
||||||
|
|
||||||
/* This code used to set scnhdr_int->s_paddr to 0. However,
|
/* This code used to set scnhdr_int->s_paddr to 0. However,
|
||||||
|
|
Loading…
Reference in a new issue