2013-06-28 20 views
3

我有一個模塊,其中包含具有ref屬性的函數。這將.text放在不同的部分。 ARM stack frame unwinding的工作方式是將兩個附加部分放置在一個ELF文件中。這些部分向ARM unwind.c提供表格。加載模塊時,module.c文件會填充這些表。模塊可以在ARM上使用'ref'部分嗎?

當使用.ref.text部分時,gcc-4.7創建了兩個部分.ARM.extab.ref.text.ARM.exidx.ref.text以允許展開此代碼。不幸的是,module.c只能掃描.init.devinit等,並不會添加這些部分。如果我們打開CONFIG_DEBUG_KMEMLEAK,並且__ref幀在分配期間處於活動狀態,堆棧跟蹤代碼會給出許多展開:內核日誌中未找到索引消息。

  1. 在模塊中使用__ref錯誤嗎?
  2. 如果有通過architechure該地點的.refextabexidx核心中ARM鏈接文件.ARM.extab.ARM.exidx板塊?
  3. 爲什麼我是唯一一個看到這個的?我有2.6.36,但問題似乎存在於主線上。

回答

1

無論是68kia64有額外的鏈接文件,與IA64擬合ARM __ref要求。

加入以下弓/ ARM/Makefile中

# Glob 'ref' unwind tables. 
KBUILD_LDFLAGS_MODULE += -T $(srctree)/arch/arm/module.lds 

而且弓/ ARM/modules.lds爲,

SECTIONS { 
    /DISCARD/ : { 
     *(.ARM.exidx.exit.text) 
     *(.ARM.extab.exit.text) 
     *(.ARM.exidx.devexit.text) 
     *(.ARM.extab.devexit.text) 
    } 
    /* Group unwind sections together: */ 
    .ARM.extab : { *(.ARM.extab*) } 
    .ARM.exidx : { *(.ARM.exidx*) } 
    .text : { *(.text); *(.ref.text); *(.rodata*); } 
} 

會把__ref註釋開卷信息連同正常展開代碼。

這樣可以解決多個開卷:採用模塊 ARM Linux上,當指數沒有找到內核日誌消息。不需要/DISCARD/部分,因爲它支持模塊.exit展開信息,因此需要更新module.c;但對於2.6.36這些信息更新的用處很有用。

這可能會導致其他問題,並且沒有運行過ARM Linux郵件列表以進行審查。

+0

+1好的研究。儘管如此,在採用它之前,相關人員運行它似乎是個好主意。 –

相關問題