Index: c/src/lib/libbsp/powerpc/qoriq/start/start.S
===================================================================
--- c/src/lib/libbsp/powerpc/qoriq/start/start.S	(revision c8aeb76c44ff04d71573c24b6f0ca1a3c2ed33fe)
+++ c/src/lib/libbsp/powerpc/qoriq/start/start.S	(revision c693a3a5061b67ad63faf7ae76be98ea7eb5cda8)
@@ -68,4 +68,5 @@
 	LA	r4, bsp_section_fast_text_size
 	bl	rtems_cache_flush_multiple_data_lines
+	PPC64_NOP_FOR_LINKER_TOC_POINTER_RESTORE
 
 	/* Copy read-only data */
@@ -78,4 +79,5 @@
 	mr	r3, FDT_REGISTER
 	bl	bsp_fdt_copy
+	PPC64_NOP_FOR_LINKER_TOC_POINTER_RESTORE
 
 	/* Flush read-only data */
@@ -83,4 +85,5 @@
 	LA	r4, bsp_section_rodata_size
 	bl	rtems_cache_flush_multiple_data_lines
+	PPC64_NOP_FOR_LINKER_TOC_POINTER_RESTORE
 
 	/* Copy fast data */
@@ -117,4 +120,5 @@
 	LA	r4, bsp_section_sbss_size
 	bl	bsp_start_zero
+	PPC64_NOP_FOR_LINKER_TOC_POINTER_RESTORE
 
 	/* Clear BSS */
@@ -122,4 +126,5 @@
 	LA	r4, bsp_section_bss_size
 	bl	bsp_start_zero
+	PPC64_NOP_FOR_LINKER_TOC_POINTER_RESTORE
 
 #ifndef __powerpc64__
@@ -132,4 +137,5 @@
 
 	bl	boot_card
+	PPC64_NOP_FOR_LINKER_TOC_POINTER_RESTORE
 
 .Lcopy:
@@ -137,4 +143,5 @@
 	beqlr
 	b	memcpy
+	PPC64_NOP_FOR_LINKER_TOC_POINTER_RESTORE
 
 .Linitearly:
@@ -197,4 +204,5 @@
 	li	r3, 1
 	bl	qoriq_tlb1_invalidate_all_by_ts
+	PPC64_NOP_FOR_LINKER_TOC_POINTER_RESTORE
 
 	/* Add TS1 entry for the first 4GiB of RAM */
@@ -207,4 +215,5 @@
 	li	r9, 11
 	bl	qoriq_tlb1_write
+	PPC64_NOP_FOR_LINKER_TOC_POINTER_RESTORE
 
 	/* MSR initialization and use TS1 for address translation */
@@ -238,8 +247,10 @@
 	li	r5, SCRATCH_TLB
 	bl	qoriq_mmu_config
+	PPC64_NOP_FOR_LINKER_TOC_POINTER_RESTORE
 	mtmsr	INITIAL_MSR
 	isync
 	li	r3, SCRATCH_TLB
 	bl	qoriq_tlb1_invalidate
+	PPC64_NOP_FOR_LINKER_TOC_POINTER_RESTORE
 
 	mtlr	SAVED_LINK_REGISTER
@@ -315,4 +326,5 @@
 
 	b	qoriq_start_thread
+	PPC64_NOP_FOR_LINKER_TOC_POINTER_RESTORE
 #endif
 _start_secondary_processor:
@@ -326,5 +338,12 @@
 	bl	.Linitmmu
 	b	bsp_start_on_secondary_processor
+	PPC64_NOP_FOR_LINKER_TOC_POINTER_RESTORE
 #endif /* RTEMS_SMP */
+
+#ifdef __powerpc64__
+#define START_NOP_FOR_LINKER_TOC_POINTER_RESTORE nop; nop; nop; nop
+#else
+#define START_NOP_FOR_LINKER_TOC_POINTER_RESTORE
+#endif
 
 	/* Exception vector prologues area */
@@ -337,4 +356,5 @@
 	li	r3, 0
 	b	ppc_exc_fatal_critical
