2010-05-07 6 views
2

ARM에서 gcc 3.3.1을 사용하여 레지스터에서 함수 인수를 전달하는 것을 비활성화하는 방법이 있습니까?레지스터의 함수 인수

+1

잘 모르겠습니다. 그러나 gcc입니다. 약간의 작업을 원한다면 소스를 수정할 수 있습니다. 아니 uninitiated하지만. 이것이 귀하의 코드가 ARM EABI (임베디드 응용 프로그램 바이너리 인터페이스)를 위반하게된다는 것을 알고 있습니까? – Dan

+1

+1 @Dan. 왜 이것을하고 싶은지 설명해 주시겠습니까? –

+0

비슷한 상황이 발생했습니다. 내 문제는 내가 여러 구조체 매개 변수를 asm 함수에 전달하고있다. 첫 번째 구조체의 절반이 r3에서 감기고 나머지는 스택에 있습니다. 모든 구조체가 동일하면 (즉, 스택에있는 경우) 훨씬 편리합니다. –

답변

2

예. dwelch가 전 세계적인 답변을주었습니다.하지만 기능별로이 기능을 수행하려면 __attribute__regparm과 함께 사용하십시오. iirc, 다음과 같이 표시되어야합니다.

int __attribute__((regparm(0))) function(int a, char b) { ... } 
0

아마도 이러한 옵션 중 하나는 그렇지 않은 경우

 
-mabi=name 
Generate code for the specified ABI. Permissible values are: `apcs-gnu', `atpcs', `aapcs', `aapcs-linux' and `iwmmxt'. 

찾고있는 무엇, 무엇이든이있는 경우 (GCC 컴파일 할 때), 아마 컴파일 시간 옵션이 될 것입니다.

+0

이것들은 기본 ABI의 작은 변종입니다. 그들은 모두 레지스터에서 처음 4 개의 32 비트 값을 전달합니다. –