为GCC中的代码指定节名

为GCC中的代码指定节名,gcc,Gcc,我知道GCC允许您使用函数定义的\uuuuuuu属性((section(.mysection))来指定将代码放入哪个节中。我有一堆代码需要放在一个特定的部分,用它来装饰每个函数是相当乏味的。在命令行上全局指定代码放在哪个部分时,是否有方法编译文件?如果合适,可以更改链接器脚本,将特定对象文件放在特定部分中 以下示例是根据 下面的示例是一个完整的链接器脚本。它告诉链接器从文件all.o读取所有节,并将它们放在输出节outputa的开头,该部分从位置0x10000开始。文件foo.o中的所有部分.i

我知道GCC允许您使用函数定义的
\uuuuuuu属性((section(.mysection))
来指定将代码放入哪个节中。我有一堆代码需要放在一个特定的部分,用它来装饰每个函数是相当乏味的。在命令行上全局指定代码放在哪个部分时,是否有方法编译文件?

如果合适,可以更改链接器脚本,将特定对象文件放在特定部分中

以下示例是根据

下面的示例是一个完整的链接器脚本。它告诉链接器从文件
all.o
读取所有节,并将它们放在输出节
outputa
的开头,该部分从位置
0x10000
开始。文件
foo.o
中的所有
部分.input1
都紧跟在同一输出部分中。来自foo.o的所有节
.input2
进入输出节
outputb
,然后是来自
foo1.o的节
.input1
。任何文件中剩余的所有.input1和
.input2
部分都会写入输出部分
outputUTC


因此,您可以做的是设计项目,将特定部分的所有功能隔离到一个对象文件中,该文件将放入所需的部分

这不是你问题的答案,但可以简化你的生活。您可以有如下内容:#定义MYSECTION u属性u((section(.MYSECTION)))。然后您只需将MYSECTION添加到原型中,而不是添加整个属性文本。@TimF:我已经在这样做了。太棒了。我不知道链接器脚本允许您指定从中提取节的对象文件。
SECTIONS 
{
    outputa 0x10000 :
    {
       all.o
       foo.o (.input1)
    }

    outputb :
    {
       foo.o (.input2)
       foo1.o (.input1)
    }

    outputc :
    {
       *(.input1)
       *(.input2)
    }
}