使用"riscv32-unknown-elf-gcc"时如何设置指令和数据存储器地址?



我设计了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 }

相关内容

  • 没有找到相关文章

最新更新