RISC-V: Fix lui relax failure with relro.
bfd/ChangeLog Ilia Diachkov <ilia.diachkov@optimitech.com> * elfnn-riscv.c (_bfd_riscv_relax_lui): Set lui relax safety area to two pages in relro presence.
This commit is contained in:
parent
0eba165a74
commit
0f52d45acd
|
@ -1,3 +1,8 @@
|
|||
2019-08-01 Ilia Diachkov <ilia.diachkov@optimitech.com>
|
||||
|
||||
* elfnn-riscv.c (_bfd_riscv_relax_lui): Set lui relax safety area to
|
||||
two pages in relro presence.
|
||||
|
||||
2019-08-01 Max Filippov <jcmvbkbc@gmail.com>
|
||||
|
||||
* elf32-xtensa.c (insn_num_slots, get_rsr_lend_opcode)
|
||||
|
|
|
@ -3562,11 +3562,16 @@ _bfd_riscv_relax_lui (bfd *abfd,
|
|||
}
|
||||
|
||||
/* Can we relax LUI to C.LUI? Alignment might move the section forward;
|
||||
account for this assuming page alignment at worst. */
|
||||
account for this assuming page alignment at worst. In the presence of
|
||||
RELRO segment the linker aligns it by one page size, therefore sections
|
||||
after the segment can be moved more than one page. */
|
||||
|
||||
if (use_rvc
|
||||
&& ELFNN_R_TYPE (rel->r_info) == R_RISCV_HI20
|
||||
&& VALID_RVC_LUI_IMM (RISCV_CONST_HIGH_PART (symval))
|
||||
&& VALID_RVC_LUI_IMM (RISCV_CONST_HIGH_PART (symval + ELF_MAXPAGESIZE)))
|
||||
&& VALID_RVC_LUI_IMM (RISCV_CONST_HIGH_PART (symval)
|
||||
+ (link_info->relro ? 2 * ELF_MAXPAGESIZE
|
||||
: ELF_MAXPAGESIZE)))
|
||||
{
|
||||
/* Replace LUI with C.LUI if legal (i.e., rd != x0 and rd != x2/sp). */
|
||||
bfd_vma lui = bfd_get_32 (abfd, contents + rel->r_offset);
|
||||
|
|
Loading…
Reference in New Issue