;;; Build this test case with ;;; armcc undef-exc.s -o undef-exc.axf -L--ro-base=0 ;;; and run with ;;; qemu-system-arm -kernel undef-exc.axf -semihosting ;;; Copyright Linaro Limited 2010. ;;; We use semihosting to output information SH_SVC EQU 0x123456 SYS_WRITE0 EQU 0x04 SYS_REPORTEXC EQU 0x18 REASON_APP_EXIT EQU 0x20026 ;;; Start the stack at 512K. This is unlikely to collide with ;;; a small test program, but we make no check. STACKTOP EQU 0x20000 MACRO $label EXIT LDR r0, =SYS_REPORTEXC LDR r1, =REASON_APP_EXIT SVC SH_SVC MEND ;; PRINT "string" MACRO $label PRINT $s PUSH {r0} LDR r0, =SYS_WRITE0 ADR r1, %F0 SVC SH_SVC POP {r0} B %F1 0 DCB "$s", 0 ALIGN 1 MEND AREA Start, CODE, READONLY ENTRY B start B undef B svc B prefetchabort B dataabort B reserved B irq B fiq undef PRINT "In undef vector\n" EXIT svc PRINT "In svc vector\n" EXIT prefetchabort PRINT "In prefetch abort vector\n" EXIT dataabort PRINT "In data abort vector\n" EXIT reserved PRINT "In reserved vector???\n" EXIT irq PRINT "In irq vector\n" EXIT fiq PRINT "In fiq vector\n" EXIT start ;; Set up our stack LDR sp, =STACKTOP PRINT "Starting test\n" NOP DCD 0xec019800 PRINT "error: did not take exception\n" EXIT END