2015-01-16 3 views
2

Linux에서 amd64를 사용하여 amd64, 스레드 로컬 스토리지가 세그먼트 레지스터 GS를 통해 액세스된다는 것을 알고 있습니다. FS 레지스터를 통해 다른 메모리에 액세스하도록 컴파일러에 지시하는 방법이 필요합니다. 해당 메모리는 다른 은행과 마음대로 전환하려는 가비지 수집 영역입니다. 할 수 있습니까? (스레드 로컬 저장소가 가능하기 때문에 있어야한다고 생각합니다.) I 탐색한다FS 세그먼트 레지스터를 통해 Linux g ++ x64 액세스 메모리

+0

실제로 gs는 i386이고 TLS는 x86_64입니다 (https://gcc.gnu.org/onlinedocs/gcc-4.5.3/gcc/i386-and-x86_002d64-Options.html). 동일하게 유지되지만 gs의 경우에도 마찬가지입니다. 가능하면이 변수에 연결할 FAR 속성이 있다고 가정합니다. 그러나 나는 그것을 발견 할 수 없었다. OpenGL 프레임 버퍼와 DOS 공간에 액세스하기 위해 djgpp가 존재합니다. –

+0

힌트입니다, far 속성을 조사하겠습니다. –

+0

내가 틀렸다고 정정 해줘도 사용자 모드에서 FS 나 GS를로드 할 수 없다고 생각합니다. 아니면 그렇게하려고하지 않습니까? –

답변

1

부분적인 답은 연타

http://llvm.org/releases/3.3/tools/clang/docs/LanguageExtensions.html

"(256)는 코드가 X86 GS 세그먼트 레지스터에 대하여 생성되도록 어드레스 공간을 번호로 포인터를 주석 및 주소 공간 #이고 257은 X86 FS 세그먼트와 관련이 있습니다.이 기능은 매우 낮은 수준의 기능으로, 수행중인 작업 (예 : OS 커널)을 알고있는 경우에만 사용해야합니다. "