7.4.2. angel_SWIreason_ReportException (0x18)

이 SVC는 응용 프로그램에 의해 호출되어 디버거에 예외를 직접 보고할 수 있습니다. 가장 일반적인 용도는 ADP_Stopped_ApplicationExit를 사용하여 실행이 완료되었음을 보고하는 것입니다.

시작

시작 시 r1Table 7.3Table 7.4에 나열된 값 중 하나로 설정됩니다. 이러한 값은 angel_reasons.h에 정의되어 있습니다.

하드웨어 예외는 디버거 변수 vector_catch가 예외 타입을 캐치하도록 설정되고 디버그 에이전트가 해당 예외 타입을 보고할 수 있을 경우에 생성됩니다. Angel은 자체적으로 사용하는 벡터의 인터럽트에 대한 예외는 보고할 수 없습니다.

Table 7.3. 하드웨어 벡터 이유 코드

이름16진수 값
ADP_Stopped_BranchThroughZero0x20000
ADP_Stopped_UndefinedInstr0x20001
ADP_Stopped_SoftwareInterrupt0x20002
ADP_Stopped_PrefetchAbort0x20003
ADP_Stopped_DataAbort0x20004
ADP_Stopped_AddressException0x20005
ADP_Stopped_IRQ 0x20006
ADP_Stopped_FIQ0x20007

예외 처리기는 기본 작업으로 처리기 체인 끝에서 이러한 SVC를 사용하여 예외가 처리되지 않았음을 나타낼 수 있습니다.

Table 7.4. 소프트웨어 이유 코드

이름16진수 값
ADP_Stopped_BreakPoint0x20020
ADP_Stopped_WatchPoint0x20021
ADP_Stopped_StepComplete0x20022
ADP_Stopped_RunTimeErrorUnknown*0x20023
ADP_Stopped_InternalError*0x20024
ADP_Stopped_UserInterruption0x20025
ADP_Stopped_ApplicationExit0x20026
ADP_Stopped_StackOverflow*0x20027
ADP_Stopped_DivisionByZero*0x20028
ADP_Stopped_OSSpecific*0x20029

Table 7.4에서 값 옆에 * 기호가 있으면 ARM 디버거에서 지원하지 않는 값이라는 뜻입니다. 디버거는 이러한 값에 대해 Unhandled ADP_Stopped exception을 보고합니다.

반환

이러한 호출에서는 아무런 반환이 예상되지 않습니다. 그러나 디버거가 RDI_Execute 요청 또는 이에 상당하는 작업을 수행하여 응용 프로그램이 계속되도록 요청할 수 있습니다. 이 경우 레지스터가 SVC 시작 시에 있었거나 또는 이후 디버거에 의해 수정되므로 레지스터 실행이 계속됩니다.

Copyright © 2002-2006 ARM Limited. All rights reserved.ARM DUI 0205GK
Non-Confidential