|
@@ -59,6 +59,7 @@ jiffies = jiffies_64;
|
|
|
* garbage.)
|
|
|
*/
|
|
|
|
|
|
+#ifdef CONFIG_VECTORS_OFFSET
|
|
|
#define SECTION_VECTOR(sym, section, addr, max_prevsec_size, prevsec) \
|
|
|
section addr : AT((MIN(LOADADDR(prevsec) + max_prevsec_size, \
|
|
|
LOADADDR(prevsec) + SIZEOF(prevsec)) + 3) & ~ 3) \
|
|
@@ -68,6 +69,11 @@ jiffies = jiffies_64;
|
|
|
*(section) \
|
|
|
sym ## _end = ABSOLUTE(.); \
|
|
|
}
|
|
|
+#else
|
|
|
+#define SECTION_VECTOR(section, addr) \
|
|
|
+ . = addr; \
|
|
|
+ *(section)
|
|
|
+#endif
|
|
|
|
|
|
/*
|
|
|
* Mapping of input sections to output sections when linking.
|
|
@@ -85,6 +91,37 @@ SECTIONS
|
|
|
{
|
|
|
/* The HEAD_TEXT section must be the first section! */
|
|
|
HEAD_TEXT
|
|
|
+
|
|
|
+#ifndef CONFIG_VECTORS_OFFSET
|
|
|
+ . = ALIGN(PAGE_SIZE);
|
|
|
+ _vecbase = .;
|
|
|
+
|
|
|
+ SECTION_VECTOR (.WindowVectors.text, WINDOW_VECTORS_VADDR)
|
|
|
+#if XCHAL_EXCM_LEVEL >= 2
|
|
|
+ SECTION_VECTOR (.Level2InterruptVector.text, INTLEVEL2_VECTOR_VADDR)
|
|
|
+#endif
|
|
|
+#if XCHAL_EXCM_LEVEL >= 3
|
|
|
+ SECTION_VECTOR (.Level3InterruptVector.text, INTLEVEL3_VECTOR_VADDR)
|
|
|
+#endif
|
|
|
+#if XCHAL_EXCM_LEVEL >= 4
|
|
|
+ SECTION_VECTOR (.Level4InterruptVector.text, INTLEVEL4_VECTOR_VADDR)
|
|
|
+#endif
|
|
|
+#if XCHAL_EXCM_LEVEL >= 5
|
|
|
+ SECTION_VECTOR (.Level5InterruptVector.text, INTLEVEL5_VECTOR_VADDR)
|
|
|
+#endif
|
|
|
+#if XCHAL_EXCM_LEVEL >= 6
|
|
|
+ SECTION_VECTOR (.Level6InterruptVector.text, INTLEVEL6_VECTOR_VADDR)
|
|
|
+#endif
|
|
|
+ SECTION_VECTOR (.DebugInterruptVector.literal, DEBUG_VECTOR_VADDR - 4)
|
|
|
+ SECTION_VECTOR (.DebugInterruptVector.text, DEBUG_VECTOR_VADDR)
|
|
|
+ SECTION_VECTOR (.KernelExceptionVector.literal, KERNEL_VECTOR_VADDR - 4)
|
|
|
+ SECTION_VECTOR (.KernelExceptionVector.text, KERNEL_VECTOR_VADDR)
|
|
|
+ SECTION_VECTOR (.UserExceptionVector.literal, USER_VECTOR_VADDR - 4)
|
|
|
+ SECTION_VECTOR (.UserExceptionVector.text, USER_VECTOR_VADDR)
|
|
|
+ SECTION_VECTOR (.DoubleExceptionVector.literal, DOUBLEEXC_VECTOR_VADDR - 48)
|
|
|
+ SECTION_VECTOR (.DoubleExceptionVector.text, DOUBLEEXC_VECTOR_VADDR)
|
|
|
+#endif
|
|
|
+
|
|
|
TEXT_TEXT
|
|
|
VMLINUX_SYMBOL(__sched_text_start) = .;
|
|
|
*(.sched.literal .sched.text)
|
|
@@ -132,6 +169,7 @@ SECTIONS
|
|
|
. = ALIGN(16);
|
|
|
__boot_reloc_table_start = ABSOLUTE(.);
|
|
|
|
|
|
+#ifdef CONFIG_VECTORS_OFFSET
|
|
|
RELOCATE_ENTRY(_WindowVectors_text,
|
|
|
.WindowVectors.text);
|
|
|
#if XCHAL_EXCM_LEVEL >= 2
|
|
@@ -164,6 +202,7 @@ SECTIONS
|
|
|
.DoubleExceptionVector.text);
|
|
|
RELOCATE_ENTRY(_DebugInterruptVector_text,
|
|
|
.DebugInterruptVector.text);
|
|
|
+#endif
|
|
|
#if defined(CONFIG_SMP)
|
|
|
RELOCATE_ENTRY(_SecondaryResetVector_text,
|
|
|
.SecondaryResetVector.text);
|
|
@@ -186,6 +225,7 @@ SECTIONS
|
|
|
. = ALIGN(4);
|
|
|
.dummy : { LONG(0) }
|
|
|
|
|
|
+#ifdef CONFIG_VECTORS_OFFSET
|
|
|
/* The vectors are relocated to the real position at startup time */
|
|
|
|
|
|
SECTION_VECTOR (_WindowVectors_text,
|
|
@@ -277,6 +317,7 @@ SECTIONS
|
|
|
|
|
|
. = (LOADADDR( .DoubleExceptionVector.text ) + SIZEOF( .DoubleExceptionVector.text ) + 3) & ~ 3;
|
|
|
|
|
|
+#endif
|
|
|
#if defined(CONFIG_SMP)
|
|
|
|
|
|
SECTION_VECTOR (_SecondaryResetVector_text,
|