mirror of
https://github.com/espressif/binutils-gdb.git
synced 2025-07-30 13:23:50 +08:00
PR26493 UBSAN: elfnn-riscv.c left shift of negative value
include/ PR 26493 * opcode/riscv.h (OP_MASK_CSR, OP_MASK_CUSTOM_IMM) (OP_MASK_FUNCT7, OP_MASK_RS3): Make unsigned. bfd/ PR 26493 * elfnn-riscv.c (riscv_make_plt_header): Cast PLT_HEADER_SIZE to unsigned when using with RISCV_ITYPE. (_bfd_riscv_relax_call): Use an unsigned foff.
This commit is contained in:
@ -1,3 +1,10 @@
|
|||||||
|
2020-08-31 Alan Modra <amodra@gmail.com>
|
||||||
|
|
||||||
|
PR 26493
|
||||||
|
* elfnn-riscv.c (riscv_make_plt_header): Cast PLT_HEADER_SIZE to
|
||||||
|
unsigned when using with RISCV_ITYPE.
|
||||||
|
(_bfd_riscv_relax_call): Use an unsigned foff.
|
||||||
|
|
||||||
2020-08-31 Alan Modra <amodra@gmail.com>
|
2020-08-31 Alan Modra <amodra@gmail.com>
|
||||||
|
|
||||||
PR 26476
|
PR 26476
|
||||||
|
@ -199,7 +199,7 @@ riscv_make_plt_header (bfd *output_bfd, bfd_vma gotplt_addr, bfd_vma addr,
|
|||||||
entry[0] = RISCV_UTYPE (AUIPC, X_T2, gotplt_offset_high);
|
entry[0] = RISCV_UTYPE (AUIPC, X_T2, gotplt_offset_high);
|
||||||
entry[1] = RISCV_RTYPE (SUB, X_T1, X_T1, X_T3);
|
entry[1] = RISCV_RTYPE (SUB, X_T1, X_T1, X_T3);
|
||||||
entry[2] = RISCV_ITYPE (LREG, X_T3, X_T2, gotplt_offset_low);
|
entry[2] = RISCV_ITYPE (LREG, X_T3, X_T2, gotplt_offset_low);
|
||||||
entry[3] = RISCV_ITYPE (ADDI, X_T1, X_T1, -(PLT_HEADER_SIZE + 12));
|
entry[3] = RISCV_ITYPE (ADDI, X_T1, X_T1, (uint32_t) -(PLT_HEADER_SIZE + 12));
|
||||||
entry[4] = RISCV_ITYPE (ADDI, X_T0, X_T2, gotplt_offset_low);
|
entry[4] = RISCV_ITYPE (ADDI, X_T0, X_T2, gotplt_offset_low);
|
||||||
entry[5] = RISCV_ITYPE (SRLI, X_T1, X_T1, 4 - RISCV_ELF_LOG_WORD_BYTES);
|
entry[5] = RISCV_ITYPE (SRLI, X_T1, X_T1, 4 - RISCV_ELF_LOG_WORD_BYTES);
|
||||||
entry[6] = RISCV_ITYPE (LREG, X_T0, X_T0, RISCV_ELF_WORD_BYTES);
|
entry[6] = RISCV_ITYPE (LREG, X_T0, X_T0, RISCV_ELF_WORD_BYTES);
|
||||||
@ -3455,7 +3455,7 @@ _bfd_riscv_relax_call (bfd *abfd, asection *sec, asection *sym_sec,
|
|||||||
bfd_boolean undefined_weak ATTRIBUTE_UNUSED)
|
bfd_boolean undefined_weak ATTRIBUTE_UNUSED)
|
||||||
{
|
{
|
||||||
bfd_byte *contents = elf_section_data (sec)->this_hdr.contents;
|
bfd_byte *contents = elf_section_data (sec)->this_hdr.contents;
|
||||||
bfd_signed_vma foff = symval - (sec_addr (sec) + rel->r_offset);
|
bfd_vma foff = symval - (sec_addr (sec) + rel->r_offset);
|
||||||
bfd_boolean near_zero = (symval + RISCV_IMM_REACH/2) < RISCV_IMM_REACH;
|
bfd_boolean near_zero = (symval + RISCV_IMM_REACH/2) < RISCV_IMM_REACH;
|
||||||
bfd_vma auipc, jalr;
|
bfd_vma auipc, jalr;
|
||||||
int rd, r_type, len = 4, rvc = elf_elfheader (abfd)->e_flags & EF_RISCV_RVC;
|
int rd, r_type, len = 4, rvc = elf_elfheader (abfd)->e_flags & EF_RISCV_RVC;
|
||||||
@ -3469,7 +3469,7 @@ _bfd_riscv_relax_call (bfd *abfd, asection *sec, asection *sym_sec,
|
|||||||
if (sym_sec->output_section == sec->output_section
|
if (sym_sec->output_section == sec->output_section
|
||||||
&& sym_sec->output_section != bfd_abs_section_ptr)
|
&& sym_sec->output_section != bfd_abs_section_ptr)
|
||||||
max_alignment = (bfd_vma) 1 << sym_sec->output_section->alignment_power;
|
max_alignment = (bfd_vma) 1 << sym_sec->output_section->alignment_power;
|
||||||
foff += (foff < 0 ? -max_alignment : max_alignment);
|
foff += ((bfd_signed_vma) foff < 0 ? -max_alignment : max_alignment);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* See if this function call can be shortened. */
|
/* See if this function call can be shortened. */
|
||||||
|
@ -1,3 +1,9 @@
|
|||||||
|
2020-08-31 Alan Modra <amodra@gmail.com>
|
||||||
|
|
||||||
|
PR 26493
|
||||||
|
* opcode/riscv.h (OP_MASK_CSR, OP_MASK_CUSTOM_IMM)
|
||||||
|
(OP_MASK_FUNCT7, OP_MASK_RS3): Make unsigned.
|
||||||
|
|
||||||
2020-08-31 Alan Modra <amodra@gmail.com>
|
2020-08-31 Alan Modra <amodra@gmail.com>
|
||||||
|
|
||||||
PR 26457
|
PR 26457
|
||||||
|
@ -204,7 +204,7 @@ static const char * const riscv_pred_succ[16] =
|
|||||||
#define OP_SH_RS2 20
|
#define OP_SH_RS2 20
|
||||||
#define OP_MASK_RS1 0x1f
|
#define OP_MASK_RS1 0x1f
|
||||||
#define OP_SH_RS1 15
|
#define OP_SH_RS1 15
|
||||||
#define OP_MASK_RS3 0x1f
|
#define OP_MASK_RS3 0x1fU
|
||||||
#define OP_SH_RS3 27
|
#define OP_SH_RS3 27
|
||||||
#define OP_MASK_RD 0x1f
|
#define OP_MASK_RD 0x1f
|
||||||
#define OP_SH_RD 7
|
#define OP_SH_RD 7
|
||||||
@ -223,14 +223,14 @@ static const char * const riscv_pred_succ[16] =
|
|||||||
#define OP_MASK_RL 0x1
|
#define OP_MASK_RL 0x1
|
||||||
#define OP_SH_RL 25
|
#define OP_SH_RL 25
|
||||||
|
|
||||||
#define OP_MASK_CUSTOM_IMM 0x7f
|
#define OP_MASK_CUSTOM_IMM 0x7fU
|
||||||
#define OP_SH_CUSTOM_IMM 25
|
#define OP_SH_CUSTOM_IMM 25
|
||||||
#define OP_MASK_CSR 0xfff
|
#define OP_MASK_CSR 0xfffU
|
||||||
#define OP_SH_CSR 20
|
#define OP_SH_CSR 20
|
||||||
|
|
||||||
#define OP_MASK_FUNCT3 0x7
|
#define OP_MASK_FUNCT3 0x7
|
||||||
#define OP_SH_FUNCT3 12
|
#define OP_SH_FUNCT3 12
|
||||||
#define OP_MASK_FUNCT7 0x7f
|
#define OP_MASK_FUNCT7 0x7fU
|
||||||
#define OP_SH_FUNCT7 25
|
#define OP_SH_FUNCT7 25
|
||||||
#define OP_MASK_FUNCT2 0x3
|
#define OP_MASK_FUNCT2 0x3
|
||||||
#define OP_SH_FUNCT2 25
|
#define OP_SH_FUNCT2 25
|
||||||
|
Reference in New Issue
Block a user