我想在內聯彙編中使用線程局部變量,但是當我看到彙編代碼時,看起來編譯器不會生成正確的代碼。對於下面的內嵌代碼,其中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