Module Name: src Committed By: matt Date: Thu Mar 13 01:45:35 UTC 2014
Modified Files: src/sys/arch/arm/arm32: exception.S Log Message: Add clrex when we get an abort. Simplify undefined_entry to use the undefined stack to do transfer to the undefined handler. To generate a diff of this commit: cvs rdiff -u -r1.21 -r1.22 src/sys/arch/arm/arm32/exception.S Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/sys/arch/arm/arm32/exception.S diff -u src/sys/arch/arm/arm32/exception.S:1.21 src/sys/arch/arm/arm32/exception.S:1.22 --- src/sys/arch/arm/arm32/exception.S:1.21 Wed Mar 5 02:12:24 2014 +++ src/sys/arch/arm/arm32/exception.S Thu Mar 13 01:45:35 2014 @@ -1,4 +1,4 @@ -/* $NetBSD: exception.S,v 1.21 2014/03/05 02:12:24 matt Exp $ */ +/* $NetBSD: exception.S,v 1.22 2014/03/13 01:45:35 matt Exp $ */ /* * Copyright (c) 1994-1997 Mark Brinicombe. @@ -51,7 +51,7 @@ #include <arm/locore.h> - RCSID("$NetBSD: exception.S,v 1.21 2014/03/05 02:12:24 matt Exp $") + RCSID("$NetBSD: exception.S,v 1.22 2014/03/13 01:45:35 matt Exp $") .text .align 0 @@ -102,6 +102,14 @@ ARM_ASENTRY_NP(prefetch_abort_entry) #endif sub lr, lr, #0x00000004 /* Adjust the lr */ +#ifdef _ARM_ARCH_7 + /* + * After taking a Data Abort exception, the state of the exclusive + * monitors is UNKNOWN. Therefore ARM strongly recommends that the + * abort handling software performs a CLREX instruction + */ + clrex +#endif PUSHFRAMEINSVC ENABLE_ALIGNMENT_FAULTS @@ -140,6 +148,14 @@ ASENTRY_NP(data_abort_entry) #endif sub lr, lr, #0x00000008 /* Adjust the lr */ +#ifdef _ARM_ARCH_7 + /* + * After taking a Data Abort exception, the state of the exclusive + * monitors is UNKNOWN. Therefore ARM strongly recommends that the + * abort handling software performs a CLREX instruction + */ + clrex +#endif PUSHFRAMEINSVC /* Push trap frame and switch */ /* to SVC32 mode */ ENABLE_ALIGNMENT_FAULTS @@ -178,6 +194,14 @@ ASEND(data_abort_entry) * it like a Data Abort. */ ASENTRY_NP(address_exception_entry) +#ifdef _ARM_ARCH_7 + /* + * After taking a Data Abort exception, the state of the exclusive + * monitors is UNKNOWN. Therefore ARM strongly recommends that the + * abort handling software performs a CLREX instruction + */ + clrex +#endif push {r0-r3,ip,lr} mrs r1, cpsr mrs r2, spsr @@ -220,13 +244,11 @@ ASEND(address_exception_entry) * look like direct entry from the vector. */ ASENTRY_NP(undefined_entry) - stmfd sp!, {r0, r1} + str r0, [sp, #-8]! GET_CURCPU(r0) - ldr r1, [sp], #0x0004 - str r1, [r0, #CI_UNDEFSAVE]! - ldr r1, [sp], #0x0004 - str r1, [r0, #0x0004] - ldmia r0, {r0, r1, pc} + ldr r0, [r0, #CI_UNDEFSAVE+8] + str r0, [sp, #4] + pop {r0, pc} ASEND(undefined_entry) /*