RISC-V 64gc LD 截断重定位:R_RISCV_PCREL_HI20
RISC-V 64gc LD Truncated Relocation: R_RISCV_PCREL_HI20
由于重定位被截断,我无法获取 ld 到 link 一个非常简单的程序。
(init+0x0): relocation truncated to fit: R_RISCV_PCREL_HI20 against symbol `globalPointer' defined in .bss section in out/bootloader.elf
创建此问题的示例程序集文件:
.section init
.global start
.type start, @function
start:
la gp, globalPointer
.end
使用以下 linker 脚本:
ENTRY(start);
. = 0x80000000;
SECTIONS {
.text : ALIGN(4K) {
*(.init);
*(.text);
}
.bss : ALIGN(4K) {
*(.bss);
PROVIDE(globalPointer = .);
}
.rodata : ALIGN(4K) {
*(.rodata);
}
.data : ALIGN(4K) {
*(.data);
}
}
使用以下命令组装和 linked:
riscv64-elf-as -march=rv64gc source/entry.s -o build/entry.o
riscv64-elf-ld -nostdlib -melf64lriscv -T linker.ld build/entry.o -o out/bootloader.elf
使用由以下工具组成的工具链,其中 --target=riscv64-elf
作为配置参数并遵循其他标志 here at OsDev。
binutils: 2.37
gcc: 11.2.0
我也试过this prebuilt toolchain from kernel.org.
我也能够使用以下代码在 C 文件中触发相同的错误:
#include <stdint.h>
extern volatile uint64_t* globalPointer;
int kernalMain(void){
*globalPointer = 0;
return 0;
}
所以我的问题并非孤立于汇编代码。
所以我找到了我的问题!
我错过了一个。在交易品种名称中。
由于重定位被截断,我无法获取 ld 到 link 一个非常简单的程序。
(init+0x0): relocation truncated to fit: R_RISCV_PCREL_HI20 against symbol `globalPointer' defined in .bss section in out/bootloader.elf
创建此问题的示例程序集文件:
.section init
.global start
.type start, @function
start:
la gp, globalPointer
.end
使用以下 linker 脚本:
ENTRY(start);
. = 0x80000000;
SECTIONS {
.text : ALIGN(4K) {
*(.init);
*(.text);
}
.bss : ALIGN(4K) {
*(.bss);
PROVIDE(globalPointer = .);
}
.rodata : ALIGN(4K) {
*(.rodata);
}
.data : ALIGN(4K) {
*(.data);
}
}
使用以下命令组装和 linked:
riscv64-elf-as -march=rv64gc source/entry.s -o build/entry.o
riscv64-elf-ld -nostdlib -melf64lriscv -T linker.ld build/entry.o -o out/bootloader.elf
使用由以下工具组成的工具链,其中 --target=riscv64-elf
作为配置参数并遵循其他标志 here at OsDev。
binutils: 2.37
gcc: 11.2.0
我也试过this prebuilt toolchain from kernel.org.
我也能够使用以下代码在 C 文件中触发相同的错误:
#include <stdint.h>
extern volatile uint64_t* globalPointer;
int kernalMain(void){
*globalPointer = 0;
return 0;
}
所以我的问题并非孤立于汇编代码。
所以我找到了我的问题!
我错过了一个。在交易品种名称中。