我指的是linux/arch/arm/kernel/module.c。它似乎是ARM ELF重定位的任意子集。 manual列出了約130種類型的重定位。大多數是「靜態」(爲什麼模塊加載器處理靜態重定位而不是動態重定位?)是否因爲GCC只輸出這些類型?還是有另一個原因?爲什麼ARM Linux ELF模塊加載器支持這些特定的重定位?
1
A
回答
0
我從ARM Linux的新聞組下面的回答: http://lists.infradead.org/pipermail/linux-arm-kernel/2015-May/345809.html
下用來編譯內核的配置,只有那些搬遷的 小部分將永遠不會被GCC發出。對於 實例,由於我們正在構建不帶-fpic的許多GOT和PLT 相關的將不會發生。而且,由於模塊沒有共享 庫,但只是部分鏈接的目標文件,運行時鏈接 實際上類似於靜態鏈接,而非類似 動態鏈接。 (不支持諸如ELF標準定義的跳轉目標或符號搶佔的惰性分辨率 )。 此外,雖然文本重定位通常在用戶區中被避免,因爲它們擊敗了代碼頁的共享,但這不是問題內核爲 。
所以原因是因爲內核模塊的GCC編譯將只輸出這些重定位。我希望GCC ARM維護人員知道這...
0
ARM手冊是爲所有ELF文件;這包括'C'編譯器在鏈接之前的輸出。 130重新安置類型適用於各種情況;模塊加載器只處理它們的一個子集。對於共享庫和內核模塊,最終輸出不知道它的最終地址,但它知道所有函數/數據在哪裏相對於彼此。絕對重定位需要處理。
它不會嘗試將'.o'文件鏈接在一起以創建'.ko'。這通過ld
完成,它將處理更多的重定位類型,但可能還不是全部。 規範意味着全球完整。目標CPU可能不需要某種類型的重定位(例如某些非常舊的ARM1 26位)。
相關問題
- 1. 加載時ELF重定位
- 2. elf格式的ARM靜態重定位
- 3. 在ARM Cortex-M3上的ELF重定位
- 4. Linux ARM ELF和iOS ARM ELF文件有什麼區別?
- 5. 從特定位置加載模塊(magento)
- 6. 重定位在一般ELF(EM:40)
- 7. arm-linux-gcc vs arm-elf-gcc
- 8. ELF重新定位 - 哪裏來自這些符號?
- 9. 爲什麼這些模塊被加載到ASP.NET web項目中?
- 10. 要求的NodeJS模塊不支持重定向某些URL
- 11. pkcs11-tool:爲什麼我需要指定要加載的模塊?
- 12. 爲什麼「正常模塊加載器」
- 13. 爲什麼uboot使用arm-linux-gcc作爲默認arm CROSS_COMPILE?
- 14. 共享庫的ELF頭爲什麼會指定Linux作爲OSABI?
- 15. 什麼C++頭可以用於這些特定的功能? Linux
- 16. 將代理支持添加到特定的perl模塊
- 17. 爲什麼我需要加載JavaScript模塊,所有這些加載器之間有什麼區別?
- 18. 如何在Linux中禁用特定模塊的自動加載
- 19. ARM模式,爲什麼有這麼多?
- 20. Android自定義ROM - 爲什麼支持這麼少的設備?
- 21. 如何確定是否在Linux內核中加載了特定的模塊
- 22. 爲什麼JVM不支持強制類/類加載器卸載?
- 23. 如何動態加載可重定位的ELF可執行文件?
- 24. 無法加載php模塊 - linux 64位
- 25. 爲什麼ELF可執行文件具有固定的加載地址?
- 26. 哪些JavaScript框架當前支持使用RequireJS加載模塊?
- 27. 正好在一個特定位置加載兩個模塊joomla
- 28. 爲什麼IE不支持我的CSS定位
- 29. 64位Linux上的高分辨率定時器支持
- 30. 爲什麼一些IE9支持css選擇器,但其他一些不支持?
謝謝,但我問爲什麼Linux專門選擇那些實現。我問的原因是因爲我看到另一個系統選擇實施相同的重定位子集,我想知道這些工程師是否從Linux中拿走了它,或者是否有選擇這些重定位的獨立原因。 – Yifan
因爲如果您重新定位圖像的基礎,那麼這些是您需要實施的。相對的東西不需要重新定位。 –