인라인 어셈블리에서 스레드 로컬 변수를 사용하려고하지만 어셈블 된 코드를 볼 때 컴파일러가 올바른 코드를 생성하지 않는 것으로 보입니다. saved_sp 이 세계적으로가 __thread long saved_sp
로 선언 된 다음 인라인 코드,로컬 변수 및 인라인 어셈블리 스레드
__asm__ __volatile__ (
"movq %rsp, saved_sp\n\t");
에 대한 분해는 다음과 같다. 내가 GCC는 스레드 로컬 변수의 FS 세그먼트를 사용하는 알고 있기 때문에, 명확하게 올바른 일이 아니다
mov %rsp,0x612008
.
mov %rsp, fs:somevalue
과 같은 것을 생성 했어야합니다. 왜 이렇게이다? 인라인 어셈블리에서 스레드 로컬 변수를 사용하고 있습니까?
내가 GCC 생각하지 않는다는 어쨌든 인라인 어셈블리 코드를 수정합니다. 아마도 세그먼트 우선 적용 프리픽스를 명시 적으로 지정해야합니다. '.byte 0x64 \ n \ t "''''movq % rsp, saved_sp \ n \ t"'앞에 삽입 해보십시오. –