+2017-02-16 Alan Modra <amodra@gmail.com>
+
+ PR 21000
+ * elf-bfd.h (struct elf_backend_data): Add no_page_alias.
+ * elfxx-target.h (elf_backend_no_page_alias): Define.
+ (elfNN_bed): Init new field.
+ * elf.c (assign_file_positions_for_load_sections): If no_page_alias
+ ensure PT_LOAD segment starts on a new page.
+ * elf32-hppa.c (elf_backend_no_page_alias): Define.
+
2017-02-16 Alan Modra <amodra@gmail.com>
PR 21132
This field indicates whether this behavior is required. */
unsigned want_p_paddr_set_to_zero : 1;
+ /* Target has broken hardware and/or kernel that requires pages not
+ to be mapped twice with different permissions. */
+ unsigned no_page_alias : 1;
+
/* True if an object file lacking a .note.GNU-stack section
should be assumed to be requesting exec stack. At least one
other file in the link needs to have a .note.GNU-stack section
Elf_Internal_Phdr *p;
file_ptr off;
bfd_size_type maxpagesize;
+ unsigned int pt_load_count = 0;
unsigned int alloc;
unsigned int i, j;
bfd_vma header_pad = 0;
maxpagesize = m->p_align;
p->p_align = maxpagesize;
+ pt_load_count += 1;
}
else if (m->p_align_valid)
p->p_align = m->p_align;
}
off_adjust = vma_page_aligned_bias (p->p_vaddr, off, align);
+
+ /* Broken hardware and/or kernel require that files do not
+ map the same page with different permissions on some hppa
+ processors. */
+ if (pt_load_count > 1
+ && bed->no_page_alias
+ && (off & (maxpagesize - 1)) != 0
+ && (off & -maxpagesize) == ((off + off_adjust) & -maxpagesize))
+ off_adjust += maxpagesize;
off += off_adjust;
if (no_contents)
{
#define elf_backend_want_dynrelro 1
#define elf_backend_rela_normal 1
#define elf_backend_dtrel_excludes_plt 1
+#define elf_backend_no_page_alias 1
#define TARGET_BIG_SYM hppa_elf32_vec
#define TARGET_BIG_NAME "elf32-hppa"
#ifndef elf_backend_want_p_paddr_set_to_zero
#define elf_backend_want_p_paddr_set_to_zero 0
#endif
+#ifndef elf_backend_no_page_alias
+#define elf_backend_no_page_alias 0
+#endif
#ifndef elf_backend_default_execstack
#define elf_backend_default_execstack 1
#endif
elf_backend_want_dynbss,
elf_backend_want_dynrelro,
elf_backend_want_p_paddr_set_to_zero,
+ elf_backend_no_page_alias,
elf_backend_default_execstack,
elf_backend_caches_rawsize,
elf_backend_extern_protected_data
+2017-02-16 Alan Modra <amodra@gmail.com>
+
+ PR 21000
+ * testsuite/ld-elf/loadaddr1.d: Adjust for hppa file offsets.
+ * testsuite/ld-elf/loadaddr2.d: Likewise.
+ * testsuite/ld-elf/loadaddr3a.d: Likewise.
+ * testsuite/ld-scripts/rgn-at5.d: Likewise.
+
2017-02-16 Alan Modra <amodra@gmail.com>
* testsuite/ld-powerpc/vxworks1-lib.s: Correct addi to addic.
#...
LOAD +0x000000 0xf*80000000 0xf*80000000 0x100050 0x100050 RWE 0x200000
LOAD +0x200000 0xf*ff600000 0xf*80101000 0x0*10 0x0*10 R E 0x200000
- LOAD +0x302000 0xf*80102000 0xf*80102000 0x0*10 0x0*10 RW 0x200000
+ LOAD +0x[35]02000 0xf*80102000 0xf*80102000 0x0*10 0x0*10 RW 0x200000
#pass
#...
LOAD +0x000000 0xf*80000000 0xf*80000000 0x100050 0x100050 RWE 0x200000
- LOAD +0x110000 0xf*80110000 0xf*80101000 0x0*10 0x0*10 R E 0x200000
- LOAD +0x302000 0xf*80302000 0xf*80302000 0x0*10 0x0*10 RW 0x200000
+ LOAD +0x[13]10000 0xf*80110000 0xf*80101000 0x0*10 0x0*10 R E 0x200000
+ LOAD +0x[35]02000 0xf*80302000 0xf*80302000 0x0*10 0x0*10 RW 0x200000
#pass
#...
LOAD +0x000000 0x0*00000000 0x0*00000000 0x0*0110 0x0*0110 R E 0x.*
- LOAD +0x000200 0x0*00000200 0x0*00000110 0x0*0010 0x0*0010 RW 0x.*
+ LOAD +0x[02]00200 0x0*00000200 0x0*00000110 0x0*0010 0x0*0010 RW 0x.*
#pass
Idx +Name +Size +VMA +LMA +File off +Algn +Flags
0 .sec0 +0+4 +0+2000 +0+2000 +0+1000 +.*
1 .sec1 +0+4 +0+1000 +0+2004 +0+2000 +.*
- 2 .sec2 +0+4 +0+4000 +0+603c +0+4000 +.*
- 3 .sec3 +0+4 +0+5000 +0+5000 +0+3000 +.*
- 4 .sec4 +0+4 +0+2008 +0+2008 +0+2008 +.*
- 5 .sec5 +0+4 +0+200c +0+200c +0+200c +.*
+ 2 .sec2 +0+4 +0+4000 +0+603c +0+[45]000 +.*
+ 3 .sec3 +0+4 +0+5000 +0+5000 +0+[34]000 +.*
+ 4 .sec4 +0+4 +0+2008 +0+2008 +0+[23]008 +.*
+ 5 .sec5 +0+4 +0+200c +0+200c +0+[23]00c +.*
#pass