mirror of
				https://xff.cz/git/u-boot/
				synced 2025-10-31 10:26:10 +01:00 
			
		
		
		
	arm: make __bss_start and __bss_end__ compiler-generated
Turn __bss_start and __bss_end__ from linker-generated to compiler-generated symbols, causing relocations for these symbols to change type, from R_ARM_ABS32 to R_ARM_RELATIVE. This should have no functional impact, as it affects references to __bss_start and __bss_end__ only before relocation, and no such references are done. Signed-off-by: Albert ARIBAUD <albert.u.boot@aribaud.net>
This commit is contained in:
		| @@ -67,11 +67,17 @@ SECTIONS | ||||
|  | ||||
| 	_end = .; | ||||
|  | ||||
| 	.bss __rel_dyn_start (OVERLAY) : { | ||||
| 		__bss_start = .; | ||||
| 	.bss_start __rel_dyn_start (OVERLAY) : { | ||||
| 		KEEP(*(.__bss_start)); | ||||
| 	} | ||||
|  | ||||
| 	.bss __bss_start (OVERLAY) : { | ||||
| 		*(.bss*) | ||||
| 		 . = ALIGN(4); | ||||
| 		__bss_end__ = .; | ||||
| 		 ___bssend___ = .; | ||||
| 	} | ||||
| 	.bss_end ___bssend___ (OVERLAY) : { | ||||
| 		KEEP(*(.__bss_end__)); | ||||
| 	} | ||||
|  | ||||
| 	/DISCARD/ : { *(.dynstr*) } | ||||
|   | ||||
| @@ -81,11 +81,17 @@ SECTIONS | ||||
| 		*(.mmutable) | ||||
| 	} | ||||
|  | ||||
| 	.bss __rel_dyn_start (OVERLAY) : { | ||||
| 		__bss_start = .; | ||||
| 	.bss_start __rel_dyn_start (OVERLAY) : { | ||||
| 		KEEP(*(.__bss_start)); | ||||
| 	} | ||||
|  | ||||
| 	.bss __bss_start (OVERLAY) : { | ||||
| 		*(.bss*) | ||||
| 		 . = ALIGN(4); | ||||
| 		__bss_end__ = .; | ||||
| 		 ___bssend___ = .; | ||||
| 	} | ||||
| 	.bss_end ___bssend___ (OVERLAY) : { | ||||
| 		KEEP(*(.__bss_end__)); | ||||
| 	} | ||||
|  | ||||
| 	/DISCARD/ : { *(.dynstr*) } | ||||
|   | ||||
| @@ -39,6 +39,7 @@ GLCOBJS	+= div0.o | ||||
| SOBJS-y += crt0.o | ||||
|  | ||||
| ifndef CONFIG_SPL_BUILD | ||||
| COBJS-y += bss.o | ||||
| COBJS-y	+= board.o | ||||
| COBJS-y	+= bootm.o | ||||
| COBJS-$(CONFIG_SYS_L2_PL310) += cache-pl310.o | ||||
|   | ||||
							
								
								
									
										39
									
								
								arch/arm/lib/bss.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										39
									
								
								arch/arm/lib/bss.c
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,39 @@ | ||||
| /* | ||||
|  * Copyright 2013 Albert ARIBAUD <albert.u.boot@aribaud.net> | ||||
|  * | ||||
|  * See file CREDITS for list of people who contributed to this | ||||
|  * project. | ||||
|  * | ||||
|  * This program is free software; you can redistribute it and/or | ||||
|  * modify it under the terms of the GNU General Public License as | ||||
|  * published by the Free Software Foundation; either version 2 of | ||||
|  * the License, or (at your option) any later version. | ||||
|  * | ||||
|  * This program is distributed in the hope that it will be useful, | ||||
|  * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||||
|  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | ||||
|  * GNU General Public License for more details. | ||||
|  * | ||||
|  * You should have received a copy of the GNU General Public License | ||||
|  * along with this program; if not, write to the Free Software | ||||
|  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, | ||||
|  * MA 02111-1307 USA | ||||
|  */ | ||||
|  | ||||
| /** | ||||
|  * These two symbols are declared in a C file so that the linker | ||||
|  * uses R_ARM_RELATIVE relocation, rather than the R_ARM_ABS32 one | ||||
|  * it would use if the symbols were defined in the linker file. | ||||
|  * Using only R_ARM_RELATIVE relocation ensures that references to | ||||
|  * the symbols are correct after as well as before relocation. | ||||
|  * | ||||
|  * We need a 0-byte-size type for these symbols, and the compiler | ||||
|  * does not allow defining objects of C type 'void'. Using an empty | ||||
|  * struct is allowed by the compiler, but causes gcc versions 4.4 and | ||||
|  * below to complain about aliasing. Therefore we use the next best | ||||
|  * thing: zero-sized arrays, which are both 0-byte-size and exempt from | ||||
|  * aliasing warnings. | ||||
|  */ | ||||
|  | ||||
| char __bss_start[0] __attribute__((used, section(".__bss_start"))); | ||||
| char __bss_end__[0] __attribute__((used, section(".__bss_end__"))); | ||||
| @@ -41,15 +41,15 @@ SECTIONS | ||||
| 		*(.text*) | ||||
| 	} | ||||
|  | ||||
| 	. = ALIGN (4); | ||||
| 	. = ALIGN(4); | ||||
| 	.rodata : { | ||||
| 		*(SORT_BY_ALIGNMENT(SORT_BY_NAME(.rodata*))) | ||||
| 	} | ||||
| 	. = ALIGN (4); | ||||
| 	. = ALIGN(4); | ||||
| 	.data : { | ||||
| 		*(.data*) | ||||
| 	} | ||||
| 	. = ALIGN (4); | ||||
| 	. = ALIGN(4); | ||||
| 	.got : { | ||||
| 		*(.got) | ||||
| 	} | ||||
| @@ -72,13 +72,21 @@ SECTIONS | ||||
| 		*(.dynsym) | ||||
| 	} | ||||
|  | ||||
| 	.bss __rel_dyn_start (OVERLAY) : { | ||||
| 		__bss_start = .; | ||||
| 	_end = .; | ||||
|  | ||||
| 	.bss_start __rel_dyn_start (OVERLAY) : { | ||||
| 		KEEP(*(.__bss_start)); | ||||
| 	} | ||||
|  | ||||
| 	.bss __bss_start (OVERLAY) : { | ||||
| 		*(.bss*) | ||||
| 		 . = ALIGN(4); | ||||
| 		_end = .; | ||||
| 		 ___bssend___ = .; | ||||
| 	} | ||||
| 	__bss_end__ =.; | ||||
| 	.bss_end ___bssend___ (OVERLAY) : { | ||||
| 		KEEP(*(.__bss_end__)); | ||||
| 	} | ||||
|  | ||||
| 	/DISCARD/ : { *(.dynstr*) } | ||||
| 	/DISCARD/ : { *(.dynamic*) } | ||||
| 	/DISCARD/ : { *(.plt*) } | ||||
|   | ||||
| @@ -41,15 +41,15 @@ SECTIONS | ||||
| 		*(.text*) | ||||
| 	} | ||||
|  | ||||
| 	. = ALIGN (4); | ||||
| 	. = ALIGN(4); | ||||
| 	.rodata : { | ||||
| 		*(SORT_BY_ALIGNMENT(SORT_BY_NAME(.rodata*))) | ||||
| 	} | ||||
| 	. = ALIGN (4); | ||||
| 	. = ALIGN(4); | ||||
| 	.data : { | ||||
| 		*(.data*) | ||||
| 	} | ||||
| 	. = ALIGN (4); | ||||
| 	. = ALIGN(4); | ||||
| 	.got : { | ||||
| 		*(.got) | ||||
| 	} | ||||
| @@ -72,13 +72,21 @@ SECTIONS | ||||
| 		*(.dynsym) | ||||
| 	} | ||||
|  | ||||
| 	.bss __rel_dyn_start (OVERLAY) : { | ||||
| 		__bss_start = .; | ||||
| 	_end = .; | ||||
|  | ||||
| 	.bss_start __rel_dyn_start (OVERLAY) : { | ||||
| 		KEEP(*(.__bss_start)); | ||||
| 	} | ||||
|  | ||||
| 	.bss __bss_start (OVERLAY) : { | ||||
| 		*(.bss*) | ||||
| 		 . = ALIGN(4); | ||||
| 		_end = .; | ||||
| 		 ___bssend___ = .; | ||||
| 	} | ||||
| 	__bss_end__ =.; | ||||
| 	.bss_end ___bssend___ (OVERLAY) : { | ||||
| 		KEEP(*(.__bss_end__)); | ||||
| 	} | ||||
|  | ||||
| 	/DISCARD/ : { *(.dynstr*) } | ||||
| 	/DISCARD/ : { *(.dynamic*) } | ||||
| 	/DISCARD/ : { *(.plt*) } | ||||
|   | ||||
| @@ -72,13 +72,21 @@ SECTIONS | ||||
| 		*(.dynsym) | ||||
| 	} | ||||
|  | ||||
| 	.bss __rel_dyn_start (OVERLAY) : { | ||||
| 		__bss_start = .; | ||||
| 	_end = .; | ||||
|  | ||||
| 	.bss_start __rel_dyn_start (OVERLAY) : { | ||||
| 		KEEP(*(.__bss_start)); | ||||
| 	} | ||||
|  | ||||
| 	.bss __bss_start (OVERLAY) : { | ||||
| 		*(.bss*) | ||||
| 		 . = ALIGN(4); | ||||
| 		_end = .; | ||||
| 		 ___bssend___ = .; | ||||
| 	} | ||||
| 	__bss_end__ =.; | ||||
| 	.bss_end ___bssend___ (OVERLAY) : { | ||||
| 		KEEP(*(.__bss_end__)); | ||||
| 	} | ||||
|  | ||||
| 	/DISCARD/ : { *(.dynstr*) } | ||||
| 	/DISCARD/ : { *(.dynamic*) } | ||||
| 	/DISCARD/ : { *(.plt*) } | ||||
|   | ||||
| @@ -72,13 +72,21 @@ SECTIONS | ||||
| 		*(.dynsym) | ||||
| 	} | ||||
|  | ||||
| 	.bss __rel_dyn_start (OVERLAY) : { | ||||
| 		__bss_start = .; | ||||
| 	_end = .; | ||||
|  | ||||
| 	.bss_start __rel_dyn_start (OVERLAY) : { | ||||
| 		KEEP(*(.__bss_start)); | ||||
| 	} | ||||
|  | ||||
| 	.bss __bss_start (OVERLAY) : { | ||||
| 		*(.bss*) | ||||
| 		 . = ALIGN(4); | ||||
| 		_end = .; | ||||
| 		 ___bssend___ = .; | ||||
| 	} | ||||
| 	__bss_end__ =.; | ||||
| 	.bss_end ___bssend___ (OVERLAY) : { | ||||
| 		KEEP(*(.__bss_end__)); | ||||
| 	} | ||||
|  | ||||
| 	/DISCARD/ : { *(.dynstr*) } | ||||
| 	/DISCARD/ : { *(.dynamic*) } | ||||
| 	/DISCARD/ : { *(.plt*) } | ||||
|   | ||||
| @@ -80,11 +80,17 @@ SECTIONS | ||||
|  | ||||
| 	_end = .; | ||||
|  | ||||
| 	.bss __rel_dyn_start (OVERLAY) : { | ||||
| 		__bss_start = .; | ||||
| 		*(.bss) | ||||
| 	.bss_start __rel_dyn_start (OVERLAY) : { | ||||
| 		KEEP(*(.__bss_start)); | ||||
| 	} | ||||
|  | ||||
| 	.bss __bss_start (OVERLAY) : { | ||||
| 		*(.bss*) | ||||
| 		 . = ALIGN(4); | ||||
| 		__bss_end__ = .; | ||||
| 		 ___bssend___ = .; | ||||
| 	} | ||||
| 	.bss_end ___bssend___ (OVERLAY) : { | ||||
| 		KEEP(*(.__bss_end__)); | ||||
| 	} | ||||
|  | ||||
| 	/DISCARD/ : { *(.bss*) } | ||||
|   | ||||
		Reference in New Issue
	
	Block a user