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)
|
|
|