libpayload: Make it possible to install callbacks for particular exceptions.

To support a GDB stub, it will be necessary to trap various exceptions which
will be used to implement breakpoints, single stepping, etc.

BUG=None
TEST=Built and booted on Link with hooks installed and saw that they
triggered when exceptions occurred. Built and booted on nyan.
BRANCH=None

Original-Change-Id: Iab659365864a3055159a50b8f6e5c44290d3ba2b
Original-Signed-off-by: Gabe Black <gabeblack@google.com>
Original-Reviewed-on: https://chromium-review.googlesource.com/179602
Original-Reviewed-by: Gabe Black <gabeblack@chromium.org>
Original-Tested-by: Gabe Black <gabeblack@chromium.org>
Original-Commit-Queue: Gabe Black <gabeblack@chromium.org>
(cherry picked from commit 8db0897b1ddad600e247cb4df147c757a8187626)
Signed-off-by: Marc Jones <marc.jones@se-eng.com>

Change-Id: I5e7f724b99988cd259909dd3bd01166fa52317ec
Reviewed-on: http://review.coreboot.org/7656
Tested-by: build bot (Jenkins)
Reviewed-by: Paul Menzel <paulepanter@users.sourceforge.net>
Reviewed-by: Ronald G. Minnich <rminnich@gmail.com>
This commit is contained in:
Gabe Black
2013-12-11 00:23:15 -08:00
committed by Marc Jones
parent c09cf0b7e1
commit 20cdb2439f
8 changed files with 237 additions and 162 deletions

View File

@ -43,59 +43,51 @@ exception_table:
b 8f
1:
ldr sp, _not_used
mov sp, $0
b exception_common
2:
ldr sp, _undefined_instruction
mov sp, $1
b exception_common
3:
ldr sp, _software_interrupt
mov sp, $2
b exception_common
4:
ldr sp, _prefetch_abort
mov sp, $3
b exception_common
5:
ldr sp, _data_abort
mov sp, $4
b exception_common
6:
ldr sp, _not_used
mov sp, $5
b exception_common
7:
ldr sp, _irq
mov sp, $6
b exception_common
8:
ldr sp, _fiq
mov sp, $7
b exception_common
exception_common:
str sp, exception_handler
str sp, exception_idx
ldr sp, exception_stack_end
push { lr }
stmfd sp, { sp, lr }^
sub sp, sp, $8
push { r0 - r12 }
mov r0, sp
mov lr, pc
ldr pc, exception_handler
ldr r1, exception_idx
blx exception_dispatch
pop { r0 - r12 }
add sp, sp, $8
ldmfd sp!, { pc }^
.align 2
_undefined_instruction: .word exception_undefined_instruction
_software_interrupt: .word exception_software_interrupt
_prefetch_abort: .word exception_prefetch_abort
_data_abort: .word exception_data_abort
_not_used: .word exception_not_used
_irq: .word exception_irq
_fiq: .word exception_fiq
.global exception_stack_end
exception_stack_end:
.word 0
exception_handler:
exception_idx:
.word 0
.thumb