9os

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs | README | LICENSE

commit 15d37b0609aad81a55e4791b03436d514d24ed07
parent 426944094b6e6acad0dd8701aa6122fb84847181
Author: Dimitris Papastamos <dimitris.papastamos@arm.com>
Date:   Fri, 12 Oct 2018 16:29:21 +0100

[arm64] Rework vector table format

There was not much benefit for macros.s since we only handle sync
exceptions and each handler is only 2 instructions.

Change-Id: I75fb50748c1b7cdd73e0988bbd44dfadad217541
Signed-off-by: Dimitris Papastamos <dimitris.papastamos@arm.com>

Diffstat:
March/arm64/Makefile | 2+-
March/arm64/crt-none.s | 75+++++++++++++++++++++++++++++++++++++++++++++++++++++----------------------
Darch/arm64/macros.s | 41-----------------------------------------
3 files changed, 54 insertions(+), 64 deletions(-)

diff --git a/arch/arm64/Makefile b/arch/arm64/Makefile @@ -18,7 +18,7 @@ crt-none.s: cdeps crt-none.s: frame.inc -ram-crt-none.o rom-crt-none.o: macros.s crt-none.s +ram-crt-none.o rom-crt-none.o: crt-none.s $(BINDIR)/romfw.elf: $(ROMOBJS) $(LIBDEP) $(LD) $(RCODE_LDFLAGS) $(ROMOBJS) $(LIBS) -o $@ diff --git a/arch/arm64/crt-none.s b/arch/arm64/crt-none.s @@ -1,4 +1,3 @@ - .include "macros.s" .include "frame.inc" /* TODO: extract data section address from RSCB */ @@ -43,37 +42,69 @@ _start: ldr x0,=outsync b panic -outsync: - .asciz "out of sync" +_badtrap: + adr x0,unexpected + b panic /* Top level arm64 Sync exception handler */ _synchdl: - handler synchdl + stp x1,x0,[sp,#-16]! + stp x3,x2,[sp,#-16]! + stp x5,x4,[sp,#-16]! + stp x7,x6,[sp,#-16]! + stp x9,x8,[sp,#-16]! + stp x11,x10,[sp,#-16]! + stp x13,x12,[sp,#-16]! + stp x15,x14,[sp,#-16]! + stp x17,x16,[sp,#-16]! + stp x19,x18,[sp,#-16]! + stp x21,x20,[sp,#-16]! + stp x23,x22,[sp,#-16]! + stp x25,x24,[sp,#-16]! + stp x27,x26,[sp,#-16]! + stp x29,x28,[sp,#-16]! + stp xzr,x30,[sp,#-16]! /* SP = 0, only useful in panic() */ + + mrs x1,S3_6_C4_C0_6 /* SPSR_R */ + mrs x0,S3_6_C4_C0_3 /* ELR_R */ + stp x1,x0,[sp,#-16]! + + mrs x1,S3_6_C6_C0_6 /* FAR_R */ + mrs x0,S3_6_C5_C2_6 /* ESR_R */ + stp x1,x0,[sp,#-16]! + + mov x0,sp + bl synchdl + b swtch + +outsync: + .asciz "out of sync" + +unexpected: + .asciz "unexpected exception" .align 11 vectbl: /* Current EL with SP0 */ - vempty /* Sync */ - vempty /* IRQ/vIRQ */ - vempty /* FIQ/vFIQ */ - vempty /* SError/VSError */ + b _badtrap; nop /* Sync */ + b _badtrap; nop /* IRQ/vIRQ */ + b _badtrap; nop /* FIQ/vFIQ */ + b _badtrap; nop /* SError/VSError */ /* Current EL with SPx */ - vempty /* Sync */ - vempty /* IRQ/vIRQ */ - vempty /* FIQ/vFIQ */ - vempty /* SError/VSError */ + b _badtrap; nop /* Sync */ + b _badtrap; nop /* IRQ/vIRQ */ + b _badtrap; nop /* FIQ/vFIQ */ + b _badtrap; nop /* SError/VSError */ /* Lower EL using AArch64 */ - vector _synchdl /* Sync */ - vempty /* IRQ/vIRQ */ - vempty /* FIQ/vFIQ */ - vempty /* SError/VSError */ + b _synchdl; nop /* Sync */ + b _badtrap; nop /* IRQ/vIRQ */ + b _badtrap; nop /* FIQ/vFIQ */ + b _badtrap; nop /* SError/VSError */ /* Lower EL using AArch32 */ - vector _synchdl /* Sync */ - vempty /* IRQ/vIRQ */ - vempty /* FIQ/vFIQ */ - vempty /* SError/VSError */ - -badtrap: .asciz "bad exception" + b _synchdl; nop /* Sync */ + b _badtrap; nop /* IRQ/vIRQ */ + b _badtrap; nop /* FIQ/vFIQ */ + b _badtrap; nop /* SError/VSError */ diff --git a/arch/arm64/macros.s b/arch/arm64/macros.s @@ -1,41 +0,0 @@ -.macro vempty - .align 3 - adr x0,badtrap - b panic -.endm - -.macro vector name - .align 3 - b \name -.endm - -.macro handler target - stp x1,x0,[sp,#-16]! - stp x3,x2,[sp,#-16]! - stp x5,x4,[sp,#-16]! - stp x7,x6,[sp,#-16]! - stp x9,x8,[sp,#-16]! - stp x11,x10,[sp,#-16]! - stp x13,x12,[sp,#-16]! - stp x15,x14,[sp,#-16]! - stp x17,x16,[sp,#-16]! - stp x19,x18,[sp,#-16]! - stp x21,x20,[sp,#-16]! - stp x23,x22,[sp,#-16]! - stp x25,x24,[sp,#-16]! - stp x27,x26,[sp,#-16]! - stp x29,x28,[sp,#-16]! - stp xzr,x30,[sp,#-16]! /* SP = 0, only useful in panic() */ - - mrs x1,S3_6_C4_C0_6 /* SPSR_R */ - mrs x0,S3_6_C4_C0_3 /* ELR_R */ - stp x1,x0,[sp,#-16]! - - mrs x1,S3_6_C6_C0_6 /* FAR_R */ - mrs x0,S3_6_C5_C2_6 /* ESR_R */ - stp x1,x0,[sp,#-16]! - - mov x0,sp - bl \target - b swtch -.endm