簡體   English   中英

Linux Kernel 中Thread Local Storage offset是怎么解決的?

[英]How are Thread Local Storage offset resolved in Linux Kernel?

我正在 Linux kernel 中了解線程本地存儲及其用法。我知道它允許存儲每個線程的數據。 例如,訪問current task_struct時就是這種情況。

我看到在我的x86_64架構中,這是通過使用全局段 ( %gs ) 完成的。 我的問題是: GCC如何解析此全局段的地址(即它如何將.(k)o中的mov rax,QWORD PTR gs:0x17d80 mov rax,QWORD PTR gs:0已編譯的 object 中的 mov rax,QWORD PTR gs:0x17d80?)

.ko是編譯后的gs前綴是明確發出的,rest 只是正常的符號重定位。 例如,運行objdump -dr amdgpu.ko的摘錄:

12b51:       65 48 8b 14 25 00 00    mov    %gs:0x0,%rdx
12b58:       00 00 
                    12b56: R_X86_64_32S     current_task

R_X86_64_32S只是一個標准的符號重定位,它會被kernel模塊加載器解析。 gs前綴已經存在於代碼中。

暫無
暫無

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

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