在starvision2上移植FreeRTOS遇到的链接问题

我是嵌入式的新手,目前打算将freeRTOS移植到starvision2上。
但是在链接的时候遇到一个问题。

main.c:74:(.text+0x26): relocation truncated to fit: R_RISCV_HI20 against `TaskBnum.5' 

(这个main.c是我从一个移植教程里面偷来的)
我查了一下,说可能是链接脚本还是什么的问题。objdump后发现static变量的地址是0。


没太搞懂是为什么。下面是我的链接脚本

OUTPUT_ARCH("riscv") /*指定输出的架构*/
OUTPUT_FORMAT("elf64-littleriscv") /*指定输出的大小端*/
ENTRY(kernel_entry) /*指定入口点*/

SECTIONS /*配置节表*/
{
	. = 0x80200000; /*.变量赋值为openSBI的入口地址0x80200000,.变量会随着后面节表的追加自动增加,即可以理解成.变量标识当前位置*/
	
	PROVIDE(kernelstart = .); /*创建变量并赋值(仅方便编程、可没有)*/
	
	.text  /*配置代码节,代表内容存放的实际物理地址,但.自己也会跟着移动*/
	{
		textstart = .; /*创建变量并赋值(仅方便编程、可没有)*/
		*(.text.entry) /*将满足这些条件的节都放到这里来*/
		*(.text .stub .text.* .gnu.linkonce.t.*) /*将满足这些条件的节都放到这里来*/
		textend = .; /*创建变量并赋值(仅方便编程、可没有)*/
	}
	
	.rodata : /*配置只读数据节*/
	{
		rodatastart = .;
		*(.srodata .srodata.* .rodata .rodata.* .gnu.linkonce.r.*)
		rodataend = .;
	}
	
	. = ALIGN(0x1000);/*将.对齐到4KB*/
	
	.data : /*配置数据节*/
	{
		datastart = .;
		*(.data)
		*(.data.*)
		dataend = .;
	}
	
	. = ALIGN(0x1000);
	
	.bss : /*配置bss节*/
	{
		bssstart = .;
		*(.bss)
		*(.bss.*)
		*(.sbss*)
		bssend = .;
	}
	
	PROVIDE(kernel_end = .); /*创建变量并赋值,并对外提供kernelend符号,即在C/C++中可以调用这个量*/
	. = ALIGN(0x1000);
	PROVIDE(freememstart = .);
}

问题已经解决,是需要打开-mcmodel=medany编译选项 :melting_face:
详情请看 重新定位截断为适合:针对 .sdata 部分中定义的符号 ‘_impure_ptr’ R_RISCV_HI20 ·问题 #153 ·RISCV存档/RISCCV-GCC