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...@intel.com>
> Contributed-under: TianoCore Contribution Agreement 1.1
> Signed-off-by: Shenglei Zhang <shenglei.zh...@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

_______________________________________________
edk2-devel mailing list
edk2-devel@lists.01.org
https://lists.01.org/mailman/listinfo/edk2-devel

Reply via email to