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

How do i set up instruction & data memory address when using "riscv32-unknown-elf-gcc"?

我设计了RISCV32IM处理器,我使用“riscv32-unknown-elf-gcc”生成代码进行测试。

然而,生成代码的PC(指令内存地址)值和数据内存地址具有任意值。我使用了这个命令:

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

请问是否可以设置我想要的指令和数据内存地址?

谢谢。

感谢您的回答。

我只设计了HW,第一次使用SW工具链。 虽然我的问题很简陋,但请理解。

下图是“-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。您可以在 ${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 }