[Bug c++/91420] relocation truncated to fit: R_RISCV_HI20 against `.LC0' with GCC 8.2/8.3 with "-O2" on RISC-V
andrew at sifive dot com
gcc-bugzilla@gcc.gnu.org
Mon Aug 12 03:06:00 GMT 2019
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=91420
--- Comment #2 from Andrew Waterman <andrew at sifive dot com> ---
The RISC-V code models currently in existence place a 2 GiB limit on
the extent of the statically linked portion of a binary. Rather than
a bug, I would describe this as a limitation of the existing code
models, which we should eventually lift by introducing larger code
models.
Note that it's possible to get similar errors on other
architecture/code model combinations. Here's an example from x86-64
with the "kernel" code model:
$ g++ -mcmodel=kernel -O2 riscv_cpp_test.c
tmp/ccEm3wfH.o: In function `main':
test.c:(.text.startup+0x20): relocation truncated to fit: R_X86_64_32S
against `.LC0'
collect2: error: ld returned 1 exit status
On Sun, Aug 11, 2019 at 7:47 PM bmeng.cn at gmail dot com
<gcc-bugzilla@gcc.gnu.org> wrote:
>
> https://gcc.gnu.org/bugzilla/show_bug.cgi?id=91420
>
> Bug ID: 91420
> Summary: relocation truncated to fit: R_RISCV_HI20 against
> `.LC0' with GCC 8.2/8.3 on RISC-V
> Product: gcc
> Version: 8.2.0
> Status: UNCONFIRMED
> Severity: normal
> Priority: P3
> Component: c++
> Assignee: unassigned at gcc dot gnu.org
> Reporter: bmeng.cn at gmail dot com
> Target Milestone: ---
>
> Created attachment 46700
> --> https://gcc.gnu.org/bugzilla/attachment.cgi?id=46700&action=edit
> test case
>
> Please use attached test case "riscv_cpp_test.c" to trigger the bug.
>
> $ riscv64-unknown-linux-gnu-g++ -O2 riscv_cpp_test.c
> /tmp/ccCpODP4.o: In function `.L0 ':
> riscv_cpp_test.c:(.text.startup+0x4): relocation truncated to fit: R_RISCV_HI20
> against `.LC0'
> /share/toolchains/riscv/lib/gcc/riscv64-unknown-linux-gnu/8.2.0/../../../../riscv64-unknown-linux-gnu/bin/ld:
> final link failed: Symbol needs debug section which does not exist
> collect2: error: ld returned 1 exit status
>
> Workaround: using "-O0" makes the linking procedure happy.
>
> $ riscv64-unknown-linux-gnu-g++ -O0 riscv_cpp_test.c
More information about the Gcc-bugs
mailing list