gcc - 使用 #pragma 将 __attribute__((section(".dflash_code"))) 应用于整个源文件

Posted

技术标签:

【中文标题】gcc - 使用 #pragma 将 __attribute__((section(".dflash_code"))) 应用于整个源文件【英文标题】:gcc - use #pragma to apply __attribute__((section(".dflash_code"))) to entire source file 【发布时间】:2017-11-21 16:06:07 【问题描述】:

我真的不想将__attribute__((section(".dflash_code"))) 复制粘贴到给定源文件中的每个函数。

有没有办法使用#pragma 告诉编译器将该属性应用于源文件中的每个函数?

【问题讨论】:

你昨天已经问过了。从那以后一切都没有改变。 @EugeneSh。该问题不涉及使用#pragma 这个问题是关于 GCC 的。这是关于 GCC 中特定的#pragma。 【参考方案1】:

我认为您不能在源代码中执行此操作,但您可以在目标文件上使用objcopy --rename-section .text=.dflash_code 以获得大致相同的效果。有关如何使用 objcopy 的更多建议,请参阅 GNU Binutils manual。

【讨论】:

谢谢,我会试试的。我还想使用链接器命令but my attempts are unsuccessful 让它工作。你知道为什么吗? @Adrian 对不起,据我所知,你在那里尝试的应该有效。除非您愿意向我们展示您的整个链接器脚本,可能还有您的整个 Makefile 以及有关构建环境的更多详细信息,否则我认为没有人能进一步帮助您。跨度> 这是有道理的。如果你的方法在这里有效,它会一样好。 它不起作用:objcopy -I binary --rename-section .text=.dflash_code ..\orig\compile.doj .\compile.doj 给出相同的二进制文件 -I binary 告诉 objcopy 将其输入解释为 没有内部结构。试试没有那个。如果它仍然不起作用,我需要确切知道您实际使用的目标文件格式,主机和目标 CPU 和操作系统也会有所帮助。【参考方案2】:

也许它不会使您免于在函数声明中包含某些内容,但实际上我更愿意知道特定函数(甚至全部)不在 .text 部分中。我通常#define 更短的,比如

#define DFC __attribute__((section(".dflash_code")))

并在代码中使用它。当我在一段时间后回到代码中时,它也记得我,这个函数在声明中有一些特殊的东西。

【讨论】:

以上是关于gcc - 使用 #pragma 将 __attribute__((section(".dflash_code"))) 应用于整个源文件的主要内容,如果未能解决你的问题,请参考以下文章

如何实现为 _Pragma 创建带引号的字符串的宏?

可以将 GCC 配置为忽略 #pragma 指令吗?

如何在 gcc 的特定部分中放置一组变量,arm 是不是有类似 #pragma default_variable_attributes 的东西

如何使用 #pragma 和 gcc 选择性地禁用 -Werror

在gfortran中使用“pragma GCC优化”

G++ 忽略 _Pragma 诊断被忽略