我设计了RISCV32IM处理器;riscv32未知elf-gcc";以生成用于测试的代码。
然而,生成的代码的PC(指令存储器地址(值和数据存储器地址具有任意值。我使用了这个命令:
riscv32-unknown-elf-gcc -march=rv32im -mabi=ilp32 -nostartfiles test.c
我能知道我是否可以设置我想要的指令和数据存储器地址吗?
谢谢。
谢谢你的回答。
我只设计了硬件,这是我第一次使用软件工具链。即使我的问题很简单,也请理解。
该数字是"-v〃;选项在此处输入图像描述
我无法修改脚本文件,因为我在DOCKER环境中使用riscv工具链。因此,我尝试复制脚本文件(elf32lriscv.x(,对其进行修改。我将其修改为0x10000==>0x00000。复制的脚本的文件名是";test5.x";。
它被执行如下。我做错了什么?
在此处输入图像描述
riscv编译器使用默认的链接器脚本来放置文本和日期部分。
如果将-v
选项添加到命令行riscv32-unknown-elf-gcc -v -march=rv32im -mabi=ilp32 -nostartfiles test.c
,您将看到collect 2使用的链接器脚本(通常为-melf32lriscv。您可以在${path_to_toolchain}/riscv32-unknown-elf/lib/ldscripts/
中找到链接器脚本,默认为.x(。
你也可以像@Frant解释的那样使用riscv32-unknown-elf-ld --verbose
。但是,如果工具链是使用enable multilib编译的,并且是为rv64编译的,但默认值是rv32,则需要小心,反之亦然。情况可能并非如此,但为了确保您可以为rv32指定具有-A elf32riscv
的拱门。
要设置地址,您可以创建自己的链接器脚本,或者复制并修改默认的链接器。你只能像@Frant解释的那样修改可执行文件的开头,或者进行更多的修改,把你想要的东西放在你想要的地方。
一旦你自己的链接器脚本准备好了,你就可以用-Wl、-T、${own_linker_script}将它传递给链接器。你的命令将是riscv32-unknown-elf-gcc -march=rv32im -mabi=ilp32 -nostartfiles test.c -Wl,-T,${own_linker_script }