* elf.c (IS_LOADED): Delete.
(assign_file_positions_for_segments): Just test SEC_LOAD instead. Restore SEC_HAS_CONTENTS test to the one place it was used prior to 2004-09-22.
This commit is contained in:
parent
315b3b02cf
commit
5efb626185
|
@ -1,3 +1,10 @@
|
||||||
|
2004-09-24 Alan Modra <amodra@bigpond.net.au>
|
||||||
|
|
||||||
|
* elf.c (IS_LOADED): Delete.
|
||||||
|
(assign_file_positions_for_segments): Just test SEC_LOAD instead.
|
||||||
|
Restore SEC_HAS_CONTENTS test to the one place it was used prior
|
||||||
|
to 2004-09-22.
|
||||||
|
|
||||||
2004-09-23 Alan Modra <amodra@bigpond.net.au>
|
2004-09-23 Alan Modra <amodra@bigpond.net.au>
|
||||||
|
|
||||||
PR gas/396
|
PR gas/396
|
||||||
|
|
29
bfd/elf.c
29
bfd/elf.c
|
@ -3787,12 +3787,6 @@ vma_page_aligned_bias (bfd_vma vma, ufile_ptr off, bfd_vma maxpagesize)
|
||||||
return ((vma - off) % maxpagesize);
|
return ((vma - off) % maxpagesize);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* We check SEC_HAS_CONTENTS here because if NOLOAD is used in a linker
|
|
||||||
script we may have a section with SEC_LOAD clear but which is
|
|
||||||
supposed to have contents. */
|
|
||||||
#define IS_LOADED(FLAGS) \
|
|
||||||
(((FLAGS) & SEC_LOAD) != 0 || ((FLAGS) & SEC_HAS_CONTENTS) != 0)
|
|
||||||
|
|
||||||
/* Assign file positions to the sections based on the mapping from
|
/* Assign file positions to the sections based on the mapping from
|
||||||
sections to segments. This function also sets up some fields in
|
sections to segments. This function also sets up some fields in
|
||||||
the file header, and writes out the program headers. */
|
the file header, and writes out the program headers. */
|
||||||
|
@ -3959,7 +3953,7 @@ assign_file_positions_for_segments (bfd *abfd, struct bfd_link_info *link_info)
|
||||||
.tbss, we need to look at the next section to decide
|
.tbss, we need to look at the next section to decide
|
||||||
whether the segment has any loadable sections. */
|
whether the segment has any loadable sections. */
|
||||||
i = 0;
|
i = 0;
|
||||||
while (!IS_LOADED (m->sections[i]->flags))
|
while ((m->sections[i]->flags & SEC_LOAD) == 0)
|
||||||
{
|
{
|
||||||
if ((m->sections[i]->flags & SEC_THREAD_LOCAL) == 0
|
if ((m->sections[i]->flags & SEC_THREAD_LOCAL) == 0
|
||||||
|| ++i >= m->count)
|
|| ++i >= m->count)
|
||||||
|
@ -4107,7 +4101,7 @@ assign_file_positions_for_segments (bfd *abfd, struct bfd_link_info *link_info)
|
||||||
{
|
{
|
||||||
bfd_signed_vma adjust;
|
bfd_signed_vma adjust;
|
||||||
|
|
||||||
if (IS_LOADED (flags))
|
if ((flags & SEC_LOAD) != 0)
|
||||||
{
|
{
|
||||||
adjust = sec->lma - (p->p_paddr + p->p_filesz);
|
adjust = sec->lma - (p->p_paddr + p->p_filesz);
|
||||||
if (adjust < 0)
|
if (adjust < 0)
|
||||||
|
@ -4164,11 +4158,26 @@ assign_file_positions_for_segments (bfd *abfd, struct bfd_link_info *link_info)
|
||||||
if (p->p_type == PT_LOAD)
|
if (p->p_type == PT_LOAD)
|
||||||
{
|
{
|
||||||
sec->filepos = off;
|
sec->filepos = off;
|
||||||
if (IS_LOADED (flags))
|
/* FIXME: The SEC_HAS_CONTENTS test here dates back to
|
||||||
|
1997, and the exact reason for it isn't clear. One
|
||||||
|
plausible explanation is that it is to work around
|
||||||
|
a problem we have with linker scripts using data
|
||||||
|
statements in NOLOAD sections. I don't think it
|
||||||
|
makes a great deal of sense to have such a section
|
||||||
|
assigned to a PT_LOAD segment, but apparently
|
||||||
|
people do this. The data statement results in a
|
||||||
|
bfd_data_link_order being built, and these need
|
||||||
|
section contents to write into. Eventually, we get
|
||||||
|
to _bfd_elf_write_object_contents which writes any
|
||||||
|
section with contents to the output. Make room
|
||||||
|
here for the write, so that following segments are
|
||||||
|
not trashed. */
|
||||||
|
if ((flags & SEC_LOAD) != 0
|
||||||
|
|| (flags & SEC_HAS_CONTENTS) != 0)
|
||||||
off += sec->size;
|
off += sec->size;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (IS_LOADED (flags))
|
if ((flags & SEC_LOAD) != 0)
|
||||||
{
|
{
|
||||||
p->p_filesz += sec->size;
|
p->p_filesz += sec->size;
|
||||||
p->p_memsz += sec->size;
|
p->p_memsz += sec->size;
|
||||||
|
|
Loading…
Reference in New Issue