From: "Wu, Hao A" <hao.a.wu@intel.com>
To: "Zhang, Shenglei" <shenglei.zhang@intel.com>,
"edk2-devel@lists.01.org" <edk2-devel@lists.01.org>
Subject: Re: [PATCH v3 12/12] SourceLevelDebugPkg/DebugAgentCommon: Remove .S files
Date: Mon, 1 Apr 2019 01:25:16 +0000 [thread overview]
Message-ID: <B80AF82E9BFB8E4FBD8C89DA810C6A093C8B6E3F@SHSMSX104.ccr.corp.intel.com> (raw)
In-Reply-To: <20190329072818.24112-13-shenglei.zhang@intel.com>
Hello Shenglei,
There are still two .S files under SourceLevelDebugPkg:
edk2\SourceLevelDebugPkg\Library\PeCoffExtraActionLibDebug\Ia32\IntHandler.S
edk2\SourceLevelDebugPkg\Library\PeCoffExtraActionLibDebug\X64\IntHandler.S
Is there any special reason to left them in the repo?
Best Regards,
Hao Wu
> -----Original Message-----
> From: Zhang, Shenglei
> Sent: Friday, March 29, 2019 3:28 PM
> To: edk2-devel@lists.01.org
> Cc: Wu, Hao A
> Subject: [PATCH v3 12/12] SourceLevelDebugPkg/DebugAgentCommon:
> Remove .S files
>
> .nasm file has been added for X86 arch. .S assembly code
> is not required any more.
> https://bugzilla.tianocore.org/show_bug.cgi?id=1594
>
> Cc: Hao Wu <hao.a.wu@intel.com>
> Contributed-under: TianoCore Contribution Agreement 1.1
> Signed-off-by: Shenglei Zhang <shenglei.zhang@intel.com>
> ---
> .../DebugAgentCommon/Ia32/AsmFuncs.S | 415 -----------------
> .../DebugAgentCommon/X64/AsmFuncs.S | 431 ------------------
> .../Library/DebugAgent/DxeDebugAgentLib.inf | 2 -
> 3 files changed, 848 deletions(-)
> delete mode 100644
> SourceLevelDebugPkg/Library/DebugAgent/DebugAgentCommon/Ia32/AsmFun
> cs.S
> delete mode 100644
> SourceLevelDebugPkg/Library/DebugAgent/DebugAgentCommon/X64/AsmFun
> cs.S
>
> diff --git
> a/SourceLevelDebugPkg/Library/DebugAgent/DebugAgentCommon/Ia32/AsmF
> uncs.S
> b/SourceLevelDebugPkg/Library/DebugAgent/DebugAgentCommon/Ia32/AsmF
> uncs.S
> deleted file mode 100644
> index 30d279e80d..0000000000
> ---
> a/SourceLevelDebugPkg/Library/DebugAgent/DebugAgentCommon/Ia32/AsmF
> uncs.S
> +++ /dev/null
> @@ -1,415 +0,0 @@
> -#------------------------------------------------------------------------------
> -#
> -# Copyright (c) 2010 - 2018, 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:
> -#
> -# AsmFuncs.S
> -#
> -# Abstract:
> -#
> -# Debug interrupt handle functions.
> -#
> -#------------------------------------------------------------------------------
> -
> -#include "DebugException.h"
> -
> -ASM_GLOBAL ASM_PFX(InterruptProcess)
> -ASM_GLOBAL ASM_PFX(Exception0Handle)
> -ASM_GLOBAL ASM_PFX(ExceptionStubHeaderSize)
> -ASM_GLOBAL ASM_PFX(TimerInterruptHandle)
> -ASM_GLOBAL ASM_PFX(CommonEntry)
> -
> -.macro AGENT_HANDLER_SIGNATURE
> - .byte 0x41, 0x47, 0x54, 0x48 # AGENT_HANDLER_SIGNATURE
> SIGNATURE_32('A','G','T','H')
> -.endm
> -
> -.data
> -
> -ASM_PFX(ExceptionStubHeaderSize): .long ASM_PFX(Exception1Handle) -
> ASM_PFX(Exception0Handle)
> -
> -.text
> -
> -AGENT_HANDLER_SIGNATURE
> -ASM_PFX(Exception0Handle):
> - cli
> - pushl %eax
> - mov $0, %eax
> - jmp ASM_PFX(CommonEntry)
> -AGENT_HANDLER_SIGNATURE
> -ASM_PFX(Exception1Handle):
> - cli
> - pushl %eax
> - mov $1, %eax
> - jmp ASM_PFX(CommonEntry)
> -AGENT_HANDLER_SIGNATURE
> -ASM_PFX(Exception2Handle):
> - cli
> - pushl %eax
> - mov $2, %eax
> - jmp ASM_PFX(CommonEntry)
> -AGENT_HANDLER_SIGNATURE
> -ASM_PFX(Exception3Handle):
> - cli
> - pushl %eax
> - mov $3, %eax
> - jmp ASM_PFX(CommonEntry)
> -AGENT_HANDLER_SIGNATURE
> -ASM_PFX(Exception4Handle):
> - cli
> - pushl %eax
> - mov $4, %eax
> - jmp ASM_PFX(CommonEntry)
> -AGENT_HANDLER_SIGNATURE
> -ASM_PFX(Exception5Handle):
> - cli
> - pushl %eax
> - mov $5, %eax
> - jmp ASM_PFX(CommonEntry)
> -AGENT_HANDLER_SIGNATURE
> -ASM_PFX(Exception6Handle):
> - cli
> - pushl %eax
> - mov $6, %eax
> - jmp ASM_PFX(CommonEntry)
> -AGENT_HANDLER_SIGNATURE
> -ASM_PFX(Exception7Handle):
> - cli
> - pushl %eax
> - mov $7, %eax
> - jmp ASM_PFX(CommonEntry)
> -AGENT_HANDLER_SIGNATURE
> -ASM_PFX(Exception8Handle):
> - cli
> - pushl %eax
> - mov $8, %eax
> - jmp ASM_PFX(CommonEntry)
> -AGENT_HANDLER_SIGNATURE
> -ASM_PFX(Exception9Handle):
> - cli
> - pushl %eax
> - mov $9, %eax
> - jmp ASM_PFX(CommonEntry)
> -AGENT_HANDLER_SIGNATURE
> -ASM_PFX(Exception10Handle):
> - cli
> - pushl %eax
> - mov $10, %eax
> - jmp ASM_PFX(CommonEntry)
> -AGENT_HANDLER_SIGNATURE
> -ASM_PFX(Exception11Handle):
> - cli
> - pushl %eax
> - mov $11, %eax
> - jmp ASM_PFX(CommonEntry)
> -AGENT_HANDLER_SIGNATURE
> -ASM_PFX(Exception12Handle):
> - cli
> - pushl %eax
> - mov $12, %eax
> - jmp ASM_PFX(CommonEntry)
> -AGENT_HANDLER_SIGNATURE
> -ASM_PFX(Exception13Handle):
> - cli
> - pushl %eax
> - mov $13, %eax
> - jmp ASM_PFX(CommonEntry)
> -AGENT_HANDLER_SIGNATURE
> -ASM_PFX(Exception14Handle):
> - cli
> - pushl %eax
> - mov $14, %eax
> - jmp ASM_PFX(CommonEntry)
> -AGENT_HANDLER_SIGNATURE
> -ASM_PFX(Exception15Handle):
> - cli
> - pushl %eax
> - mov $15, %eax
> - jmp ASM_PFX(CommonEntry)
> -AGENT_HANDLER_SIGNATURE
> -ASM_PFX(Exception16Handle):
> - cli
> - pushl %eax
> - mov $16, %eax
> - jmp ASM_PFX(CommonEntry)
> -AGENT_HANDLER_SIGNATURE
> -ASM_PFX(Exception17Handle):
> - cli
> - pushl %eax
> - mov $17, %eax
> - jmp ASM_PFX(CommonEntry)
> -AGENT_HANDLER_SIGNATURE
> -ASM_PFX(Exception18Handle):
> - cli
> - pushl %eax
> - mov $18, %eax
> - jmp ASM_PFX(CommonEntry)
> -AGENT_HANDLER_SIGNATURE
> -ASM_PFX(Exception19Handle):
> - cli
> - pushl %eax
> - mov $19, %eax
> - jmp ASM_PFX(CommonEntry)
> -AGENT_HANDLER_SIGNATURE
> -ASM_PFX(TimerInterruptHandle):
> - cli
> - pushl %eax
> - mov $32, %eax
> - jmp ASM_PFX(CommonEntry)
> -
> -
> -ASM_PFX(CommonEntry):
> -
> -#---------------------------------------;
> -# _CommonEntry ;
> -#----------------------------------------------------------------------------;
> -# The follow algorithm is used for the common interrupt routine.
> -# Entry from each interrupt with a push eax and eax=interrupt number
> -#
> -# +---------------------+
> -# + EFlags +
> -# +---------------------+
> -# + CS +
> -# +---------------------+
> -# + EIP +
> -# +---------------------+
> -# + Error Code +
> -# +---------------------+
> -# + EAX / Vector Number +
> -# +---------------------+
> -# + EBP +
> -# +---------------------+ <-- EBP
> -#
> -
> -# We need to determine if any extra data was pushed by the exception
> - cmpl $DEBUG_EXCEPT_DOUBLE_FAULT, %eax
> - je NoExtrPush
> - cmpl $DEBUG_EXCEPT_INVALID_TSS, %eax
> - je NoExtrPush
> - cmpl $DEBUG_EXCEPT_SEG_NOT_PRESENT, %eax
> - je NoExtrPush
> - cmpl $DEBUG_EXCEPT_STACK_FAULT, %eax
> - je NoExtrPush
> - cmpl $DEBUG_EXCEPT_GP_FAULT, %eax
> - je NoExtrPush
> - cmpl $DEBUG_EXCEPT_PAGE_FAULT, %eax
> - je NoExtrPush
> - cmpl $DEBUG_EXCEPT_ALIGNMENT_CHECK, %eax
> - je NoExtrPush
> -
> - pushl (%esp)
> - movl $0, 4(%esp)
> -
> -NoExtrPush:
> -
> - pushl %ebp
> - movl %esp,%ebp
> -
> - #
> - # Align stack to make sure that EFI_FX_SAVE_STATE_IA32 of
> EFI_SYSTEM_CONTEXT_IA32
> - # is 16-byte aligned
> - #
> - andl $0xfffffff0,%esp
> - subl $12,%esp
> -
> -## UINT32 Edi, Esi, Ebp, Esp, Ebx, Edx, Ecx, Eax;
> - pushl 0x4(%ebp)
> - pushl %ebx
> - pushl %ecx
> - pushl %edx
> - mov %eax, %ebx # save vector in ebx
> - leal 24(%ebp),%ecx
> - pushl %ecx # save original ESP
> - pushl (%ebp)
> - pushl %esi
> - pushl %edi
> -
> -## UINT32 Cr0, Cr1, Cr2, Cr3, Cr4;
> -## insure FXSAVE/FXRSTOR is enabled in CR4...
> -## ... while we're at it, make sure DE is also enabled...
> - mov $1, %eax
> - pushl %ebx # temporarily save value of ebx on stack
> - cpuid # use CPUID to determine if FXSAVE/FXRESTOR
> - # and DE are supported
> - popl %ebx # retore value of ebx that was overwritten
> - # by CPUID
> - movl %cr4, %eax
> - pushl %eax # push cr4 firstly
> - testl $BIT24, %edx # Test for FXSAVE/FXRESTOR support
> - jz L1
> - orl $BIT9, %eax # Set CR4.OSFXSR
> -L1:
> - testl $BIT2, %edx # Test for Debugging Extensions support
> - jz L2
> - orl $BIT3, %eax # Set CR4.DE
> -L2:
> - movl %eax, %cr4
> - movl %cr3, %eax
> - pushl %eax
> - movl %cr2, %eax
> - pushl %eax
> - xorl %eax,%eax
> - pushl %eax
> - movl %cr0, %eax
> - pushl %eax
> -
> -## UINT32 Gs, Fs, Es, Ds, Cs, Ss;
> - movl %ss,%eax
> - pushl %eax
> - movzwl 16(%ebp), %eax
> - pushl %eax
> - movl %ds,%eax
> - pushl %eax
> - movl %es,%eax
> - pushl %eax
> - movl %fs,%eax
> - pushl %eax
> - movl %gs,%eax
> - pushl %eax
> -
> -## UINT32 Eip;
> - pushl 12(%ebp)
> -
> -## UINT32 Gdtr[2], Idtr[2];
> - subl $8,%esp
> - sidt (%esp)
> - subl $8,%esp
> - sgdt (%esp)
> -
> -## UINT32 Ldtr, Tr;
> - xorl %eax,%eax
> - strl %eax
> - pushl %eax
> - sldtl %eax
> - pushl %eax
> -
> -## UINT32 EFlags;
> - pushl 20(%ebp)
> -
> -## UINT32 Dr0, Dr1, Dr2, Dr3, Dr6, Dr7;
> - movl %dr7, %eax
> - pushl %eax
> -## clear Dr7 while executing debugger itself
> - xorl %eax,%eax
> - movl %eax, %dr7
> -
> - movl %dr6, %eax
> - pushl %eax
> -## insure all status bits in dr6 are clear...
> - xorl %eax,%eax
> - movl %eax, %dr6
> -
> - movl %dr3, %eax
> - pushl %eax
> - movl %dr2, %eax
> - pushl %eax
> - movl %dr1, %eax
> - pushl %eax
> - movl %dr0, %eax
> - pushl %eax
> -
> -## FX_SAVE_STATE_IA32 FxSaveState;
> - subl $512,%esp
> - movl %esp,%edi
> - testl $BIT24, %edx # Test for FXSAVE/FXRESTOR support.
> - # edx still contains result from CPUID above
> - jz L3
> - .byte 0x0f, 0xae, 0x07 # fxsave [edi]
> -L3:
> -
> -## save the exception data
> - pushl 8(%esp)
> -
> -## Clear Direction Flag
> - cld
> -
> -## Prepare parameter and call C function
> - pushl %esp
> - pushl %ebx
> - call ASM_PFX(InterruptProcess)
> - addl $8,%esp
> -
> -## skip the exception data
> - addl $4,%esp
> -
> -## FX_SAVE_STATE_IA32 FxSaveState;
> - movl %esp,%esi
> - movl $1, %eax
> - cpuid # use CPUID to determine if FXSAVE/FXRESTOR
> - # are supported
> - testl $BIT24, %edx # Test for FXSAVE/FXRESTOR support
> - jz L4
> - .byte 0x0f, 0xae, 0x0e # fxrstor [esi]
> -L4:
> - addl $512,%esp
> -
> -## UINT32 Dr0, Dr1, Dr2, Dr3, Dr6, Dr7;
> - popl %eax
> - movl %eax, %dr0
> - popl %eax
> - movl %eax, %dr1
> - popl %eax
> - movl %eax, %dr2
> - popl %eax
> - movl %eax, %dr3
> -## skip restore of dr6. We cleared dr6 during the context save.
> - addl $4,%esp
> - popl %eax
> - movl %eax, %dr7
> -
> -## UINT32 EFlags;
> - popl 20(%ebp)
> -
> -## UINT32 Ldtr, Tr;
> -## UINT32 Gdtr[2], Idtr[2];
> -## Best not let anyone mess with these particular registers...
> - addl $24,%esp
> -
> -## UINT32 Eip;
> - pop 12(%ebp)
> -
> -## UINT32 Gs, Fs, Es, Ds, Cs, Ss;
> -## NOTE - modified segment registers could hang the debugger... We
> -## could attempt to insulate ourselves against this possibility,
> -## but that poses risks as well.
> -##
> - popl %gs
> - popl %fs
> - popl %es
> - popl %ds
> - popl 16(%ebp)
> - popl %ss
> -
> -## UINT32 Cr0, Cr1, Cr2, Cr3, Cr4;
> - popl %eax
> - movl %eax, %cr0
> - addl $4,%esp # not for Cr1
> - popl %eax
> - movl %eax, %cr2
> - popl %eax
> - movl %eax, %cr3
> - popl %eax
> - movl %eax, %cr4
> -
> -## UINT32 Edi, Esi, Ebp, Esp, Ebx, Edx, Ecx, Eax;
> - popl %edi
> - popl %esi
> - addl $4,%esp # not for ebp
> - addl $4,%esp # not for esp
> - popl %edx
> - popl %ecx
> - popl %ebx
> - popl %eax
> -
> - movl %ebp,%esp
> - popl %ebp
> - addl $8,%esp # skip eax
> - iretl
> -
> diff --git
> a/SourceLevelDebugPkg/Library/DebugAgent/DebugAgentCommon/X64/AsmFu
> ncs.S
> b/SourceLevelDebugPkg/Library/DebugAgent/DebugAgentCommon/X64/AsmFu
> ncs.S
> deleted file mode 100644
> index cdda41fb27..0000000000
> ---
> a/SourceLevelDebugPkg/Library/DebugAgent/DebugAgentCommon/X64/AsmFu
> ncs.S
> +++ /dev/null
> @@ -1,431 +0,0 @@
> -#------------------------------------------------------------------------------
> -#
> -# Copyright (c) 2006 - 2014, 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:
> -#
> -# AsmFuncs.S
> -#
> -# Abstract:
> -#
> -# Debug interrupt handle functions.
> -#
> -#------------------------------------------------------------------------------
> -
> -#include "DebugException.h"
> -
> -ASM_GLOBAL ASM_PFX(InterruptProcess)
> -
> -ASM_GLOBAL ASM_PFX(Exception0Handle)
> -ASM_GLOBAL ASM_PFX(ExceptionStubHeaderSize)
> -ASM_GLOBAL ASM_PFX(TimerInterruptHandle)
> -ASM_GLOBAL ASM_PFX(CommonEntry)
> -
> -.macro AGENT_HANDLER_SIGNATURE
> - .byte 0x41, 0x47, 0x54, 0x48 # AGENT_HANDLER_SIGNATURE
> SIGNATURE_32('A','G','T','H')
> -.endm
> -
> -.data
> -
> -ASM_PFX(ExceptionStubHeaderSize): .long ASM_PFX(Exception1Handle) -
> ASM_PFX(Exception0Handle)
> -
> -
> -.text
> -
> -AGENT_HANDLER_SIGNATURE
> -ASM_PFX(Exception0Handle):
> - cli
> - pushq %rcx
> - mov $0, %rcx
> - jmp ASM_PFX(CommonEntry)
> -AGENT_HANDLER_SIGNATURE
> -ASM_PFX(Exception1Handle):
> - cli
> - pushq %rcx
> - mov $1, %rcx
> - jmp ASM_PFX(CommonEntry)
> -AGENT_HANDLER_SIGNATURE
> -ASM_PFX(Exception2Handle):
> - cli
> - pushq %rcx
> - mov $2, %rcx
> - jmp ASM_PFX(CommonEntry)
> -AGENT_HANDLER_SIGNATURE
> -ASM_PFX(Exception3Handle):
> - cli
> - pushq %rcx
> - mov $3, %rcx
> - jmp ASM_PFX(CommonEntry)
> -AGENT_HANDLER_SIGNATURE
> -ASM_PFX(Exception4Handle):
> - cli
> - pushq %rcx
> - mov $4, %rcx
> - jmp ASM_PFX(CommonEntry)
> -AGENT_HANDLER_SIGNATURE
> -ASM_PFX(Exception5Handle):
> - cli
> - pushq %rcx
> - mov $5, %rcx
> - jmp ASM_PFX(CommonEntry)
> -AGENT_HANDLER_SIGNATURE
> -ASM_PFX(Exception6Handle):
> - cli
> - pushq %rcx
> - mov $6, %rcx
> - jmp ASM_PFX(CommonEntry)
> -AGENT_HANDLER_SIGNATURE
> -ASM_PFX(Exception7Handle):
> - cli
> - pushq %rcx
> - mov $7, %rcx
> - jmp ASM_PFX(CommonEntry)
> -AGENT_HANDLER_SIGNATURE
> -ASM_PFX(Exception8Handle):
> - cli
> - pushq %rcx
> - mov $8, %rcx
> - jmp ASM_PFX(CommonEntry)
> -AGENT_HANDLER_SIGNATURE
> -ASM_PFX(Exception9Handle):
> - cli
> - pushq %rcx
> - mov $9, %rcx
> - jmp ASM_PFX(CommonEntry)
> -AGENT_HANDLER_SIGNATURE
> -ASM_PFX(Exception10Handle):
> - cli
> - pushq %rcx
> - mov $10, %rcx
> - jmp ASM_PFX(CommonEntry)
> -AGENT_HANDLER_SIGNATURE
> -ASM_PFX(Exception11Handle):
> - cli
> - pushq %rcx
> - mov $11, %rcx
> - jmp ASM_PFX(CommonEntry)
> -AGENT_HANDLER_SIGNATURE
> -ASM_PFX(Exception12Handle):
> - cli
> - pushq %rcx
> - mov $12, %rcx
> - jmp ASM_PFX(CommonEntry)
> -AGENT_HANDLER_SIGNATURE
> -ASM_PFX(Exception13Handle):
> - cli
> - pushq %rcx
> - mov $13, %rcx
> - jmp ASM_PFX(CommonEntry)
> -AGENT_HANDLER_SIGNATURE
> -ASM_PFX(Exception14Handle):
> - cli
> - pushq %rcx
> - mov $14, %rcx
> - jmp ASM_PFX(CommonEntry)
> -AGENT_HANDLER_SIGNATURE
> -ASM_PFX(Exception15Handle):
> - cli
> - pushq %rcx
> - mov $15, %rcx
> - jmp ASM_PFX(CommonEntry)
> -AGENT_HANDLER_SIGNATURE
> -ASM_PFX(Exception16Handle):
> - cli
> - pushq %rcx
> - mov $16, %rcx
> - jmp ASM_PFX(CommonEntry)
> -AGENT_HANDLER_SIGNATURE
> -ASM_PFX(Exception17Handle):
> - cli
> - pushq %rcx
> - mov $17, %rcx
> - jmp ASM_PFX(CommonEntry)
> -AGENT_HANDLER_SIGNATURE
> -ASM_PFX(Exception18Handle):
> - cli
> - pushq %rcx
> - mov $18, %rcx
> - jmp ASM_PFX(CommonEntry)
> -AGENT_HANDLER_SIGNATURE
> -ASM_PFX(Exception19Handle):
> - cli
> - pushq %rcx
> - mov $19, %rcx
> - jmp ASM_PFX(CommonEntry)
> -AGENT_HANDLER_SIGNATURE
> -ASM_PFX(TimerInterruptHandle):
> - cli
> - pushq %rcx
> - mov $32, %rcx
> - jmp ASM_PFX(CommonEntry)
> -
> -
> -ASM_PFX(CommonEntry):
> -
> -#---------------------------------------;
> -# CommonInterruptEntry ;
> -#---------------------------------------;
> -# The follow algorithm is used for the common interrupt routine.
> -
> -#
> -# +---------------------+ <-- 16-byte aligned ensured by processor
> -# + Old SS +
> -# +---------------------+
> -# + Old RSP +
> -# +---------------------+
> -# + RFlags +
> -# +---------------------+
> -# + CS +
> -# +---------------------+
> -# + RIP +
> -# +---------------------+
> -# + Error Code +
> -# +---------------------+
> -# + RCX / Vector Number +
> -# +---------------------+
> -# + RBP +
> -# +---------------------+ <-- RBP, 16-byte aligned
> -#
> -
> -# We need to determine if any extra data was pushed by the exception
> - cmpq $DEBUG_EXCEPT_DOUBLE_FAULT, %rcx
> - je NoExtrPush
> - cmpq $DEBUG_EXCEPT_INVALID_TSS, %rcx
> - je NoExtrPush
> - cmpq $DEBUG_EXCEPT_SEG_NOT_PRESENT, %rcx
> - je NoExtrPush
> - cmpq $DEBUG_EXCEPT_STACK_FAULT, %rcx
> - je NoExtrPush
> - cmpq $DEBUG_EXCEPT_GP_FAULT, %rcx
> - je NoExtrPush
> - cmpq $DEBUG_EXCEPT_PAGE_FAULT, %rcx
> - je NoExtrPush
> - cmpq $DEBUG_EXCEPT_ALIGNMENT_CHECK, %rcx
> - je NoExtrPush
> -
> - pushq (%rsp)
> - movq $0, 8(%rsp)
> -
> -NoExtrPush:
> - #
> - # All interrupt handlers are invoked through interrupt gates, so
> - # IF flag automatically cleared at the entry point
> - pushq %rbp
> - movq %rsp, %rbp
> -
> - #
> - # Since here the stack pointer is 16-byte aligned, so
> - # EFI_FX_SAVE_STATE_X64 of EFI_SYSTEM_CONTEXT_x64
> - # is 16-byte aligned
> - #
> -
> -## UINT64 R8, R9, R10, R11, R12, R13, R14, R15;
> - pushq %r15
> - pushq %r14
> - pushq %r13
> - pushq %r12
> - pushq %r11
> - pushq %r10
> - pushq %r9
> - pushq %r8
> -
> - movq %cr8, %r8
> - pushq %r8
> -
> -## UINT64 Rdi, Rsi, Rbp, Rsp, Rbx, Rdx, Rcx, Rax;
> - pushq %rax
> - pushq %rbx
> - pushq 8(%rbp) # original rcx
> - pushq %rdx
> - pushq 48(%rbp) # original rsp
> - pushq (%rbp) # original rbp
> - pushq %rsi
> - pushq %rdi
> -
> -## UINT64 Cr0, Cr1, Cr2, Cr3, Cr4;
> - movq %cr4, %rax
> - orq $0x208, %rax
> - movq %rax, %cr4
> - pushq %rax
> - movq %cr3, %rax
> - pushq %rax
> - movq %cr2, %rax
> - pushq %rax
> - xorq %rax, %rax
> - pushq %rax
> - movq %cr0, %rax
> - pushq %rax
> -
> -## UINT64 Gs, Fs, Es, Ds, Cs, Ss; insure high 16 bits of each is zero
> - xorq %rax, %rax # set rax to 0
> - movzwq 56(%rbp), %rax
> -# movq %ss, %rax
> - pushq %rax
> - movzwq 32(%rbp), %rax
> -# movq %cs, %rax
> - pushq %rax
> - mov %ds, %rax
> - pushq %rax
> - mov %es, %rax
> - pushq %rax
> - mov %fs, %rax
> - pushq %rax
> - mov %gs, %rax
> - pushq %rax
> -
> -## UINT64 Rip;
> - pushq 24(%rbp)
> -
> -## UINT64 Gdtr[2], Idtr[2];
> - subq $16, %rsp
> - sidt (%rsp)
> - subq $16, %rsp
> - sgdt (%rsp)
> -
> -## UINT64 Ldtr, Tr;
> - xorq %rax, %rax
> - strw %ax
> - pushq %rax
> - sldtw %ax
> - pushq %rax
> -
> -## UINT64 RFlags;
> - pushq 40(%rbp)
> -
> -## UINT64 Dr0, Dr1, Dr2, Dr3, Dr6, Dr7;
> - movq %dr7, %rax
> - pushq %rax
> -## clear Dr7 while executing debugger itself
> - xorq %rax, %rax
> - movq %rax, %dr7
> -
> - movq %dr6, %rax
> - pushq %rax
> -## insure all status bits in dr6 are clear...
> - xorq %rax, %rax
> - movq %rax, %dr6
> -
> - movq %dr3, %rax
> - pushq %rax
> - movq %dr2, %rax
> - pushq %rax
> - movq %dr1, %rax
> - pushq %rax
> - movq %dr0, %rax
> - pushq %rax
> -
> -## FX_SAVE_STATE_X64 FxSaveState;
> - subq $512, %rsp
> - movq %rsp, %rdi
> - .byte 0x0f, 0xae, 0b00000111
> -
> -## save the exception data;
> - pushq 16(%rbp)
> -
> -## Clear Direction Flag
> - cld
> -
> -## Prepare parameter and call
> -# movq 8(%rbp), %rcx
> - movq %rsp, %rdx
> - movq %rcx, %r15 # save vector in r15
> - #
> - # Per X64 calling convention, allocate maximum parameter stack space
> - # and make sure RSP is 16-byte aligned
> - #
> - subq $(32 + 8), %rsp
> - call ASM_PFX(InterruptProcess)
> - addq $(32 + 8), %rsp
> -
> -## skip the exception data;
> - addq $8, %rsp
> -
> -## FX_SAVE_STATE_X64 FxSaveState;
> -
> - movq %rsp, %rsi
> - .byte 0x0f, 0xae, 0b00001110
> - addq $512, %rsp
> -
> -## UINT64 Dr0, Dr1, Dr2, Dr3, Dr6, Dr7;
> - popq %rax
> - movq %rax, %dr0
> - popq %rax
> - movq %rax, %dr1
> - popq %rax
> - movq %rax, %dr2
> - popq %rax
> - movq %rax, %dr3
> -## skip restore of dr6. We cleared dr6 during the context save.
> - addq $8, %rsp
> - popq %rax
> - movq %rax, %dr7
> -
> -## UINT64 RFlags;
> - popq 40(%rbp)
> -
> -## UINT64 Ldtr, Tr;
> -## UINT64 Gdtr[2], Idtr[2];
> -## Best not let anyone mess with these particular registers...
> - addq $48, %rsp
> -
> -## UINT64 Rip;
> - popq 24(%rbp)
> -
> -## UINT64 Gs, Fs, Es, Ds, Cs, Ss;
> - popq %rax
> - # mov gs, rax ; not for gs
> - popq %rax
> - # mov fs, rax ; not for fs
> - # (X64 will not use fs and gs, so we do not restore it)
> - popq %rax
> - mov %rax, %es
> - popq %rax
> - mov %rax, %ds
> - popq 32(%rbp)
> - popq 56(%rbp)
> -
> -## UINT64 Cr0, Cr1, Cr2, Cr3, Cr4, Cr8;
> - popq %rax
> - movq %rax, %cr0
> - addq $8, %rsp
> - popq %rax
> - movq %rax, %cr2
> - popq %rax
> - movq %rax, %cr3
> - popq %rax
> - movq %rax, %cr4
> -
> -## UINT64 Rdi, Rsi, Rbp, Rsp, Rbx, Rdx, Rcx, Rax;
> -## UINT64 R8, R9, R10, R11, R12, R13, R14, R15;
> - popq %rdi
> - popq %rsi
> - addq $8, %rsp
> - addq $8, %rsp
> - popq %rdx
> - popq %rcx
> - popq %rbx
> - popq %rax
> -
> - popq %r8
> - movq %r8, %cr8
> -
> - popq %r8
> - popq %r9
> - popq %r10
> - popq %r11
> - popq %r12
> - popq %r13
> - popq %r14
> - popq %r15
> -
> - movq %rbp, %rsp
> - popq %rbp
> - addq $16, %rsp
> - iretq
> diff --git a/SourceLevelDebugPkg/Library/DebugAgent/DxeDebugAgentLib.inf
> b/SourceLevelDebugPkg/Library/DebugAgent/DxeDebugAgentLib.inf
> index 38bd18d0fe..b309c18d88 100644
> --- a/SourceLevelDebugPkg/Library/DebugAgent/DxeDebugAgentLib.inf
> +++ b/SourceLevelDebugPkg/Library/DebugAgent/DxeDebugAgentLib.inf
> @@ -42,14 +42,12 @@
> DebugAgentCommon/DebugMp.h
>
> [Sources.Ia32]
> - DebugAgentCommon/Ia32/AsmFuncs.S
> DebugAgentCommon/Ia32/AsmFuncs.nasm
> DebugAgentCommon/Ia32/ArchDebugSupport.h
> DebugAgentCommon/Ia32/ArchDebugSupport.c
> DebugAgentCommon/Ia32/DebugException.h
>
> [Sources.X64]
> - DebugAgentCommon/X64/AsmFuncs.S
> DebugAgentCommon/X64/AsmFuncs.nasm
> DebugAgentCommon/X64/ArchDebugSupport.h
> DebugAgentCommon/X64/ArchDebugSupport.c
> --
> 2.18.0.windows.1
next prev parent reply other threads:[~2019-04-01 1:25 UTC|newest]
Thread overview: 17+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-03-29 7:28 [PATCH v3 00/12] Remove .S files for IA32 and X64 arch in MdePkg and UefiCpuPkg Shenglei Zhang
2019-03-29 7:28 ` [PATCH v3 01/12] UefiCpuPkg/SmmCpuFeaturesLib: Remove .S files for IA32 and X64 arch Shenglei Zhang
2019-03-29 7:28 ` [PATCH v3 02/12] UefiCpuPkg/BaseUefiCpuLib: " Shenglei Zhang
2019-03-29 7:28 ` [PATCH v3 03/12] UefiCpuPkg/CpuExceptionHandlerLib:Remove.S " Shenglei Zhang
2019-04-01 0:29 ` Dong, Eric
2019-03-29 7:28 ` [PATCH v3 04/12] MdePkg/BaseCpuLib: Remove .S " Shenglei Zhang
2019-03-29 7:28 ` [PATCH v3 05/12] MdePkg/BaseLib: " Shenglei Zhang
2019-03-29 7:28 ` [PATCH v3 06/12] MdePkg/BaseMemoryLibMmx: " Shenglei Zhang
2019-03-29 7:28 ` [PATCH v3 07/12] MdePkg/BaseMemoryLibOptDxe: " Shenglei Zhang
2019-03-29 7:28 ` [PATCH v3 08/12] MdePkg/BaseMemoryLibOptPei: " Shenglei Zhang
2019-03-29 7:28 ` [PATCH v3 09/12] MdePkg/BaseMemoryLibRepStr: " Shenglei Zhang
2019-03-29 7:28 ` [PATCH v3 10/12] MdePkg/BaseMemoryLibSse2: " Shenglei Zhang
2019-03-29 7:28 ` [PATCH v3 11/12] CryptoPkg/IntrinsicLib: Remove .S files for IA32 arch Shenglei Zhang
2019-03-29 7:28 ` [PATCH v3 12/12] SourceLevelDebugPkg/DebugAgentCommon: Remove .S files Shenglei Zhang
2019-04-01 1:25 ` Wu, Hao A [this message]
2019-04-01 1:38 ` Zhang, Shenglei
2019-03-29 11:59 ` [PATCH v3 00/12] Remove .S files for IA32 and X64 arch in MdePkg and UefiCpuPkg Gao, Liming
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-list from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=B80AF82E9BFB8E4FBD8C89DA810C6A093C8B6E3F@SHSMSX104.ccr.corp.intel.com \
--to=devel@edk2.groups.io \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox