簡體   English   中英

為什么當我使用__EXPORT_SYMBOL時只得到一個部分

[英]Why I get just one section when I use __EXPORT_SYMBOL

眾所周知,當我們要導出符號時使用__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),未使用)))”我相信這意味着該變量(unsigned long _ kcrctab ## sym)將放置在一個特殊的部分中,其名稱為(“ _kcrctab” sec“ +” #sym)。這不是說最終的elf文件中會有很多節嗎? 但是,我使用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中。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM