우리는 장난감 운영 체제를 수업 과제로 사용하고 있습니다. 커널 패닉 기능 작성에 약간의 문제가 있습니다.인라인 어셈블리에 포함
모든 레지스터를 저장하고 printf와 유사한 기능을 호출 한 다음 저장된 레지스터를 인쇄하고 CPU를 중지해야합니다. 지금 당장은 매크로로 정의되어 :
#define panic(...) \
do{ \
asm volatile("SAVE_REGISTERS %1\n\t" : "m="(_panic_context)); \
_panic_printk(&_panic_context, __VA_ARGS__); \
while(0)
_panic_context
스레드 좀 더 물건의 저장 레지스터를 포함하는 전역 변수이다. 문제는 SAVE_REGISTERS
입니다. 그것은 어셈블러 헤더 파일의 어딘가에 정의 된 매크로이지만 그것을 포함시키는 방법을 모른다. 파일에있는 간단한 #include는 분명히 작동하지 않습니다. 나는 인터넷 검색을 시도하고 필사적이고 필사적 인 것들을 (어셈블러 문자열에 다음과 같이 포함한다 :-))하지만 아무런 도움이되지 않았다. 이 문제를 해결하는 방법에 대해 아이디어가 있습니까?
우리는 GCC를 사용하고 (시뮬레이터 :-)에서 실행) MIPS를 위해 컴파일하고
편집 : SAVE_REGISTERS
이 .macro SAVE_REGISTERS
으로 정의된다 .... 그것은 다른 어셈블리 모듈에서 사용되기 때문에 C 매크로에있을 수 없습니다. 공황이 가변적이어야하므로 .S 파일을 만들 수 없습니다. 아니면 최소한 나는 그것을 할 수있는 다른 방법을 찾지 못했습니다.
을 할 수 있습니까? –