https://bugzilla.tianocore.org/show_bug.cgi?id=565 Fix NASM compatibility issues with XCODE5 tool chain. The XCODE5 tool chain for X64 builds using PIE (Position Independent Executable). For most assembly sources using PIE mode does not cause any issues. However, if assembly code is copied to a different address (such as AP startup code in the MpInitLib), then the X64 assembly source must be implemented to be compatible with PIE mode that uses RIP relative addressing. The specific changes in this patch are: * Use LEA instruction instead of MOV instruction to lookup the addresses of functions. * The assembly function RendezvousFunnelProc() is copied below 1MB so it can be executed as part of the MpInitLib AP startup sequence. RendezvousFunnelProc() calls the external function InitializeFloatingPointUnits(). The absolute address of InitializeFloatingPointUnits() is added to the MP_CPU_EXCHANGE_INFO structure that is passed to RendezvousFunnelProc(). Cc: Andrew Fish <afish@apple.com> Cc: Jeff Fan <jeff.fan@intel.com> Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Michael D Kinney <michael.d.kinney@intel.com> Reviewed-by: Jeff Fan <jeff.fan@intel.com> Reviewed-by: Andrew Fish <afish@apple.com>
45 lines
2.0 KiB
PHP
45 lines
2.0 KiB
PHP
;------------------------------------------------------------------------------ ;
|
|
; Copyright (c) 2015 - 2017, 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.
|
|
;
|
|
; Module Name:
|
|
;
|
|
; MpEqu.inc
|
|
;
|
|
; Abstract:
|
|
;
|
|
; This is the equates file for Multiple Processor support
|
|
;
|
|
;-------------------------------------------------------------------------------
|
|
|
|
VacantFlag equ 00h
|
|
NotVacantFlag equ 0ffh
|
|
|
|
CPU_SWITCH_STATE_IDLE equ 0
|
|
CPU_SWITCH_STATE_STORED equ 1
|
|
CPU_SWITCH_STATE_LOADED equ 2
|
|
|
|
LockLocation equ (RendezvousFunnelProcEnd - RendezvousFunnelProcStart)
|
|
StackStartAddressLocation equ LockLocation + 08h
|
|
StackSizeLocation equ LockLocation + 10h
|
|
ApProcedureLocation equ LockLocation + 18h
|
|
GdtrLocation equ LockLocation + 20h
|
|
IdtrLocation equ LockLocation + 2Ah
|
|
BufferStartLocation equ LockLocation + 34h
|
|
ModeOffsetLocation equ LockLocation + 3Ch
|
|
NumApsExecutingLocation equ LockLocation + 44h
|
|
CodeSegmentLocation equ LockLocation + 4Ch
|
|
DataSegmentLocation equ LockLocation + 54h
|
|
EnableExecuteDisableLocation equ LockLocation + 5Ch
|
|
Cr3Location equ LockLocation + 64h
|
|
InitFlagLocation equ LockLocation + 6Ch
|
|
CpuInfoLocation equ LockLocation + 74h
|
|
InitializeFloatingPointUnitsAddress equ LockLocation + 84h
|
|
|