mirror of
https://github.com/acidanthera/audk.git
synced 2025-07-27 07:34:06 +02:00
MdePkg/BaseLib: Let CpuDeadLoop() be breakable in debugger
Starting from certain version of Visual Studio C compiler (I don’t have the exact version. I am using VS2019), CpuDeadLoop is optimized quite well by compiler. The compiler does not generate instructions that jump out of the loop when the "Index" is non-zero. It becomes harder/impossible for developers to break out of the dead-loop in debugger. The new version of CpuDeadLoop() compares a volatile global to a volatile local. This forces 2 reads and a comparison on every loop iteration. The local variable can be set to 1 to exit the loop without modifying the global variable. Using VS2019 with max opt enabled, The dead-loop can be exit by setting Index to 1 in a debugger. Signed-off-by: Michael D Kinney <michael.d.kinney@intel.com>
This commit is contained in:
parent
0982da4f50
commit
d3b32dca06
@ -1,7 +1,7 @@
|
|||||||
/** @file
|
/** @file
|
||||||
Base Library CPU Functions for all architectures.
|
Base Library CPU Functions for all architectures.
|
||||||
|
|
||||||
Copyright (c) 2006 - 2008, Intel Corporation. All rights reserved.<BR>
|
Copyright (c) 2006 - 2024, Intel Corporation. All rights reserved.<BR>
|
||||||
SPDX-License-Identifier: BSD-2-Clause-Patent
|
SPDX-License-Identifier: BSD-2-Clause-Patent
|
||||||
|
|
||||||
**/
|
**/
|
||||||
@ -9,6 +9,8 @@
|
|||||||
#include <Base.h>
|
#include <Base.h>
|
||||||
#include <Library/BaseLib.h>
|
#include <Library/BaseLib.h>
|
||||||
|
|
||||||
|
static volatile UINTN mDeadLoopComparator = 0;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Executes an infinite loop.
|
Executes an infinite loop.
|
||||||
|
|
||||||
@ -26,7 +28,7 @@ CpuDeadLoop (
|
|||||||
{
|
{
|
||||||
volatile UINTN Index;
|
volatile UINTN Index;
|
||||||
|
|
||||||
for (Index = 0; Index == 0;) {
|
for (Index = mDeadLoopComparator; Index == mDeadLoopComparator;) {
|
||||||
CpuPause ();
|
CpuPause ();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user