Setup VBAR_EL3 incrementally

This patch ensures that VBAR_EL3 points to the simple stack-less
'early_exceptions' when the C runtime stack is not correctly setup to
use the more complex 'runtime_exceptions'. It is initialised to
'runtime_exceptions' once this is done.

This patch also moves all exception vectors into a '.vectors' section
and modifies linker scripts to place all such sections together. This
will minimize space wastage from alignment restrictions.

Change-Id: I8c3e596ea3412c8bd582af9e8d622bb1cb2e049d
diff --git a/bl1/aarch64/early_exceptions.S b/bl1/aarch64/early_exceptions.S
index ef47f9e..84bdae1 100644
--- a/bl1/aarch64/early_exceptions.S
+++ b/bl1/aarch64/early_exceptions.S
@@ -37,12 +37,12 @@
 	.globl	early_exceptions
 	.weak	display_boot_progress
 
-	.section	.text, "ax"; .align 11
+	.section	.vectors, "ax"; .align 11
 
 	/* -----------------------------------------------------
-	 * Very simple exception handlers used by BL1 and BL2.
-	 * Apart from one SMC exception all other traps loop
-	 * endlessly.
+	 * Very simple stackless exception handlers used by all
+	 * bootloader stages. BL31 uses them before stacks are
+	 * setup. BL1/BL2 use them throughout.
 	 * -----------------------------------------------------
 	 */
 	.align	7
@@ -164,6 +164,7 @@
 
 	.align	7
 
+	.section	.text, "ax"
 process_exception:
 	sub	sp, sp, #0x40
 	stp	x0, x1, [sp, #0x0]
diff --git a/bl1/bl1.ld.S b/bl1/bl1.ld.S
index 969b8c2..ac52e52 100644
--- a/bl1/bl1.ld.S
+++ b/bl1/bl1.ld.S
@@ -45,6 +45,7 @@
         *bl1_entrypoint.o(.text)
         *(.text)
         *(.rodata*)
+        *(.vectors)
         __RO_END__ = .;
     } >ROM