tpidr_el1和tpidr_el2是arm64架构中的寄存器,在Linux内核中可以用来实现线程本地存储(TLS)功能。tpidr_el1用于保存当前线程的TLS地址,在进入内核时,内核会将tpidr_el1的值保存在current->thread.ptrs[2]中;tpidr_el2用于保存进程全局TLS地址,在进程创建时,内核会将tpidr_el2的值保存在current->thread.tp_value中。
以下是示例代码:
// 获取当前线程的TLS地址 void* get_tpidr_el1(void) { void* val; asm volatile("mrs %0, tpidr_el1\n" : "=r" (val)); return val; }
// 获取进程全局TLS地址 void* get_tpidr_el2(void) { void* val; asm volatile("mrs %0, tpidr_el2\n" : "=r" (val)); return val; }