arch/x86: Restrict use of _car_global[start|end]
Restrict the use of symbol names _car_global_[start|end] to be used exclusively with CAR_GLOBAL_MIGRATION=y. They just alias the start and end of .bss section in CAR. Change-Id: I36c858a4f181516d4c61f9fd1d5005c7d2c06057 Signed-off-by: Kyösti Mälkki <kyosti.malkki@gmail.com> Reviewed-on: https://review.coreboot.org/c/coreboot/+/35034 Tested-by: build bot (Jenkins) <no-reply@coreboot.org> Reviewed-by: Aaron Durbin <adurbin@chromium.org> Reviewed-by: Marshall Dawson <marshalldawson3rd@gmail.com>
This commit is contained in:
		@@ -32,11 +32,11 @@ _start:
 | 
				
			|||||||
	/* reset stack pointer to CAR stack */
 | 
						/* reset stack pointer to CAR stack */
 | 
				
			||||||
	mov	$_car_stack_end, %esp
 | 
						mov	$_car_stack_end, %esp
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/* clear CAR_GLOBAL area as it is not shared */
 | 
						/* clear .bss section as it is not shared */
 | 
				
			||||||
	cld
 | 
						cld
 | 
				
			||||||
	xor	%eax, %eax
 | 
						xor	%eax, %eax
 | 
				
			||||||
	movl	$(_car_global_end), %ecx
 | 
						movl	$(_ebss), %ecx
 | 
				
			||||||
	movl	$(_car_global_start), %edi
 | 
						movl	$(_bss), %edi
 | 
				
			||||||
	sub	%edi, %ecx
 | 
						sub	%edi, %ecx
 | 
				
			||||||
	shrl	$2, %ecx
 | 
						shrl	$2, %ecx
 | 
				
			||||||
	rep	stosl
 | 
						rep	stosl
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -64,11 +64,13 @@
 | 
				
			|||||||
        . += 80;
 | 
					        . += 80;
 | 
				
			||||||
        _car_ehci_dbg_info_end = .;
 | 
					        _car_ehci_dbg_info_end = .;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/* _car_global_start and _car_global_end provide symbols to per-stage
 | 
						/* _bss and _ebss provide symbols to per-stage
 | 
				
			||||||
	 * variables that are not shared like the timestamp and the pre-ram
 | 
						 * variables that are not shared like the timestamp and the pre-ram
 | 
				
			||||||
	 * cbmem console. This is useful for clearing this area on a per-stage
 | 
						 * cbmem console. This is useful for clearing this area on a per-stage
 | 
				
			||||||
	 * basis when more than one stage uses cache-as-ram for CAR_GLOBALs. */
 | 
						 * basis when more than one stage uses cache-as-ram for CAR_GLOBALs. */
 | 
				
			||||||
	_car_global_start = .;
 | 
					
 | 
				
			||||||
 | 
						. = ALIGN(ARCH_POINTER_ALIGN_SIZE);
 | 
				
			||||||
 | 
						_bss = .;
 | 
				
			||||||
#if ENV_STAGE_HAS_BSS_SECTION
 | 
					#if ENV_STAGE_HAS_BSS_SECTION
 | 
				
			||||||
	/* Allow global uninitialized variables for stages without CAR teardown. */
 | 
						/* Allow global uninitialized variables for stages without CAR teardown. */
 | 
				
			||||||
	*(.bss)
 | 
						*(.bss)
 | 
				
			||||||
@@ -76,10 +78,12 @@
 | 
				
			|||||||
	*(.sbss)
 | 
						*(.sbss)
 | 
				
			||||||
	*(.sbss.*)
 | 
						*(.sbss.*)
 | 
				
			||||||
#else
 | 
					#else
 | 
				
			||||||
 | 
						_car_global_start = .;
 | 
				
			||||||
	*(.car.global_data);
 | 
						*(.car.global_data);
 | 
				
			||||||
 | 
						_car_global_end = .;
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
	. = ALIGN(ARCH_POINTER_ALIGN_SIZE);
 | 
						. = ALIGN(ARCH_POINTER_ALIGN_SIZE);
 | 
				
			||||||
	_car_global_end = .;
 | 
						_ebss = .;
 | 
				
			||||||
	_car_unallocated_start = .;
 | 
						_car_unallocated_start = .;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#if !CONFIG(C_ENVIRONMENT_BOOTBLOCK)
 | 
					#if !CONFIG(C_ENVIRONMENT_BOOTBLOCK)
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -20,6 +20,15 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
#if ENV_ROMSTAGE && CONFIG(CAR_GLOBAL_MIGRATION)
 | 
					#if ENV_ROMSTAGE && CONFIG(CAR_GLOBAL_MIGRATION)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/*
 | 
				
			||||||
 | 
					 * The _car_global_[start|end]symbols cover CAR data which is relocatable
 | 
				
			||||||
 | 
					 * once memory comes online. Variables with CAR_GLOBAL decoration
 | 
				
			||||||
 | 
					 * reside within this region.
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					extern char _car_global_start[];
 | 
				
			||||||
 | 
					extern char _car_global_end[];
 | 
				
			||||||
 | 
					#define _car_global_size (_car_global_end - _car_global_start)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
