2010-06-25 92 views
0

我目前在一个点,我需要在多个模块(基本ELF目标文件)到我的主执行文件链接由于我们的目标(背景的限制:内核,针对ARM体系结构)。在其他目标(特别是x86)上,这些目标文件将在运行时加载,并且它们中的特定函数将被调用。在关机时,另一个功能将被调用。这两个函数都作为符号暴露给内核,并且这一切都正常。创建类似于从多个对象.ctors列表文件

当目标文件是静态链接的,但内核无法“检测”它们的存在,因此我需要一种告诉内核关于init/fini函数的存在而不用硬编码它们的方式进入内核 - 它需要是可扩展的。我认为这是一个解决办法可能是把所有的init /菲尼函数指针到自己的部分 - 在几乎相同的方式,你会期望从.ctors和.dtors - 并通过他们在相关时间打电话。

注意,他们不能真正进入.ctors,因为它们需要特殊支持,由他们是所谓的时间运行(特别是线程和内存管理,如果你有兴趣)。

什么的去约把一堆任意函数指针到一个特定部分的最佳方式?甚至更好 - 是否可以将任意数据注入到一个部分,所以我也可以存储像模块名称(一个结构而不是函数指针,基本上)的东西。使用针对arm-elf的GCC。

回答

0

GCC属性可以用来指定一个部分:

__attribute__((section("foobar"))) 
+0

使用这个属性我仍然只在部分有一个结构结束,而不是15个左右我会一直从编辑的预期。可能必须objdump二进制文件,看看一切正在发生的地方...... – 2010-06-27 21:41:58