资料介绍
android线程局部存储的研究android 线程局部存储的研究
王森 msn: kernel_senix@163.com
内核对线程局部存储的支持 设置
asmlinkage int arm_syscall(int no, struct pt_regs *regs) { … case NR(set_tls): thread->tp_value = regs->ARM_r0;// regs->ARM_r0 即为用户空间传下来的线程局 部存储的虚拟地址,而 thread->tp_value 极为内核为每个线程保存这个虚拟地址的地方。 #if defined(CONFIG_HAS_TLS_REG)//如果处理器有专门的寄存器用来线程局部存储,那么 好,就用这个专用寄存器 asm ("mcr p15, 0, %0, c13, c0, 3" : : "r" (regs->ARM_r0) ); #elif !defined(CONFIG_TLS_REG_EMUL) //如果处理器没有专门的寄存器用来线程局部存储,那么好,内核就找一个靠近 4G 的地址 来存 /* * User space must never try to access this directly. * Expect your app to break eventually if you do so. * The user helper at 0xffff0fe0 must be used instead. * (see entry-armv.S for details) */ *((unsigned int *)0xffff0ff0) = regs->ARM_r0;//这个地址就是 0xffff0ff0,内核会预先 为其建立映射,并 reserve 下来 #endif return 0; … }
PDF 文件使用 "pdfFactory P