+	START_NOP_FOR_LINKER_TOC_POINTER_RESTORE
 	/* Machine check */
 	PPC_REG_STORE_UPDATE	r1, -EXC_GENERIC_SIZE(r1)
@@ -342,4 +362,5 @@
 	li	r3, 1
 	b	ppc_exc_fatal_machine_check
+	START_NOP_FOR_LINKER_TOC_POINTER_RESTORE
 	/* Data storage */
 	PPC_REG_STORE_UPDATE	r1, -EXC_GENERIC_SIZE(r1)
@@ -347,4 +368,5 @@
 	li	r3, 2
 	b	ppc_exc_fatal_normal
+	START_NOP_FOR_LINKER_TOC_POINTER_RESTORE
 	/* Instruction storage */
 	PPC_REG_STORE_UPDATE	r1, -EXC_GENERIC_SIZE(r1)
@@ -352,4 +374,5 @@
 	li	r3, 3
 	b	ppc_exc_fatal_normal
+	START_NOP_FOR_LINKER_TOC_POINTER_RESTORE
 	/* External input */
 	PPC_REG_STORE_UPDATE	r1, -PPC_EXC_INTERRUPT_FRAME_SIZE(r1)
@@ -357,4 +380,5 @@
 	nop
 	nop
+	START_NOP_FOR_LINKER_TOC_POINTER_RESTORE
 	/* Alignment */
 	PPC_REG_STORE_UPDATE	r1, -EXC_GENERIC_SIZE(r1)
@@ -362,4 +386,5 @@
 	li	r3, 5
 	b	ppc_exc_fatal_normal
+	START_NOP_FOR_LINKER_TOC_POINTER_RESTORE
 	/* Program */
 	PPC_REG_STORE_UPDATE	r1, -EXC_GENERIC_SIZE(r1)
@@ -367,4 +392,5 @@
 	li	r3, 6
 	b	ppc_exc_fatal_normal
+	START_NOP_FOR_LINKER_TOC_POINTER_RESTORE
 #ifdef __PPC_CPU_E6500__
 	/* Floating-point unavailable */
@@ -373,4 +399,5 @@
 	li	r3, 7
 	b	ppc_exc_fatal_normal
+	START_NOP_FOR_LINKER_TOC_POINTER_RESTORE
 #endif
 	/* System call */
@@ -379,4 +406,5 @@
 	li	r3, 8
 	b	ppc_exc_fatal_normal
+	START_NOP_FOR_LINKER_TOC_POINTER_RESTORE
 #ifdef __PPC_CPU_E6500__
 	/* APU unavailable */
@@ -385,4 +413,5 @@
 	li	r3, 9
 	b	ppc_exc_fatal_normal
+	START_NOP_FOR_LINKER_TOC_POINTER_RESTORE
 #endif
 	/* Decrementer */
@@ -391,4 +420,5 @@
 	li	r3, 10
 	b	ppc_exc_fatal_normal
+	START_NOP_FOR_LINKER_TOC_POINTER_RESTORE
 	/* Fixed-interval timer interrupt */
 	PPC_REG_STORE_UPDATE	r1, -EXC_GENERIC_SIZE(r1)
@@ -396,4 +426,5 @@
 	li	r3, 11
 	b	ppc_exc_fatal_normal
+	START_NOP_FOR_LINKER_TOC_POINTER_RESTORE
 	/* Watchdog timer interrupt */
 	PPC_REG_STORE_UPDATE	r1, -EXC_GENERIC_SIZE(r1)
@@ -401,4 +432,5 @@
 	li	r3, 12
 	b	ppc_exc_fatal_critical
+	START_NOP_FOR_LINKER_TOC_POINTER_RESTORE
 	/* Data TLB error */
 	PPC_REG_STORE_UPDATE	r1, -EXC_GENERIC_SIZE(r1)
@@ -406,4 +438,5 @@
 	li	r3, 13
 	b	ppc_exc_fatal_normal
+	START_NOP_FOR_LINKER_TOC_POINTER_RESTORE
 	/* Instruction TLB error */
 	PPC_REG_STORE_UPDATE	r1, -EXC_GENERIC_SIZE(r1)
