[英]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.