gcc:自定义部分中的单独代码和数据

时间:2017-09-29 12:28:19

标签: gcc sections

我有一个软件,正在从另一个工具链迁移到gcc(arm-none-eabi toolchain)。在软件中有一些自定义的部分,以便构造数据/代码,使用不同的内存组件。

使用gcc工具链,我有一个包含自定义部分的链接描述文件。使用旧的工具链,我可以使用#pragma section来获取代码和数据块或整个文件。编译器在内部使用给定的节名称分隔代码,数据,rodata和bss的相应部分中的#pragma section块。 使用gcc我只有两个选择:

  1. __attribute__((section(""))添加到每个变量/函数
  2. 使用链接描述文件
  3. 将整个文件添加到该部分中

    我的问题是,我现在有大约300个文件必须处理并映射到特定部分,同时保留代码/数据分离。这些文件包含数据和代码。 因此,如果我使用链接描述文件映射文件,那么所有数据和代码都将映射到此特定部分,无需代码和数据分离。 如果我将__attribute__关键字添加到每个变量/函数中,则需要数天才能完成此操作。

    有没有办法告诉gcc将整个文件/整个块映射到特定部分,并自动分离数据和代码?让我们说部分名称是" mysection",我想将整个文件映射到" mysection"和gcc应自动执行以下操作:

    • 将未经注册的变量添加到" mysection.bss"
    • 将数据初始化为" mysection.data"
    • 只读数据到#34; mysection.rodata"
    • 代码到" mysection.text"

    gcc能够为标准部分执行此操作。

1 个答案:

答案 0 :(得分:0)

您可以通过调用objcopy来补充Makefile中的编译命令:

for s in .bss .data .rodata .text; do
  objcopy --rename-section $s=mysection$s file.o
done