@@ -411,4 +444,5 @@
 	li	r3, 14
 	b	ppc_exc_fatal_normal
+	START_NOP_FOR_LINKER_TOC_POINTER_RESTORE
 	/* Debug */
 	PPC_REG_STORE_UPDATE	r1, -EXC_GENERIC_SIZE(r1)
@@ -416,4 +450,5 @@
 	li	r3, 15
 	b	ppc_exc_fatal_debug
+	START_NOP_FOR_LINKER_TOC_POINTER_RESTORE
 	/* SPE APU unavailable or AltiVec unavailable */
 	PPC_REG_STORE_UPDATE	r1, -EXC_GENERIC_SIZE(r1)
@@ -421,4 +456,5 @@
 	li	r3, 32
 	b	ppc_exc_fatal_normal
+	START_NOP_FOR_LINKER_TOC_POINTER_RESTORE
 	/* SPE floating-point data exception or AltiVec assist */
 	PPC_REG_STORE_UPDATE	r1, -EXC_GENERIC_SIZE(r1)
@@ -426,4 +462,5 @@
 	li	r3, 33
 	b	ppc_exc_fatal_normal
+	START_NOP_FOR_LINKER_TOC_POINTER_RESTORE
 #ifndef __PPC_CPU_E6500__
 	/* SPE floating-point round exception */
@@ -432,4 +469,5 @@
 	li	r3, 34
 	b	ppc_exc_fatal_normal
+	START_NOP_FOR_LINKER_TOC_POINTER_RESTORE
 #endif
 	/* Performance monitor */
@@ -438,4 +476,5 @@
 	li	r3, 35
 	b	ppc_exc_fatal_normal
+	START_NOP_FOR_LINKER_TOC_POINTER_RESTORE
 #ifdef __PPC_CPU_E6500__
 	/* Processor doorbell interrupt */
@@ -444,4 +483,5 @@
 	li	r3, 36
 	b	ppc_exc_fatal_normal
+	START_NOP_FOR_LINKER_TOC_POINTER_RESTORE
 	/* Processor doorbell critical interrupt */
 	PPC_REG_STORE_UPDATE	r1, -EXC_GENERIC_SIZE(r1)
@@ -449,4 +489,5 @@
 	li	r3, 37
 	b	ppc_exc_fatal_critical
+	START_NOP_FOR_LINKER_TOC_POINTER_RESTORE
 	/* Guest processor doorbell */
 	PPC_REG_STORE_UPDATE	r1, -EXC_GENERIC_SIZE(r1)
@@ -454,4 +495,5 @@
 	li	r3, 38
 	b	ppc_exc_fatal_normal
+	START_NOP_FOR_LINKER_TOC_POINTER_RESTORE
 	/* Guest processor doorbell critical and machine check */
 	PPC_REG_STORE_UPDATE	r1, -EXC_GENERIC_SIZE(r1)
@@ -459,4 +501,5 @@
 	li	r3, 39
 	b	ppc_exc_fatal_critical
+	START_NOP_FOR_LINKER_TOC_POINTER_RESTORE
 	/* Hypervisor system call */
 	PPC_REG_STORE_UPDATE	r1, -EXC_GENERIC_SIZE(r1)
@@ -464,4 +507,5 @@
 	li	r3, 40
 	b	ppc_exc_fatal_normal
+	START_NOP_FOR_LINKER_TOC_POINTER_RESTORE
 	/* Hypervisor privilege */
 	PPC_REG_STORE_UPDATE	r1, -EXC_GENERIC_SIZE(r1)
@@ -469,4 +513,5 @@
 	li	r3, 41
 	b	ppc_exc_fatal_normal
+	START_NOP_FOR_LINKER_TOC_POINTER_RESTORE
 	/* LRAT error */
 	PPC_REG_STORE_UPDATE	r1, -EXC_GENERIC_SIZE(r1)
@@ -474,4 +519,5 @@
 	li	r3, 42
 	b	ppc_exc_fatal_normal
