Original code breaks a single assembly code to multiple lines. But, when VS CL.exe preprocesses the FixedPcdGet32() macro invocation to the replacement text, it loses '\', and causes NASM to fail. Changing the multiple lines to one line to resolve the build failure. Contributed-under: TianoCore Contribution Agreement 1.1 Signed-off-by: Ruiyu Ni <ruiyu.ni@intel.com> Reviewed-by: Laszlo Ersek <lersek@redhat.com>
		
			
				
	
	
		
			76 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			NASM
		
	
	
	
	
	
			
		
		
	
	
			76 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			NASM
		
	
	
	
	
	
| ;------------------------------------------------------------------------------
 | |
| ;*
 | |
| ;*   Copyright (c) 2006 - 2013, Intel Corporation. All rights reserved.<BR>
 | |
| ;*   This program and the accompanying materials
 | |
| ;*   are licensed and made available under the terms and conditions of the BSD License
 | |
| ;*   which accompanies this distribution.  The full text of the license may be found at
 | |
| ;*   http://opensource.org/licenses/bsd-license.php
 | |
| ;*
 | |
| ;*   THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
 | |
| ;*   WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
 | |
| ;*
 | |
| ;*    CpuAsm.asm
 | |
| ;*
 | |
| ;*   Abstract:
 | |
| ;*
 | |
| ;------------------------------------------------------------------------------
 | |
| 
 | |
| #include <Base.h>
 | |
| 
 | |
| DEFAULT REL
 | |
| SECTION .text
 | |
| 
 | |
| extern ASM_PFX(SecCoreStartupWithStack)
 | |
| 
 | |
| ;
 | |
| ; SecCore Entry Point
 | |
| ;
 | |
| ; Processor is in flat protected mode
 | |
| ;
 | |
| ; @param[in]  RAX   Initial value of the EAX register (BIST: Built-in Self Test)
 | |
| ; @param[in]  DI    'BP': boot-strap processor, or 'AP': application processor
 | |
| ; @param[in]  RBP   Pointer to the start of the Boot Firmware Volume
 | |
| ; @param[in]  DS    Selector allowing flat access to all addresses
 | |
| ; @param[in]  ES    Selector allowing flat access to all addresses
 | |
| ; @param[in]  FS    Selector allowing flat access to all addresses
 | |
| ; @param[in]  GS    Selector allowing flat access to all addresses
 | |
| ; @param[in]  SS    Selector allowing flat access to all addresses
 | |
| ;
 | |
| ; @return     None  This routine does not return
 | |
| ;
 | |
| global ASM_PFX(_ModuleEntryPoint)
 | |
| ASM_PFX(_ModuleEntryPoint):
 | |
| 
 | |
|     ;
 | |
|     ; Fill the temporary RAM with the initial stack value.
 | |
|     ; The loop below will seed the heap as well, but that's harmless.
 | |
|     ;
 | |
|     mov     rax, (FixedPcdGet32 (PcdInitValueInTempStack) << 32) | FixedPcdGet32 (PcdInitValueInTempStack)
 | |
|                                                               ; qword to store
 | |
|     mov     rdi, FixedPcdGet32 (PcdOvmfSecPeiTempRamBase)     ; base address,
 | |
|                                                               ;   relative to
 | |
|                                                               ;   ES
 | |
|     mov     rcx, FixedPcdGet32 (PcdOvmfSecPeiTempRamSize) / 8 ; qword count
 | |
|     cld                                                       ; store from base
 | |
|                                                               ;   up
 | |
|     rep stosq
 | |
| 
 | |
|     ;
 | |
|     ; Load temporary RAM stack based on PCDs
 | |
|     ;
 | |
|     %define SEC_TOP_OF_STACK (FixedPcdGet32 (PcdOvmfSecPeiTempRamBase) + \
 | |
|                           FixedPcdGet32 (PcdOvmfSecPeiTempRamSize))
 | |
|     mov     rsp, SEC_TOP_OF_STACK
 | |
|     nop
 | |
| 
 | |
|     ;
 | |
|     ; Setup parameters and call SecCoreStartupWithStack
 | |
|     ;   rcx: BootFirmwareVolumePtr
 | |
|     ;   rdx: TopOfCurrentStack
 | |
|     ;
 | |
|     mov     rcx, rbp
 | |
|     mov     rdx, rsp
 | |
|     sub     rsp, 0x20
 | |
|     call    ASM_PFX(SecCoreStartupWithStack)
 | |
| 
 |