@@ -1622,6 +1622,7 @@ NAME(_bfd_elf,bfd_from_remote_memory)
bfd_vma shdr_end;
bfd_vma loadbase;
bfd_boolean loadbase_set;
+ bfd_vma page_size;
/* Read in the ELF header in external format. */
err = target_read_memory (ehdr_vma, (bfd_byte *) &x_ehdr, sizeof x_ehdr);
@@ -1693,6 +1694,7 @@ NAME(_bfd_elf,bfd_from_remote_memory)
}
i_phdrs = (Elf_Internal_Phdr *) &x_phdrs[i_ehdr.e_phnum];
+ page_size = get_elf_backend_data (templ)->minpagesize;
high_offset = 0;
last_phdr = NULL;
loadbase = 0;
@@ -1753,7 +1755,6 @@ NAME(_bfd_elf,bfd_from_remote_memory)
high_offset = shdr_end;
else
{
- bfd_vma page_size = get_elf_backend_data (templ)->minpagesize;
bfd_vma segment_end = last_phdr->p_offset + last_phdr->p_filesz;
/* Assume we loaded full pages, allowing us to sometimes see
@@ -1781,15 +1782,14 @@ NAME(_bfd_elf,bfd_from_remote_memory)
if (i_phdrs[i].p_type == PT_LOAD)
{
bfd_vma start = i_phdrs[i].p_offset;
- bfd_vma end = start + i_phdrs[i].p_filesz;
bfd_vma vaddr = i_phdrs[i].p_vaddr;
+ bfd_vma end = start + i_phdrs[i].p_filesz;
- if (i_phdrs[i].p_align > 1)
- {
- start &= -i_phdrs[i].p_align;
- end = (end + i_phdrs[i].p_align - 1) & -i_phdrs[i].p_align;
- vaddr &= -i_phdrs[i].p_align;
- }
+ /* Assume we loaded full pages, allowing us to sometimes see
+ section headers. */
+ start &= -page_size;
+ vaddr &= -page_size;
+ end = (end + page_size - 1) & -page_size;
if (end > high_offset)
end = high_offset;
err = target_read_memory (loadbase + vaddr,