+	START_NOP_FOR_LINKER_TOC_POINTER_RESTORE
 #endif
 
Index: c/src/lib/libbsp/powerpc/qoriq/startup/bspstart.c
===================================================================
--- c/src/lib/libbsp/powerpc/qoriq/startup/bspstart.c	(revision c8aeb76c44ff04d71573c24b6f0ca1a3c2ed33fe)
+++ c/src/lib/libbsp/powerpc/qoriq/startup/bspstart.c	(revision c693a3a5061b67ad63faf7ae76be98ea7eb5cda8)
@@ -114,8 +114,14 @@
   __asm__ volatile ("mtivpr %0" : : "r" (base))
 
+#ifdef __powerpc64__
+#define VECTOR_TABLE_ENTRY_SIZE 32
+#else
+#define VECTOR_TABLE_ENTRY_SIZE 16
+#endif
+
 #define MTIVOR(vec, offset) \
   do { \
     __asm__ volatile ("mtspr " RTEMS_XSTRING(vec) ", %0" : : "r" (offset)); \
-    offset += 16; \
+    offset += VECTOR_TABLE_ENTRY_SIZE; \
   } while (0)
 
Index: c/src/lib/libcpu/powerpc/new-exceptions/bspsupport/ppc_exc_async_normal.S
===================================================================
--- c/src/lib/libcpu/powerpc/new-exceptions/bspsupport/ppc_exc_async_normal.S	(revision c8aeb76c44ff04d71573c24b6f0ca1a3c2ed33fe)
+++ c/src/lib/libcpu/powerpc/new-exceptions/bspsupport/ppc_exc_async_normal.S	(revision c693a3a5061b67ad63faf7ae76be98ea7eb5cda8)
@@ -279,4 +279,5 @@
 	/* Call fixed high level handler */
 	bl	bsp_interrupt_dispatch
+	PPC64_NOP_FOR_LINKER_TOC_POINTER_RESTORE
 #endif /* PPC_EXC_CONFIG_USE_FIXED_HANDLER */
 
@@ -288,4 +289,5 @@
 	GET_TIME_BASE	r5
 	bl	_Profiling_Outer_most_interrupt_entry_and_exit
+	PPC64_NOP_FOR_LINKER_TOC_POINTER_RESTORE
 .Lprofiling_done:
 #endif /* RTEMS_PROFILING */
@@ -335,4 +337,5 @@
 	ori	r4, r4, MSR_EE
 	bl	_Thread_Do_dispatch
+	PPC64_NOP_FOR_LINKER_TOC_POINTER_RESTORE
 
 	/* Disable interrupts */
Index: c/src/lib/libcpu/powerpc/new-exceptions/bspsupport/ppc_exc_fatal.S
===================================================================
--- c/src/lib/libcpu/powerpc/new-exceptions/bspsupport/ppc_exc_fatal.S	(revision c8aeb76c44ff04d71573c24b6f0ca1a3c2ed33fe)
+++ c/src/lib/libcpu/powerpc/new-exceptions/bspsupport/ppc_exc_fatal.S	(revision c693a3a5061b67ad63faf7ae76be98ea7eb5cda8)
@@ -227,2 +227,3 @@
 	addi	r4, r1, FRAME_LINK_SPACE
 	b	_Terminate
+	PPC64_NOP_FOR_LINKER_TOC_POINTER_RESTORE
Index: cpukit/score/cpu/powerpc/rtems/asm.h
===================================================================
--- cpukit/score/cpu/powerpc/rtems/asm.h	(revision c8aeb76c44ff04d71573c24b6f0ca1a3c2ed33fe)
+++ cpukit/score/cpu/powerpc/rtems/asm.h	(revision c693a3a5061b67ad63faf7ae76be98ea7eb5cda8)
@@ -302,4 +302,9 @@
 #endif
 
-
-#endif
+#if defined(__powerpc64__)
+#define PPC64_NOP_FOR_LINKER_TOC_POINTER_RESTORE nop
+#else
+#define PPC64_NOP_FOR_LINKER_TOC_POINTER_RESTORE
+#endif
+
+#endif
