================
@@ -0,0 +1,115 @@
+//===--- RunOnNewStack.cpp - Crash Recovery 
-------------------------------===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM 
Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#include "llvm/Support/ProgramStack.h"
+#include "llvm/Config/config.h"
+#include "llvm/Support/Compiler.h"
+
+#ifdef HAVE_SYS_RESOURCE_H
+# include <sys/resource.h>
+#endif
+
+#ifdef _MSC_VER
+# include <intrin.h>  // for _AddressOfReturnAddress
+#endif
+
+// Currently only Apple AArch64 is known to support split stacks in the 
debugger
+// and other tooling.
+#if defined(__APPLE__) && defined(__aarch64__) &&                              
\
+    LLVM_HAS_CPP_ATTRIBUTE(gnu::naked) && __has_extension(gnu_asm)
+# define LLVM_HAS_SPLIT_STACKS
+# define LLVM_HAS_SPLIT_STACKS_AARCH64
+#include <sys/mman.h>
+#endif
+
+#ifndef LLVM_HAS_SPLIT_STACKS
+# include "llvm/Support/thread.h"
+#endif
+
+using namespace llvm;
+
+uintptr_t llvm::getStackPointer() {
+#if __GNUC__ || __has_builtin(__builtin_frame_address)
+  return (uintptr_t)__builtin_frame_address(0);
+#elif defined(_MSC_VER)
+  return (uintptr_t)_AddressOfReturnAddress();
+#else
+  char CharOnStack = 0;
----------------
rnk wrote:

This `#else` case breaks down in situations where the compiler moves all the 
user data out to the heap, like with Seperate Data And Control Stacks (SCADS) 
or ASan use-after-return detection mode. I think we probably don't care, since 
those will be handled above.

I guess I don't have any actionable suggestions, other than to make the 
character variable itself volatile. It seems to me like it would be 
semantics-preserving for a compiler to promote CharOnStack into a global 
constant 0, for example, since we never write through the pointer that we store 
into a volatile local.

https://github.com/llvm/llvm-project/pull/133173
_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to