我想在内联汇编中使用线程局部变量,但是当我看到汇编代码时,看起来编译器不会生成正确的代码。对于下面的内嵌代码,其中saved_sp是全球声明为__thread long saved_sp
,线程局部变量和内联汇编
__asm__ __volatile__ (
"movq %rsp, saved_sp\n\t");
拆卸如下所示。
mov %rsp,0x612008
这显然是不正确的事情,因为我知道,GCC使用FS段的线程局部变量。它应该产生像
mov %rsp, fs:somevalue
它不是。为什么?在内联汇编中使用线程局部变量是否有问题?
我并不认为海合会无论如何修改你的内联汇编代码。很可能你必须明确指定段覆盖前缀。尝试在'“movq%rsp,saved_sp \ n \ t”'之前插入'“.byte 0x64 \ n \ t”'。 – 2012-01-10 22:04:00