gpt4 book ai didi

c - 为什么我使用 __EXPORT_SYMBOL 时只得到一个部分

转载 作者:太空狗 更新时间:2023-10-29 12:33:30 26 4
gpt4 key购买 nike

正如我们所知,__EXPORT_SYMBOL 在我们想要导出我们的符号时使用。我发现里面有个宏 exort.h如下所示:

#ifdef CONFIG_MODVERSIONS
/* Mark the CRC weak since genksyms apparently decides not to
* generate a checksums for some symbols */
#define __CRC_SYMBOL(sym, sec) \
extern void *__crc_##sym __attribute__((weak)); \
static const unsigned long __kcrctab_##sym \
__used \
__attribute__((section("___kcrctab" sec "+" #sym), unused)) \
= (unsigned long) &__crc_##sym;
#else
#define __CRC_SYMBOL(sym, sec)
#endif

有一行:“attribute((section("_kcrctab"sec "+"#sym), unused))"我相信这意味着这个变量(unsigned long _kcrctab##sym)将被放置在一个特殊的部分,它的名字是(“_kcrctab”sec“+”#sym)。不是说最后的elf文件会有很多section吗?但是,我使用 readelf 实用程序检查 vmlinux,我发现只有一个部分。__kcrctab_gpl.它的大小是 0x3F40 。请你帮助我好吗。我是新来的。

最佳答案

它们通过链接描述文件映射回 .rodata。

来自arm版本:./arch/arm/kernel/vmlinux.lds

    __kcrctab : AT(ADDR(__kcrctab) - 0) {
__start___kcrctab = .;
*(SORT(___kcrctab+*)) __stop___kcrctab = .;
}

这些链接描述文件中发生了很多事情,但这里的基本思想是将“__kcrctab+*”部分中的所有内容都放入 __kcrctab。

关于c - 为什么我使用 __EXPORT_SYMBOL 时只得到一个部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19763350/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com