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

问题描述

我设计了RISCV32IM处理器,并使用“ riscv32-unkNown-elf-gcc”生成了用于测试的代码

但是,所生成代码的PC(指令存储器地址)值和数据存储器地址具有任意值。我使用了以下命令:

riscv32-unkNown-elf-gcc -march=rv32im -mabi=ilp32 -nostartfiles test.c

我可以知道是否可以设置所需的指令和数据存储器地址吗?

谢谢。

谢谢您的回答。

我只设计了硬件,这是我第一次使用软件工具链。 即使我的问题很基本,也请理解。

该数字是“ -v”选项的结果。 enter image description here

我无法修改脚本文件,因为我在DOCKER环境中使用riscv工具链。 因此,我尝试复制脚本文件(elf32lriscv.x),对其进行修改。 我将其修改为0x10000 ==> 0x00000。 复制的脚本的文件名为“ test5.x”。

它的执行过程如下。 我在做什么错了?

enter image description here

解决方法

riscv编译器正在使用默认的链接描述文件来放置文本和日期部分...。

如果将-v选项添加到命令行riscv32-unknown-elf-gcc -v -march=rv32im -mabi=ilp32 -nostartfiles test.c,您将看到collect 2使用的链接描述文件(通常是-melf32lriscv。您可以在{{1 }}(默认值为.x)。

您也可以像{Frant所解释的那样使用${path_to_toolchain}/riscv32-unknown-elf/lib/ldscripts/。但是,如果工具链是使用enable multilib编译的,并且您为rv64编译,但默认值为rv32,反之亦然,则需要小心。可能并非如此,但是请确保可以为rv32指定riscv32-unknown-elf-ld --verbose拱。

要设置地址,您可以创建自己的链接描述文件,也可以复制和修改默认的链接描述文件。您只能按照@Frant的说明修改可执行文件的开头,或进行更多修改,然后将所需的任何内容放置在所需的位置。

一旦准备好自己的链接描述文件,您就可以使用-Wl,-T,$ {own_linker_script}将其传递给链接描述文件。您的命令将为-A elf32riscv