asm(".section .car.global_data,\"w\",@nobits");
 | 
					asm(".section .car.global_data,\"w\",@nobits");
 | 
				
			||||||
asm(".previous");
 | 
					asm(".previous");
 | 
				
			||||||
#ifdef __clang__
 | 
					#ifdef __clang__
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -24,8 +24,8 @@ extern char _car_region_end[];
 | 
				
			|||||||
#define _car_region_size (_car_region_end - _car_region_start)
 | 
					#define _car_region_size (_car_region_end - _car_region_start)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/*
 | 
					/*
 | 
				
			||||||
 * This is the stack used under CONFIG_C_ENVIRONMENT_BOOTBLOCK for
 | 
					 * This is the stack area used for all stages that execute when cache-as-ram
 | 
				
			||||||
 * all stages that execute when cache-as-ram is up.
 | 
					 * is up. Area is not cleared in between stages.
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
extern char _car_stack_start[];
 | 
					extern char _car_stack_start[];
 | 
				
			||||||
extern char _car_stack_end[];
 | 
					extern char _car_stack_end[];
 | 
				
			||||||
@@ -38,13 +38,4 @@ extern char _car_ehci_dbg_info_end[];
 | 
				
			|||||||
#define _car_ehci_dbg_info_size \
 | 
					#define _car_ehci_dbg_info_size \
 | 
				
			||||||
	(_car_ehci_dbg_info_end - _car_ehci_dbg_info_start)
 | 
						(_car_ehci_dbg_info_end - _car_ehci_dbg_info_start)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/*
 | 
					 | 
				
			||||||
 * The _car_global_[start|end]symbols cover CAR data which is relocatable
 | 
					 | 
				
			||||||
 * once memory comes online. Variables with CAR_GLOBAL decoration
 | 
					 | 
				
			||||||
 * reside within this region.
 | 
					 | 
				
			||||||
 */
 | 
					 | 
				
			||||||
extern char _car_global_start[];
 | 
					 | 
				
			||||||
extern char _car_global_end[];
 | 
					 | 
				
			||||||
#define _car_global_size (_car_global_end - _car_global_start)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -89,11 +89,11 @@ CAR_init_done:
 | 
				
			|||||||
	/* Setup bootblock stack */
 | 
						/* Setup bootblock stack */
 | 
				
			||||||
	mov	%edx, %esp
 | 
						mov	%edx, %esp
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/* clear CAR_GLOBAL area as it is not shared */
 | 
						/* clear .bss section as it is not shared */
 | 
				
			||||||
	cld
 | 
						cld
 | 
				
			||||||
	xor	%eax, %eax
 | 
						xor	%eax, %eax
 | 
				
			||||||
	movl	$(_car_global_end), %ecx
 | 
						movl	$(_ebss), %ecx
 | 
				
			||||||
	movl	$(_car_global_start), %edi
 | 
						movl	$(_bss), %edi
 | 
				
			||||||
	sub	%edi, %ecx
 | 
						sub	%edi, %ecx
 | 
				
			||||||
	shrl	$2, %ecx
 | 
						shrl	$2, %ecx
 | 
				
			||||||
	rep	stosl
 | 
						rep	stosl
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -115,7 +115,7 @@ void platform_fsp_memory_init_params_cb(FSPM_UPD *fspm_upd, uint32_t version)
 | 
				
			|||||||
			aupd->StackBase);
 | 
								aupd->StackBase);
 | 
				
			||||||
		printk(BIOS_SPEW, "|                   |\n");
 | 
							printk(BIOS_SPEW, "|                   |\n");
 | 
				
			||||||
		printk(BIOS_SPEW, "+-------------------+ 0x%p\n",
 | 
							printk(BIOS_SPEW, "+-------------------+ 0x%p\n",
 | 
				
			||||||
			_car_global_end);
 | 
								_car_unallocated_start);
 | 
				
			||||||
		printk(BIOS_SPEW, "| coreboot data     |\n");
 | 
							printk(BIOS_SPEW, "| coreboot data     |\n");
 | 
				
			||||||
		printk(BIOS_SPEW, "+-------------------+ 0x%p\n",
 | 
							printk(BIOS_SPEW, "+-------------------+ 0x%p\n",
 | 
				
			||||||
			_car_stack_end);
 | 
								_car_stack_end);
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user