diff options
| -rw-r--r-- | arch/powerpc/config.mk | 2 | ||||
| -rw-r--r-- | arch/powerpc/cpu/74xx_7xx/start.S | 11 | ||||
| -rw-r--r-- | arch/powerpc/cpu/mpc512x/start.S | 11 | ||||
| -rw-r--r-- | arch/powerpc/cpu/mpc5xx/start.S | 11 | ||||
| -rw-r--r-- | arch/powerpc/cpu/mpc5xxx/start.S | 11 | ||||
| -rw-r--r-- | arch/powerpc/cpu/mpc8220/start.S | 11 | ||||
| -rw-r--r-- | arch/powerpc/cpu/mpc824x/start.S | 11 | ||||
| -rw-r--r-- | arch/powerpc/cpu/mpc8260/start.S | 6 | ||||
| -rw-r--r-- | arch/powerpc/cpu/mpc83xx/start.S | 11 | ||||
| -rw-r--r-- | arch/powerpc/cpu/mpc85xx/start.S | 10 | ||||
| -rw-r--r-- | arch/powerpc/cpu/mpc86xx/start.S | 11 | ||||
| -rw-r--r-- | arch/powerpc/cpu/mpc8xx/start.S | 11 | ||||
| -rw-r--r-- | arch/powerpc/cpu/ppc4xx/start.S | 22 | 
13 files changed, 127 insertions, 12 deletions
| diff --git a/arch/powerpc/config.mk b/arch/powerpc/config.mk index 255f3d7af..8d72fbd7e 100644 --- a/arch/powerpc/config.mk +++ b/arch/powerpc/config.mk @@ -26,6 +26,8 @@ CROSS_COMPILE ?= ppc_8xx-  STANDALONE_LOAD_ADDR = 0x40000  LDFLAGS_FINAL += --gc-sections  PLATFORM_RELFLAGS += -fpic -mrelocatable -ffunction-sections -fdata-sections +PLATFORM_RELFLAGS += $(call cc-option,-msingle-pic-base,) +PLATFORM_RELFLAGS += $(call cc-option,-fno-jump-tables,)  PLATFORM_CPPFLAGS += -DCONFIG_PPC -D__powerpc__  PLATFORM_LDFLAGS  += -n diff --git a/arch/powerpc/cpu/74xx_7xx/start.S b/arch/powerpc/cpu/74xx_7xx/start.S index f6011fcaa..ab9412ad9 100644 --- a/arch/powerpc/cpu/74xx_7xx/start.S +++ b/arch/powerpc/cpu/74xx_7xx/start.S @@ -274,7 +274,11 @@ in_flash:  	stwu	r0, -4(r1)	/* stack backtraces terminate cleanly	*/  	GET_GOT			/* initialize GOT access	*/ - +#if defined(__pic__) && __pic__ == 1 +	/* Needed for upcoming -msingle-pic-base */ +	bl	_GLOBAL_OFFSET_TABLE_@local-4 +	mflr	r30 +#endif  	/* run low-level CPU init code     (from Flash)	*/  	bl	cpu_init_f  	sync @@ -588,6 +592,11 @@ relocate_code:  	mr	r10, r5		/* Save copy of Destination Address	*/  	GET_GOT +#if defined(__pic__) && __pic__ == 1 +	/* Needed for upcoming -msingle-pic-base */ +	bl	_GLOBAL_OFFSET_TABLE_@local-4 +	mflr	r30 +#endif  	mr	r3,  r5				/* Destination Address	*/  	lis	r4, CONFIG_SYS_MONITOR_BASE@h		/* Source      Address	*/  	ori	r4, r4, CONFIG_SYS_MONITOR_BASE@l diff --git a/arch/powerpc/cpu/mpc512x/start.S b/arch/powerpc/cpu/mpc512x/start.S index 9c2e4885d..632f9674c 100644 --- a/arch/powerpc/cpu/mpc512x/start.S +++ b/arch/powerpc/cpu/mpc512x/start.S @@ -255,7 +255,11 @@ in_flash:  	/*------------------------------------------------------*/  	GET_GOT			/* initialize GOT access	*/ - +#if defined(__pic__) && __pic__ == 1 +	/* Needed for upcoming -msingle-pic-base */ +	bl	_GLOBAL_OFFSET_TABLE_@local-4 +	mflr	r30 +#endif  	/* r3: IMMR */  	lis	r3, CONFIG_SYS_IMMR@h  	/* run low-level CPU init code (in Flash) */ @@ -486,6 +490,11 @@ relocate_code:  	mr	r10, r5		/* Save copy of Destination Address */  	GET_GOT +#if defined(__pic__) && __pic__ == 1 +	/* Needed for upcoming -msingle-pic-base */ +	bl	_GLOBAL_OFFSET_TABLE_@local-4 +	mflr	r30 +#endif  	mr	r3,  r5				/* Destination Address */  	lis	r4, CONFIG_SYS_MONITOR_BASE@h		/* Source      Address */  	ori	r4, r4, CONFIG_SYS_MONITOR_BASE@l diff --git a/arch/powerpc/cpu/mpc5xx/start.S b/arch/powerpc/cpu/mpc5xx/start.S index cc11c8fc5..4fb2047da 100644 --- a/arch/powerpc/cpu/mpc5xx/start.S +++ b/arch/powerpc/cpu/mpc5xx/start.S @@ -174,7 +174,11 @@ in_flash:  	/*----------------------------------------------------------------------*/  	GET_GOT			/* initialize GOT access			*/ - +#if defined(__pic__) && __pic__ == 1 +	/* Needed for upcoming -msingle-pic-base */ +	bl	_GLOBAL_OFFSET_TABLE_@local-4 +	mflr	r30 +#endif  	/* r3: IMMR */  	bl	cpu_init_f	/* run low-level CPU init code     (from Flash)	*/ @@ -363,6 +367,11 @@ relocate_code:  	mr	r10, r5		/* Save copy of monitor destination Address in SRAM */  	GET_GOT +#if defined(__pic__) && __pic__ == 1 +	/* Needed for upcoming -msingle-pic-base */ +	bl	_GLOBAL_OFFSET_TABLE_@local-4 +	mflr	r30 +#endif  	mr	r3,  r5				/* Destination Address	*/  	lis	r4, CONFIG_SYS_MONITOR_BASE@h		/* Source      Address	*/  	ori	r4, r4, CONFIG_SYS_MONITOR_BASE@l diff --git a/arch/powerpc/cpu/mpc5xxx/start.S b/arch/powerpc/cpu/mpc5xxx/start.S index 192aa506a..0a0536119 100644 --- a/arch/powerpc/cpu/mpc5xxx/start.S +++ b/arch/powerpc/cpu/mpc5xxx/start.S @@ -160,7 +160,11 @@ lowboot_reentry:  	/*--------------------------------------------------------------*/  	GET_GOT			/* initialize GOT access		*/ - +#if defined(__pic__) && __pic__ == 1 +	/* Needed for upcoming -msingle-pic-base */ +	bl	_GLOBAL_OFFSET_TABLE_@local-4 +	mflr	r30 +#endif  	/* r3: IMMR */  	bl	cpu_init_f	/* run low-level CPU init code (in Flash)*/ @@ -549,6 +553,11 @@ relocate_code:  	mr	r10, r5		/* Save copy of Destination Address	*/  	GET_GOT +#if defined(__pic__) && __pic__ == 1 +	/* Needed for upcoming -msingle-pic-base */ +	bl	_GLOBAL_OFFSET_TABLE_@local-4 +	mflr	r30 +#endif  	mr	r3,  r5				/* Destination Address	*/  	lis	r4, CONFIG_SYS_MONITOR_BASE@h		/* Source      Address	*/  	ori	r4, r4, CONFIG_SYS_MONITOR_BASE@l diff --git a/arch/powerpc/cpu/mpc8220/start.S b/arch/powerpc/cpu/mpc8220/start.S index 300b35c0c..1df87a6af 100644 --- a/arch/powerpc/cpu/mpc8220/start.S +++ b/arch/powerpc/cpu/mpc8220/start.S @@ -129,7 +129,11 @@ _start:  	/*--------------------------------------------------------------*/  	GET_GOT			/* initialize GOT access		*/ - +#if defined(__pic__) && __pic__ == 1 +	/* Needed for upcoming -msingle-pic-base */ +	bl	_GLOBAL_OFFSET_TABLE_@local-4 +	mflr	r30 +#endif  	/* r3: IMMR */  	bl	cpu_init_f	/* run low-level CPU init code (in Flash)*/ @@ -522,6 +526,11 @@ relocate_code:  	mr	r10, r5	    /* Save copy of Destination Address */  	GET_GOT +#if defined(__pic__) && __pic__ == 1 +	/* Needed for upcoming -msingle-pic-base */ +	bl	_GLOBAL_OFFSET_TABLE_@local-4 +	mflr	r30 +#endif  	mr	r3,  r5	    /* Destination Address		*/  	lis	r4, CONFIG_SYS_MONITOR_BASE@h	/* Source Address	*/  	ori	r4, r4, CONFIG_SYS_MONITOR_BASE@l diff --git a/arch/powerpc/cpu/mpc824x/start.S b/arch/powerpc/cpu/mpc824x/start.S index fc4e922d6..cc988759e 100644 --- a/arch/powerpc/cpu/mpc824x/start.S +++ b/arch/powerpc/cpu/mpc824x/start.S @@ -183,7 +183,11 @@ in_flash:  	/*----------------------------------------------------------------------*/  	GET_GOT			/* initialize GOT access			*/ - +#if defined(__pic__) && __pic__ == 1 +	/* Needed for upcoming -msingle-pic-base */ +	bl	_GLOBAL_OFFSET_TABLE_@local-4 +	mflr	r30 +#endif  	/* r3: IMMR */  	bl	cpu_init_f	/* run low-level CPU init code     (from Flash)	*/ @@ -452,6 +456,11 @@ relocate_code:  	mr	r10, r5		/* Save copy of Destination Address	*/  	GET_GOT +#if defined(__pic__) && __pic__ == 1 +	/* Needed for upcoming -msingle-pic-base */ +	bl	_GLOBAL_OFFSET_TABLE_@local-4 +	mflr	r30 +#endif  	mr	r3,  r5				/* Destination Address	*/  #ifdef CONFIG_SYS_RAMBOOT  	lis	r4, CONFIG_SYS_SDRAM_BASE@h		/* Source      Address	*/ diff --git a/arch/powerpc/cpu/mpc8260/start.S b/arch/powerpc/cpu/mpc8260/start.S index 702546eec..23151cdad 100644 --- a/arch/powerpc/cpu/mpc8260/start.S +++ b/arch/powerpc/cpu/mpc8260/start.S @@ -236,7 +236,11 @@ in_flash:  	/*--------------------------------------------------------------*/  	GET_GOT			/* initialize GOT access		*/ - +#if defined(__pic__) && __pic__ == 1 +	/* Needed for upcoming -msingle-pic-base */ +	bl	_GLOBAL_OFFSET_TABLE_@local-4 +	mflr	r30 +#endif  	/* r3: IMMR */  	bl	cpu_init_f	/* run low-level CPU init code (in Flash)*/ diff --git a/arch/powerpc/cpu/mpc83xx/start.S b/arch/powerpc/cpu/mpc83xx/start.S index 7e60315c3..a9acb83f0 100644 --- a/arch/powerpc/cpu/mpc83xx/start.S +++ b/arch/powerpc/cpu/mpc83xx/start.S @@ -285,7 +285,11 @@ in_flash:  	/*------------------------------------------------------*/  	GET_GOT			/* initialize GOT access	*/ - +#if defined(__pic__) && __pic__ == 1 +	/* Needed for upcoming -msingle-pic-base */ +	bl	_GLOBAL_OFFSET_TABLE_@local-4 +	mflr	r30 +#endif  	/* r3: IMMR */  	lis	r3, CONFIG_SYS_IMMR@h  	/* run low-level CPU init code (in Flash)*/ @@ -822,6 +826,11 @@ relocate_code:  	mr	r10, r5		/* Save copy of Destination Address */  	GET_GOT +#if defined(__pic__) && __pic__ == 1 +	/* Needed for upcoming -msingle-pic-base */ +	bl	_GLOBAL_OFFSET_TABLE_@local-4 +	mflr	r30 +#endif  	mr	r3,  r5				/* Destination Address */  	lis	r4, CONFIG_SYS_MONITOR_BASE@h		/* Source      Address */  	ori	r4, r4, CONFIG_SYS_MONITOR_BASE@l diff --git a/arch/powerpc/cpu/mpc85xx/start.S b/arch/powerpc/cpu/mpc85xx/start.S index 57774933a..36233578f 100644 --- a/arch/powerpc/cpu/mpc85xx/start.S +++ b/arch/powerpc/cpu/mpc85xx/start.S @@ -421,6 +421,11 @@ _start_cont:  	stw	r0,+12(r1)		/* Save return addr (underflow vect) */  	GET_GOT +#if defined(__pic__) && __pic__ == 1 +	/* Needed for upcoming -msingle-pic-base */ +	bl	_GLOBAL_OFFSET_TABLE_@local-4 +	mflr	r30 +#endif  	bl	cpu_init_early_f  	/* switch back to AS = 0 */ @@ -921,6 +926,11 @@ relocate_code:  	mr	r10,r5		/* Save copy of Destination Address	*/  	GET_GOT +#if defined(__pic__) && __pic__ == 1 +	/* Needed for upcoming -msingle-pic-base */ +	bl	_GLOBAL_OFFSET_TABLE_@local-4 +	mflr	r30 +#endif  	mr	r3,r5				/* Destination Address	*/  	lis	r4,CONFIG_SYS_MONITOR_BASE@h		/* Source      Address	*/  	ori	r4,r4,CONFIG_SYS_MONITOR_BASE@l diff --git a/arch/powerpc/cpu/mpc86xx/start.S b/arch/powerpc/cpu/mpc86xx/start.S index 3e3c21eef..2ec7fd46b 100644 --- a/arch/powerpc/cpu/mpc86xx/start.S +++ b/arch/powerpc/cpu/mpc86xx/start.S @@ -255,7 +255,11 @@ addr_trans_enabled:  	stwu	r0, -4(r1)	/* stack backtraces terminate cleanly	*/  	GET_GOT			/* initialize GOT access	*/ - +#if defined(__pic__) && __pic__ == 1 +	/* Needed for upcoming -msingle-pic-base */ +	bl	_GLOBAL_OFFSET_TABLE_@local-4 +	mflr	r30 +#endif  	/* run low-level CPU init code	   (from Flash) */  	bl	cpu_init_f  	sync @@ -620,6 +624,11 @@ relocate_code:  	mr	r10, r5		/* Save copy of Destination Address	*/  	GET_GOT +#if defined(__pic__) && __pic__ == 1 +	/* Needed for upcoming -msingle-pic-base */ +	bl	_GLOBAL_OFFSET_TABLE_@local-4 +	mflr	r30 +#endif  	mr	r3,  r5				/* Destination Address	*/  	lis	r4, CONFIG_SYS_MONITOR_BASE@h		/* Source      Address	*/  	ori	r4, r4, CONFIG_SYS_MONITOR_BASE@l diff --git a/arch/powerpc/cpu/mpc8xx/start.S b/arch/powerpc/cpu/mpc8xx/start.S index fe3daa2b9..f8256bff9 100644 --- a/arch/powerpc/cpu/mpc8xx/start.S +++ b/arch/powerpc/cpu/mpc8xx/start.S @@ -188,7 +188,11 @@ in_flash:  	/*----------------------------------------------------------------------*/  	GET_GOT			/* initialize GOT access			*/ - +#if defined(__pic__) && __pic__ == 1 +	/* Needed for upcoming -msingle-pic-base */ +	bl	_GLOBAL_OFFSET_TABLE_@local-4 +	mflr	r30 +#endif  	/* r3: IMMR */  	bl	cpu_init_f	/* run low-level CPU init code     (from Flash)	*/ @@ -473,6 +477,11 @@ relocate_code:  	mr	r10, r5		/* Save copy of Destination Address	*/  	GET_GOT +#if defined(__pic__) && __pic__ == 1 +	/* Needed for upcoming -msingle-pic-base */ +	bl	_GLOBAL_OFFSET_TABLE_@local-4 +	mflr	r30 +#endif  	mr	r3,  r5				/* Destination Address	*/  	lis	r4, CONFIG_SYS_MONITOR_BASE@h		/* Source      Address	*/  	ori	r4, r4, CONFIG_SYS_MONITOR_BASE@l diff --git a/arch/powerpc/cpu/ppc4xx/start.S b/arch/powerpc/cpu/ppc4xx/start.S index b43e22c8f..aa03d9a77 100644 --- a/arch/powerpc/cpu/ppc4xx/start.S +++ b/arch/powerpc/cpu/ppc4xx/start.S @@ -262,6 +262,11 @@  	bl	reconfig_tlb0  #endif  	GET_GOT +#if defined(__pic__) && __pic__ == 1 +	/* Needed for upcoming -msingle-pic-base */ +	bl	_GLOBAL_OFFSET_TABLE_@local-4 +	mflr	r30 +#endif  	bl	cpu_init_f	/* run low-level CPU init code	   (from Flash) */  	bl	board_init_f  	/* NOTREACHED - board_init_f() does not return */ @@ -799,7 +804,11 @@ _start:  	ori	r0,r0, RESET_VECTOR@l  	stwu	r1,-8(r1)		/* Save back chain and move SP */  	stw	r0,+12(r1)		/* Save return addr (underflow vect) */ - +#if defined(__pic__) && __pic__ == 1 +	/* Needed for upcoming -msingle-pic-base */ +	bl	_GLOBAL_OFFSET_TABLE_@local-4 +	mflr	r30 +#endif  #ifdef CONFIG_NAND_SPL  	bl	nand_boot_common	/* will not return */  #else @@ -914,7 +923,11 @@ _start:  	stwu	r0, -4(r1)		/* stack backtraces terminate cleanly	*/  	GET_GOT			/* initialize GOT access			*/ - +#if defined(__pic__) && __pic__ == 1 +	/* Needed for upcoming -msingle-pic-base */ +	bl	_GLOBAL_OFFSET_TABLE_@local-4 +	mflr	r30 +#endif  	bl	board_init_f	/* run first part of init code (from Flash)	*/  	/* NOTREACHED - board_init_f() does not return */ @@ -1179,6 +1192,11 @@ _start:  	stw	r0, +12(r1)		/* Save return addr (underflow vect) */  #endif /* CONFIG_SYS_INIT_DCACHE_CS */ +#if defined(__pic__) && __pic__ == 1 +	/* Needed for upcoming -msingle-pic-base */ +	bl	_GLOBAL_OFFSET_TABLE_@local-4 +	mflr	r30 +#endif  #ifdef CONFIG_NAND_SPL  	bl	nand_boot_common	/* will not return */  #else |