bug-binutils
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Bug ld/27180] RISC-V far relocations for auipc instructions may cause s


From: cvs-commit at gcc dot gnu.org
Subject: [Bug ld/27180] RISC-V far relocations for auipc instructions may cause segfault with --emit-relocs
Date: Fri, 28 Jun 2024 05:51:24 +0000

https://sourceware.org/bugzilla/show_bug.cgi?id=27180

--- Comment #3 from Sourceware Commits <cvs-commit at gcc dot gnu.org> ---
The master branch has been updated by Nelson Chu <nelsonc1225@sourceware.org>:

https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=81c353cb9cbba572b73ea4a3949571c44282b0df

commit 81c353cb9cbba572b73ea4a3949571c44282b0df
Author: Nelson Chu <nelson@rivosinc.com>
Date:   Tue Jun 11 16:35:58 2024 +0800

    RISC-V: PR27180, Update relocation for riscv_zero_pcrel_hi_reloc.

    When pcrel access overflow, the riscv_zero_pcrel_hi_reloc may convert pcrel
    relocation to absolutly access if possible at the relocate stage.  We used
to
    encode the target address into r_sym of R_RISCV_HI20 if it is converted
from
    R_RISCV_PCREL_HI20.  But that may cause segfault if --emit-relocs is set,
    since r_sym becomes an address rather than a symbol index.  Although the
    relocate result is correct, it does not meet the definition, so may cause
    unexpected behaviors.

    This patch encodes the target address into r_addend, rather than r_sym, if
    riscv_zero_pcrel_hi_reloc converts the relocation.  Besdies, since the
    corresponding pcrel_lo relocation are also changed to absolutly access,
    we should also update them to R_RISCV_LO12_I/S.

    bfd/
            PR 27180
            * elfnn-riscv.c (riscv_pcrel_hi_reloc): New boolean `absolute', to
            inform corresponding pcrel_lo that the pcrel_hi relocation was
already
            converted to hi20 relocation.
            (riscv_record_pcrel_hi_reloc): Likewise, record `absolute'.
            (riscv_pcrel_lo_reloc): Removed `const' for Elf_Internal_Rela
*reloc,
            since we may need to convert it from pcrel_lo to lo relocation.
            (riscv_record_pcrel_lo_reloc): Likewise.  Convert pcrel_lo to lo
            relocation if corresponding pcrel_hi was converted to hi
relocation.
            (riscv_zero_pcrel_hi_reloc): Encode target absolute address into
            r_addend rather than r_sym.  Clear the `addr' to avoid duplicate
            relocate in the perform_relocation.
            (riscv_elf_relocate_section): Updated.
    ld/
            PR 27180
            * testsuite/ld-riscv-elf/pcrel-lo-addend-3a-emit-relocs.d: New
testcase.
            Segfault without applying this patch.
            * testsuite/ld-riscv-elf/ld-riscv-elf.exp: Updated.

-- 
You are receiving this mail because:
You are on the CC list for the bug.


reply via email to

[Prev in Thread] Current Thread [Next in Thread]