https://sourceware.org/bugzilla/show_bug.cgi?id=27566
Bug ID: 27566 Summary: [RISC-V] relocation truncated to fit: R_RISCV_GPREL_I against aymbol Product: binutils Version: 2.36 Status: UNCONFIRMED Severity: normal Priority: P2 Component: ld Assignee: unassigned at sourceware dot org Reporter: lifang_...@c-sky.com Target Milestone: --- Here is case(It is not the orignal case, the original is that gp can't get the .LANCHOR. I made this case simpler.): =========================================== .option nopic .section .rodata .align 10 .Lpadding0: .zero 0x10 .section .rodata .align 3 .globl hello_rodata .set hello_rodata, . + 0x1800 .Lpadding: .zero 128 .section .init_array .type padding_init_array, @object .size padding_init_array, 0x100 .globl padding_init_array padding_init_array: .zero 0x100 .text .align 1 .globl main .type main, @function main: lui a5,%hi(hello_rodata) addi a5,a5,%lo(hello_rodata) .size main, .-main ============================================================ The binutils commit: ebdcad3fddf6ec21f6d4dcc702379a12718cf0c4 config: "../configure --target=riscv64-unknown-linux target_alias=riscv64-unknown-linux" ============================================================ build case ./gas/as-new -o a.o a.s ./ld/ld-new -z relro -o a a.o -e main ============================================================= In this case, the gp can access hello_rodata while relaxing. But the symbols defined after ". = DATA_SEGMENT_ALIGN (CONSTANT (MAXPAGESIZE), CONSTANT (COMMONPAGESIZE));"(link file) may be increased with the paddings when finishing lang_size_relro_segment. And the gp may not accessing the symbols. In my opinion, if the symbol is not defined in data segment(between ". = DATA_SEGMENT_ALIGN (CONSTANT (MAXPAGESIZE), CONSTANT (COMMONPAGESIZE));" and ". = DATA_SEGMENT_END (.);"), it should not convert to GPREL_I when linking with "-z relro" -- You are receiving this mail because: You are on the CC list for the bug.