From: rsun3 Date: Fri, 11 Jun 2010 03:22:15 +0000 (+0000) Subject: Skip restoration of DRx registers to support in-circuit emualators or debuggers set... X-Git-Tag: edk2-stable201903~15771 X-Git-Url: https://git.proxmox.com/?p=mirror_edk2.git;a=commitdiff_plain;h=61ece967cb59509608aa747fc9424c619646fc9d Skip restoration of DRx registers to support in-circuit emualators or debuggers set breakpoint in interrupt/exception context. git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@10573 6f19259b-4bc3-4df7-8a09-765794883524 --- diff --git a/UefiCpuPkg/CpuDxe/Ia32/CpuAsm.S b/UefiCpuPkg/CpuDxe/Ia32/CpuAsm.S index 04896578f7..d3e1dee624 100644 --- a/UefiCpuPkg/CpuDxe/Ia32/CpuAsm.S +++ b/UefiCpuPkg/CpuDxe/Ia32/CpuAsm.S @@ -1,6 +1,6 @@ #------------------------------------------------------------------------------ #* -#* Copyright (c) 2006 - 2009, Intel Corporation. All rights reserved.
+#* Copyright (c) 2006 - 2010, Intel Corporation. All rights reserved.
#* 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 @@ -258,16 +258,8 @@ ErrorCodeAndVectorOnStack: #; 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 @@ -319,18 +311,9 @@ nullExternalExceptionHandler: 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 +#; Skip restoration of DRx registers to support in-circuit emualators +#; or debuggers set breakpoint in interrupt/exception context + addl $24, %esp #; UINT32 Cr0, Cr1, Cr2, Cr3, Cr4; popl %eax diff --git a/UefiCpuPkg/CpuDxe/Ia32/CpuAsm.asm b/UefiCpuPkg/CpuDxe/Ia32/CpuAsm.asm index f54fb291c0..68454bdeca 100644 --- a/UefiCpuPkg/CpuDxe/Ia32/CpuAsm.asm +++ b/UefiCpuPkg/CpuDxe/Ia32/CpuAsm.asm @@ -1,7 +1,7 @@ TITLE CpuAsm.asm: ;------------------------------------------------------------------------------ ;* -;* Copyright (c) 2006 - 2009, Intel Corporation. All rights reserved.
+;* Copyright (c) 2006 - 2010, Intel Corporation. All rights reserved.
;* 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 @@ -256,16 +256,8 @@ ErrorCodeAndVectorOnStack: ;; UINT32 Dr0, Dr1, Dr2, Dr3, Dr6, Dr7; mov eax, dr7 push eax -;; clear Dr7 while executing debugger itself - xor eax, eax - mov dr7, eax - mov eax, dr6 push eax -;; insure all status bits in dr6 are clear... - xor eax, eax - mov dr6, eax - mov eax, dr3 push eax mov eax, dr2 @@ -317,18 +309,9 @@ nullExternalExceptionHandler: add esp, 512 ;; UINT32 Dr0, Dr1, Dr2, Dr3, Dr6, Dr7; - pop eax - mov dr0, eax - pop eax - mov dr1, eax - pop eax - mov dr2, eax - pop eax - mov dr3, eax -;; skip restore of dr6. We cleared dr6 during the context save. - add esp, 4 - pop eax - mov dr7, eax +;; Skip restoration of DRx registers to support in-circuit emualators +;; or debuggers set breakpoint in interrupt/exception context + add esp, 4 * 6 ;; UINT32 Cr0, Cr1, Cr2, Cr3, Cr4; pop eax diff --git a/UefiCpuPkg/CpuDxe/X64/CpuAsm.S b/UefiCpuPkg/CpuDxe/X64/CpuAsm.S index d6327325bf..8f191320a8 100644 --- a/UefiCpuPkg/CpuDxe/X64/CpuAsm.S +++ b/UefiCpuPkg/CpuDxe/X64/CpuAsm.S @@ -2,7 +2,7 @@ #------------------------------------------------------------------------------ #* -#* Copyright (c) 2008 - 2009, Intel Corporation. All rights reserved.
+#* Copyright (c) 2008 - 2010, Intel Corporation. All rights reserved.
#* 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 @@ -218,16 +218,8 @@ CommonInterruptEntry_al_0000: #; 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 @@ -277,18 +269,9 @@ nonNullValue: 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 +#; Skip restoration of DRx registers to support in-circuit emualators +#; or debuggers set breakpoint in interrupt/exception context + addq $48, %rsp #; UINT64 Cr0, Cr1, Cr2, Cr3, Cr4, Cr8; popq %rax diff --git a/UefiCpuPkg/CpuDxe/X64/CpuAsm.asm b/UefiCpuPkg/CpuDxe/X64/CpuAsm.asm index f8c650fae8..79edb7b83e 100644 --- a/UefiCpuPkg/CpuDxe/X64/CpuAsm.asm +++ b/UefiCpuPkg/CpuDxe/X64/CpuAsm.asm @@ -1,7 +1,7 @@ TITLE CpuAsm.asm: ;------------------------------------------------------------------------------ ;* -;* Copyright (c) 2008 - 2009, Intel Corporation. All rights reserved.
+;* Copyright (c) 2008 - 2010, Intel Corporation. All rights reserved.
;* 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 @@ -207,16 +207,8 @@ NoErrorCode: ;; UINT64 Dr0, Dr1, Dr2, Dr3, Dr6, Dr7; mov rax, dr7 push rax -;; clear Dr7 while executing debugger itself - xor rax, rax - mov dr7, rax - mov rax, dr6 push rax -;; insure all status bits in dr6 are clear... - xor rax, rax - mov dr6, rax - mov rax, dr3 push rax mov rax, dr2 @@ -265,18 +257,9 @@ nonNullValue: add rsp, 512 ;; UINT64 Dr0, Dr1, Dr2, Dr3, Dr6, Dr7; - pop rax - mov dr0, rax - pop rax - mov dr1, rax - pop rax - mov dr2, rax - pop rax - mov dr3, rax -;; skip restore of dr6. We cleared dr6 during the context save. - add rsp, 8 - pop rax - mov dr7, rax +;; Skip restoration of DRx registers to support in-circuit emualators +;; or debuggers set breakpoint in interrupt/exception context + add rsp, 8 * 6 ;; UINT64 Cr0, Cr1, Cr2, Cr3, Cr4, Cr8; pop rax