summaryrefslogtreecommitdiffstats
path: root/MdePkg/Library/StackCheckLib/StackCheckLibCommonGcc.c
diff options
context:
space:
mode:
Diffstat (limited to 'MdePkg/Library/StackCheckLib/StackCheckLibCommonGcc.c')
-rw-r--r--MdePkg/Library/StackCheckLib/StackCheckLibCommonGcc.c38
1 files changed, 38 insertions, 0 deletions
diff --git a/MdePkg/Library/StackCheckLib/StackCheckLibCommonGcc.c b/MdePkg/Library/StackCheckLib/StackCheckLibCommonGcc.c
new file mode 100644
index 0000000000..4146012b90
--- /dev/null
+++ b/MdePkg/Library/StackCheckLib/StackCheckLibCommonGcc.c
@@ -0,0 +1,38 @@
+/** @file
+ Provides the required functionality for handling stack
+ cookie check failures in GCC.
+
+ Copyright (c) Microsoft Corporation.
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+#include <Base.h>
+
+#include <Library/DebugLib.h>
+#include <Library/BaseLib.h>
+#include <Library/StackCheckFailureHookLib.h>
+
+/**
+ Triggers an interrupt using the vector specified by PcdStackCookieExceptionVector
+**/
+VOID
+TriggerStackCookieInterrupt (
+ VOID
+ );
+
+VOID *__stack_chk_guard = (VOID *)(UINTN)STACK_COOKIE_VALUE;
+
+/**
+ This function gets called when a gcc/clang generated stack cookie fails. This implementation calls into a platform
+ failure hook lib and then triggers the stack cookie interrupt.
+
+**/
+VOID
+__stack_chk_fail (
+ VOID
+ )
+{
+ DEBUG ((DEBUG_ERROR, "Stack cookie check failed at address 0x%llx!\n", RETURN_ADDRESS (0)));
+ StackCheckFailureHook (RETURN_ADDRESS (0));
+ TriggerStackCookieInterrupt ();
+}