2009-08-31 3 views
4

이제는 ARM 데이터 중단 예외가 발생한다는 것을 이해합니다. 예외 자체 (STL 라이브러리의 잘못된 주소)를 트래핑하는 방법을 볼 수 있지만 백업을하고 싶습니다. 예외 이전의 스택 프레임 IAR 툴체인을 사용하고 있는데, 예외 이후에 호출 스택을 사용할 수 없다고 알려줍니다. 호출 스택을 보여주기 위해 툴을 설득하는 트릭 방법이 있습니까? 모든 빠른 도움에 감사드립니다!ARM 데이터 중단 오류 예외 디버깅

답변

6

ARM ARM (ARM 아키텍처 참조 설명서, Google "팔 암"), 프로그래머 모델 -> 프로세서 모드 및 레지스터 섹션을 살펴 본다면 중단 모드에있을 때 당신은 사제가되어 있으므로 중지에서 수퍼바이저로 전환 한 다음 r13 사본을 만든 다음 중단 모드로 다시 전환하고 r13 사본에서 스택을 덤프 할 수 있습니다. 또한 r14는 중단이 발생한 곳을 알려줍니다.

이 중단이 정렬에서 발생했다면 나는 놀랄 것입니다. 주소의 lsbit가있는 하위 2 비트 또는 하프 워드에서 0 이외의 값으로 주소로 단어를 읽거나 쓰려고합니다. 실제로 중단 및 사용자/감독자가 동일한 레지스터 공간을 사용하기 때문에 링크 레지스터와 레지스터 (r0 ~ r12)의 덤프를 가져 오는 경우 중단 및 주소가 실제로 발생했는지를 알 수있는 명령을 볼 수 있습니다 정렬 문제 또는 다른 것. 엄지 손가락을 전혀 사용하지 않는다면, 걱정하지 말고 PC가 중지 된 모드 엄지 또는 팔에 따라 앞서 한두 단계의 지침입니다.

+0

팔암을 아직받지 못한 경우 확실히 얻으십시오. 그것은 놀라운 책입니다. 중단은 얼라인먼트에서 나올 수 있으며 mmu/mpu를 불법적 인 주소로 설정하는 방법에 따라 달라질 수 있습니다. 나는 OMAP 기반의 926ejs 코어를 사용하고 실제로 abort 주소를 저장할 레지스터가 있으므로 스펙 시트를 참조하십시오. – ThePosey

+0

감사합니다 - 문제가 정렬되었거나 잘못된 포인터인지 확인합니다. 단지 정렬 일 뿐이라면 예외에서 돌아올 수 있습니까? 나는 ARM 암을 가지고있다. 나는 그것을 공부할 것이다. – Jeff

+0

왜 그런 일이 일어 났는지 생각해야한다고 생각합니다. 이것이 일치하면 트랩이 당신을 해치지 않는 데 도움이됩니다. 예, 문제가 발생한 곳으로 돌아 가면 문제를 해결할 수 있지만 수행해야하는 메모리 액세스는 발생하지 않으며 필요한 데이터가 읽히거나 쓰여지지 않아 다른 곳에서 실패 할 가능성이 큽니다. 정렬 데이터 중단을 비활성화 할 수도 있지만 실제 문제를 찾는 것이 훨씬 어렵습니다. –

관련 문제