bug-binutils
[Top][All Lists]
Advanced

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

[Bug ld/28789] RISC-V: ld resolves absolute symbols via PC-relative relo


From: cvs-commit at gcc dot gnu.org
Subject: [Bug ld/28789] RISC-V: ld resolves absolute symbols via PC-relative relocations for position-independent targets
Date: Wed, 29 Mar 2023 23:58:44 +0000

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

--- Comment #1 from cvs-commit at gcc dot gnu.org <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=890744e8585ad75e4adf7b4c447301540479a885

commit 890744e8585ad75e4adf7b4c447301540479a885
Author: Palmer Dabbelt <palmer@rivosinc.com>
Date:   Sat Mar 25 08:41:13 2023 +0800

    RISC-V: PR28789, Reject R_RISCV_PCREL relocations with ABS symbol in
PIC/PIE.

    The non-preemptible SHN_ABS symbol with a pc-relative relocation should be
    disallowed when generating shared object (pic and pie).  Generally, the
    following cases, which refer to pr25749, will cause a symbol be
    non-preemptible,

    * -pie, or -shared with -symbolic
    * STV_HIDDEN, STV_INTERNAL, STV_PROTECTED
    * Have dynamic symbol table, but without the symbol
    * VER_NDX_LOCAL

    However, PCREL_HI20/LO12 relocs are always bind locally when generating
    shared object, so not only the non-preemptible absolute symbol need to
    be disallowed, all absolute symbol references need but except that they
    are defined in linker script.  If we also disallow the absolute symbol
    in linker script, then the glibc-linux toolchain build failed, so regard
    them as pc-relative symbols, just like what x86 did.

    Maybe we should add this check for all pc-relative relocations, rather
    than just handle in R_RISCV_PCREL relocs.  Ideally, since the value of
    SHN_ABS symbol is a constant, only S - A relocations should be allowed
    in the shared object, so only BFD_RELOC_8/16/32/64 are allowed, which
    means R_RISCV_32/R_RISCV_64.

    bfd/
        PR 28789
        * elfnn-riscv.c (riscv_elf_check_relocs): The absolute symbol cannot be
        referneced with pc-relative relocation when generating shared object.
    ld/
        PR 28789
        * ld/testsuite/ld-riscv-elf/ld-riscv-elf.exp: Updated.
        * ld/testsuite/ld-riscv-elf/pcrel-reloc*: New testcases.

-- 
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]