'asmlinkage' 수식어의 의미는 무엇입니까?
Linux에서 시스템 호출을 구현하는 기능에 사용되는 것으로 알고 있습니다.예를 들어 다음과 같습니다.
asmlinkage long sys_getjiffies( void )
{
return (long)get_jiffies_64();
}
컴파일러에 스택 상의 모든 함수 인수를 전달하도록 지시합니다.하지만 이미 그렇지 않나요?함수 인수는 일반적으로 스택에만 푸시함으로써 전달됩니다.아니면 여기서 레지스터를 통해 함수 인수를 전달하는 것을 언급하고 있는 것입니까?
FAQ가 있습니다.
asmlinkage 태그는 이 단순한 기능에 대해 주의해야 할 또 다른 사항입니다.이것은 일부 gcc 매직의 #define으로, 함수가 레지스터(일반 최적화)에서 인수를 찾을 것으로 예상하지 않고 CPU 스택에서만 찾을 수 있음을 컴파일러에 알려줍니다.system_call이 첫 번째 인수인 시스템콜 번호를 소비하고 실제 시스템콜에 전달되는 인수를 최대 4개까지 더 허용한다는 이전 주장을 상기시켜 주십시오.system_call은 단순히 다른 인수(레지스터에 전달된 인수)를 스택에 남겨두는 것만으로 이 작업을 수행할 수 있습니다.모든 시스템콜에는 asmlinkage 태그가 붙어 있기 때문에 모든 콜은 스택에서 인수를 찾습니다.물론입니다.
sys_ni_syscall
의 경우, 이것은 아무런 차이가 없습니다. 왜냐하면sys_ni_syscall
는 인수를 받지 않지만 다른 대부분의 시스템콜에서는 문제가 됩니다그리고, 네가 보게 될 것이기 때문이다.asmlinkage
다른 많은 기능들 앞에서 무슨 내용인지 알아야 할 것 같아서어셈블리 파일에서 함수를 호출할 수도 있습니다.
언급URL : https://stackoverflow.com/questions/10459688/what-is-the-asmlinkage-modifier-meant-for
'programing' 카테고리의 다른 글
Vuetify v0.17.6: v-select에서 자동 완성 텍스트를 가져오는 방법 (0) | 2022.07.30 |
---|---|
v-move 클래스를 사용할 때 Vue가 트리거되지 않습니까? (0) | 2022.07.30 |
C에서는 브래킷이 스택프레임으로 기능합니까? (0) | 2022.07.30 |
유형 스크립트를 사용하여 Vue 데이터 개체에서 데이터 유형 설정 (0) | 2022.07.30 |
vue에서 상태 항목을 채우는 방법 (0) | 2022.07.20 |