由于目标的限制(背景:内核,针对ARM架构),我目前处于需要将几个模块(基本上是ELF目标文件)链接到我的主要可执行文件的位置。在其他目标(特定于x86)上,这些目标文件将在运行时加载,并且将调用其中的特定函数。在关机时,将调用另一个函数。这两个函数都作为符号暴露给内核,这一切都很好。
当目标文件静态链接时,内核无法“检测”它们的存在,因此我需要一种方法来告诉内核有关init / fini函数的存在而不用硬编码它们的存在进入内核 - 它需要是可扩展的。我认为解决这个问题的方法可能是将所有init / fini函数指针放入它们自己的部分 - 就像你期望的.ctors和.dtors一样 - 并在相关时间调用它们。
请注意,它们实际上无法进入.ctors,因为它们需要特定的支持才能在被调用时运行(特别是线程和内存管理,如果您感兴趣的话)。
将一堆任意函数指针放入特定部分的最佳方法是什么?更好的是 - 是否可以将任意数据注入一个部分,因此我还可以存储模块名称(结构而不是函数指针)等内容。使用针对arm-elf的GCC。
答案 0 :(得分:0)
GCC属性可用于指定部分:
__attribute__((section("foobar")))