<div dir="ltr">Julian, the sanitizer-windows bot (an MSVC build) is broken after this change, please a take a look: <a href="http://lab.llvm.org:8011/builders/sanitizer-windows/builds/42653/steps/stage%201%20build/logs/stdio">http://lab.llvm.org:8011/builders/sanitizer-windows/builds/42653/steps/stage%201%20build/logs/stdio</a></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Thu, Feb 28, 2019 at 1:40 AM Julian Lettner via llvm-commits <<a href="mailto:llvm-commits@lists.llvm.org">llvm-commits@lists.llvm.org</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Author: yln<br>
Date: Wed Feb 27 14:16:02 2019<br>
New Revision: 355039<br>
<br>
URL: <a href="http://llvm.org/viewvc/llvm-project?rev=355039&view=rev" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project?rev=355039&view=rev</a><br>
Log:<br>
[NFC][Sanitizer] Pull up GetStackTrace into sanitizer_common<br>
<br>
We already independently declare GetStackTrace in all (except TSan)<br>
sanitizer runtime headers. Lets move it to sanitizer_stacktrace.h to<br>
have one canonical way to fill in a BufferedStackFrame. Also enables us<br>
to use it in sanitizer_common itself.<br>
<br>
This patch defines GetStackTrace for TSan and moves the function from<br>
ubsan_diag.cc to ubsan_diag_standalone.cc to avoid duplicate symbols<br>
for the UBSan-ASan runtime.<br>
<br>
Other than that this patch just moves the code out of headers and into<br>
the correct namespace.<br>
<br>
Reviewers: vitalybuka<br>
<br>
Differential Revision: <a href="https://reviews.llvm.org/D58651" rel="noreferrer" target="_blank">https://reviews.llvm.org/D58651</a><br>
<br>
Modified:<br>
compiler-rt/trunk/lib/asan/asan_stack.cc<br>
compiler-rt/trunk/lib/asan/asan_stack.h<br>
compiler-rt/trunk/lib/hwasan/hwasan.cpp<br>
compiler-rt/trunk/lib/hwasan/hwasan.h<br>
compiler-rt/trunk/lib/lsan/lsan.cc<br>
compiler-rt/trunk/lib/lsan/lsan.h<br>
compiler-rt/trunk/lib/msan/msan.cc<br>
compiler-rt/trunk/lib/msan/msan.h<br>
compiler-rt/trunk/lib/sanitizer_common/sanitizer_stacktrace.h<br>
compiler-rt/trunk/lib/tsan/rtl/tsan_stack_trace.cc<br>
compiler-rt/trunk/lib/ubsan/ubsan_diag.cc<br>
compiler-rt/trunk/lib/ubsan/ubsan_diag.h<br>
compiler-rt/trunk/lib/ubsan/ubsan_diag_standalone.cc<br>
<br>
Modified: compiler-rt/trunk/lib/asan/asan_stack.cc<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/asan/asan_stack.cc?rev=355039&r1=355038&r2=355039&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/asan/asan_stack.cc?rev=355039&r1=355038&r2=355039&view=diff</a><br>
==============================================================================<br>
--- compiler-rt/trunk/lib/asan/asan_stack.cc (original)<br>
+++ compiler-rt/trunk/lib/asan/asan_stack.cc Wed Feb 27 14:16:02 2019<br>
@@ -28,6 +28,34 @@ u32 GetMallocContextSize() {<br>
<br>
} // namespace __asan<br>
<br>
+void __sanitizer::GetStackTrace(BufferedStackTrace *stack, uptr max_depth,<br>
+ uptr pc, uptr bp, void *context, bool fast) {<br>
+ using namespace __asan;<br>
+#if SANITIZER_WINDOWS<br>
+ stack->Unwind(max_depth, pc, 0, context, 0, 0, false);<br>
+#else<br>
+ AsanThread *t;<br>
+ stack->size = 0;<br>
+ if (LIKELY(asan_inited)) {<br>
+ if ((t = GetCurrentThread()) && !t->isUnwinding()) {<br>
+ uptr stack_top = t->stack_top();<br>
+ uptr stack_bottom = t->stack_bottom();<br>
+ ScopedUnwinding unwind_scope(t);<br>
+ if (!SANITIZER_MIPS || IsValidFrame(bp, stack_top, stack_bottom)) {<br>
+ if (StackTrace::WillUseFastUnwind(fast))<br>
+ stack->Unwind(max_depth, pc, bp, nullptr, stack_top, stack_bottom,<br>
+ true);<br>
+ else<br>
+ stack->Unwind(max_depth, pc, 0, context, 0, 0, false);<br>
+ }<br>
+ } else if (!t && !fast) {<br>
+ /* If GetCurrentThread() has failed, try to do slow unwind anyways. */<br>
+ stack->Unwind(max_depth, pc, bp, context, 0, 0, false);<br>
+ }<br>
+ }<br>
+#endif // SANITIZER_WINDOWS<br>
+}<br>
+<br>
// ------------------ Interface -------------- {{{1<br>
<br>
extern "C" {<br>
<br>
Modified: compiler-rt/trunk/lib/asan/asan_stack.h<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/asan/asan_stack.h?rev=355039&r1=355038&r2=355039&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/asan/asan_stack.h?rev=355039&r1=355038&r2=355039&view=diff</a><br>
==============================================================================<br>
--- compiler-rt/trunk/lib/asan/asan_stack.h (original)<br>
+++ compiler-rt/trunk/lib/asan/asan_stack.h Wed Feb 27 14:16:02 2019<br>
@@ -26,37 +26,6 @@ static const u32 kDefaultMallocContextSi<br>
void SetMallocContextSize(u32 size);<br>
u32 GetMallocContextSize();<br>
<br>
-// Get the stack trace with the given pc and bp.<br>
-// The pc will be in the position 0 of the resulting stack trace.<br>
-// The bp may refer to the current frame or to the caller's frame.<br>
-ALWAYS_INLINE<br>
-void GetStackTrace(BufferedStackTrace *stack, uptr max_depth, uptr pc, uptr bp,<br>
- void *context, bool fast) {<br>
-#if SANITIZER_WINDOWS<br>
- stack->Unwind(max_depth, pc, 0, context, 0, 0, false);<br>
-#else<br>
- AsanThread *t;<br>
- stack->size = 0;<br>
- if (LIKELY(asan_inited)) {<br>
- if ((t = GetCurrentThread()) && !t->isUnwinding()) {<br>
- uptr stack_top = t->stack_top();<br>
- uptr stack_bottom = t->stack_bottom();<br>
- ScopedUnwinding unwind_scope(t);<br>
- if (!SANITIZER_MIPS || IsValidFrame(bp, stack_top, stack_bottom)) {<br>
- if (StackTrace::WillUseFastUnwind(fast))<br>
- stack->Unwind(max_depth, pc, bp, nullptr, stack_top, stack_bottom,<br>
- true);<br>
- else<br>
- stack->Unwind(max_depth, pc, 0, context, 0, 0, false);<br>
- }<br>
- } else if (!t && !fast) {<br>
- /* If GetCurrentThread() has failed, try to do slow unwind anyways. */<br>
- stack->Unwind(max_depth, pc, bp, context, 0, 0, false);<br>
- }<br>
- }<br>
-#endif // SANITIZER_WINDOWS<br>
-}<br>
-<br>
} // namespace __asan<br>
<br>
// NOTE: A Rule of thumb is to retrieve stack trace in the interceptors<br>
<br>
Modified: compiler-rt/trunk/lib/hwasan/hwasan.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/hwasan/hwasan.cpp?rev=355039&r1=355038&r2=355039&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/hwasan/hwasan.cpp?rev=355039&r1=355038&r2=355039&view=diff</a><br>
==============================================================================<br>
--- compiler-rt/trunk/lib/hwasan/hwasan.cpp (original)<br>
+++ compiler-rt/trunk/lib/hwasan/hwasan.cpp Wed Feb 27 14:16:02 2019<br>
@@ -144,26 +144,6 @@ static void InitializeFlags() {<br>
if (common_flags()->help) parser.PrintFlagDescriptions();<br>
}<br>
<br>
-void GetStackTrace(BufferedStackTrace *stack, uptr max_s, uptr pc, uptr bp,<br>
- void *context, bool request_fast_unwind) {<br>
- Thread *t = GetCurrentThread();<br>
- if (!t) {<br>
- // the thread is still being created.<br>
- stack->size = 0;<br>
- return;<br>
- }<br>
- if (!StackTrace::WillUseFastUnwind(request_fast_unwind)) {<br>
- // Block reports from our interceptors during _Unwind_Backtrace.<br>
- SymbolizerScope sym_scope;<br>
- return stack->Unwind(max_s, pc, bp, context, 0, 0, request_fast_unwind);<br>
- }<br>
- if (StackTrace::WillUseFastUnwind(request_fast_unwind))<br>
- stack->Unwind(max_s, pc, bp, nullptr, t->stack_top(), t->stack_bottom(),<br>
- true);<br>
- else<br>
- stack->Unwind(max_s, pc, 0, context, 0, 0, false);<br>
-}<br>
-<br>
static void HWAsanCheckFailed(const char *file, int line, const char *cond,<br>
u64 v1, u64 v2) {<br>
Report("HWAddressSanitizer CHECK failed: %s:%d \"%s\" (0x%zx, 0x%zx)\n", file,<br>
@@ -264,6 +244,28 @@ void InitInstrumentation() {<br>
<br>
} // namespace __hwasan<br>
<br>
+void __sanitizer::GetStackTrace(BufferedStackTrace *stack, uptr max_s, uptr pc,<br>
+ uptr bp, void *context,<br>
+ bool request_fast_unwind) {<br>
+ using namespace __hwasan;<br>
+ Thread *t = GetCurrentThread();<br>
+ if (!t) {<br>
+ // the thread is still being created.<br>
+ stack->size = 0;<br>
+ return;<br>
+ }<br>
+ if (!StackTrace::WillUseFastUnwind(request_fast_unwind)) {<br>
+ // Block reports from our interceptors during _Unwind_Backtrace.<br>
+ SymbolizerScope sym_scope;<br>
+ return stack->Unwind(max_s, pc, bp, context, 0, 0, request_fast_unwind);<br>
+ }<br>
+ if (StackTrace::WillUseFastUnwind(request_fast_unwind))<br>
+ stack->Unwind(max_s, pc, bp, nullptr, t->stack_top(), t->stack_bottom(),<br>
+ true);<br>
+ else<br>
+ stack->Unwind(max_s, pc, 0, context, 0, 0, false);<br>
+}<br>
+<br>
// Interface.<br>
<br>
using namespace __hwasan;<br>
<br>
Modified: compiler-rt/trunk/lib/hwasan/hwasan.h<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/hwasan/hwasan.h?rev=355039&r1=355038&r2=355039&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/hwasan/hwasan.h?rev=355039&r1=355038&r2=355039&view=diff</a><br>
==============================================================================<br>
--- compiler-rt/trunk/lib/hwasan/hwasan.h (original)<br>
+++ compiler-rt/trunk/lib/hwasan/hwasan.h Wed Feb 27 14:16:02 2019<br>
@@ -104,9 +104,6 @@ struct SymbolizerScope {<br>
~SymbolizerScope() { ExitSymbolizer(); }<br>
};<br>
<br>
-void GetStackTrace(BufferedStackTrace *stack, uptr max_s, uptr pc, uptr bp,<br>
- void *context, bool request_fast_unwind);<br>
-<br>
// Returns a "chained" origin id, pointing to the given stack trace followed by<br>
// the previous origin id.<br>
u32 ChainOrigin(u32 id, StackTrace *stack);<br>
<br>
Modified: compiler-rt/trunk/lib/lsan/lsan.cc<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/lsan/lsan.cc?rev=355039&r1=355038&r2=355039&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/lsan/lsan.cc?rev=355039&r1=355038&r2=355039&view=diff</a><br>
==============================================================================<br>
--- compiler-rt/trunk/lib/lsan/lsan.cc (original)<br>
+++ compiler-rt/trunk/lib/lsan/lsan.cc Wed Feb 27 14:16:02 2019<br>
@@ -32,6 +32,24 @@ bool WordIsPoisoned(uptr addr) {<br>
<br>
} // namespace __lsan<br>
<br>
+void __sanitizer::GetStackTrace(BufferedStackTrace *stack, uptr max_depth,<br>
+ uptr pc, uptr bp, void *context, bool fast) {<br>
+ using namespace __lsan;<br>
+ uptr stack_top = 0, stack_bottom = 0;<br>
+ ThreadContext *t;<br>
+ if (StackTrace::WillUseFastUnwind(fast) &&<br>
+ (t = CurrentThreadContext())) {<br>
+ stack_top = t->stack_end();<br>
+ stack_bottom = t->stack_begin();<br>
+ }<br>
+ if (!SANITIZER_MIPS || IsValidFrame(bp, stack_top, stack_bottom)) {<br>
+ if (StackTrace::WillUseFastUnwind(fast))<br>
+ stack->Unwind(max_depth, pc, bp, nullptr, stack_top, stack_bottom, true);<br>
+ else<br>
+ stack->Unwind(max_depth, pc, 0, context, 0, 0, false);<br>
+ }<br>
+}<br>
+<br>
using namespace __lsan; // NOLINT<br>
<br>
static void InitializeFlags() {<br>
<br>
Modified: compiler-rt/trunk/lib/lsan/lsan.h<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/lsan/lsan.h?rev=355039&r1=355038&r2=355039&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/lsan/lsan.h?rev=355039&r1=355038&r2=355039&view=diff</a><br>
==============================================================================<br>
--- compiler-rt/trunk/lib/lsan/lsan.h (original)<br>
+++ compiler-rt/trunk/lib/lsan/lsan.h Wed Feb 27 14:16:02 2019<br>
@@ -40,28 +40,6 @@ void ReplaceSystemMalloc();<br>
__lsan_init(); \<br>
} while (0)<br>
<br>
-// Get the stack trace with the given pc and bp.<br>
-// The pc will be in the position 0 of the resulting stack trace.<br>
-// The bp may refer to the current frame or to the caller's frame.<br>
-ALWAYS_INLINE<br>
-void GetStackTrace(__sanitizer::BufferedStackTrace *stack,<br>
- __sanitizer::uptr max_depth, __sanitizer::uptr pc,<br>
- __sanitizer::uptr bp, void *context, bool fast) {<br>
- uptr stack_top = 0, stack_bottom = 0;<br>
- ThreadContext *t;<br>
- if (__sanitizer::StackTrace::WillUseFastUnwind(fast) &&<br>
- (t = CurrentThreadContext())) {<br>
- stack_top = t->stack_end();<br>
- stack_bottom = t->stack_begin();<br>
- }<br>
- if (!SANITIZER_MIPS || IsValidFrame(bp, stack_top, stack_bottom)) {<br>
- if (StackTrace::WillUseFastUnwind(fast))<br>
- stack->Unwind(max_depth, pc, bp, nullptr, stack_top, stack_bottom, true);<br>
- else<br>
- stack->Unwind(max_depth, pc, 0, context, 0, 0, false);<br>
- }<br>
-}<br>
-<br>
} // namespace __lsan<br>
<br>
extern bool lsan_inited;<br>
<br>
Modified: compiler-rt/trunk/lib/msan/msan.cc<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/msan/msan.cc?rev=355039&r1=355038&r2=355039&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/msan/msan.cc?rev=355039&r1=355038&r2=355039&view=diff</a><br>
==============================================================================<br>
--- compiler-rt/trunk/lib/msan/msan.cc (original)<br>
+++ compiler-rt/trunk/lib/msan/msan.cc Wed Feb 27 14:16:02 2019<br>
@@ -221,21 +221,6 @@ static void InitializeFlags() {<br>
if (f->store_context_size < 1) f->store_context_size = 1;<br>
}<br>
<br>
-void GetStackTrace(BufferedStackTrace *stack, uptr max_s, uptr pc, uptr bp,<br>
- void *context, bool request_fast_unwind) {<br>
- MsanThread *t = GetCurrentThread();<br>
- if (!t || !StackTrace::WillUseFastUnwind(request_fast_unwind)) {<br>
- // Block reports from our interceptors during _Unwind_Backtrace.<br>
- SymbolizerScope sym_scope;<br>
- return stack->Unwind(max_s, pc, bp, context, 0, 0, false);<br>
- }<br>
- if (StackTrace::WillUseFastUnwind(request_fast_unwind))<br>
- stack->Unwind(max_s, pc, bp, nullptr, t->stack_top(), t->stack_bottom(),<br>
- true);<br>
- else<br>
- stack->Unwind(max_s, pc, 0, context, 0, 0, false);<br>
-}<br>
-<br>
void PrintWarning(uptr pc, uptr bp) {<br>
PrintWarningWithOrigin(pc, bp, __msan_origin_tls);<br>
}<br>
@@ -316,6 +301,23 @@ u32 ChainOrigin(u32 id, StackTrace *stac<br>
<br>
} // namespace __msan<br>
<br>
+void __sanitizer::GetStackTrace(BufferedStackTrace *stack, uptr max_s, uptr pc,<br>
+ uptr bp, void *context,<br>
+ bool request_fast_unwind) {<br>
+ using namespace __msan;<br>
+ MsanThread *t = GetCurrentThread();<br>
+ if (!t || !StackTrace::WillUseFastUnwind(request_fast_unwind)) {<br>
+ // Block reports from our interceptors during _Unwind_Backtrace.<br>
+ SymbolizerScope sym_scope;<br>
+ return stack->Unwind(max_s, pc, bp, context, 0, 0, false);<br>
+ }<br>
+ if (StackTrace::WillUseFastUnwind(request_fast_unwind))<br>
+ stack->Unwind(max_s, pc, bp, nullptr, t->stack_top(), t->stack_bottom(),<br>
+ true);<br>
+ else<br>
+ stack->Unwind(max_s, pc, 0, context, 0, 0, false);<br>
+}<br>
+<br>
// Interface.<br>
<br>
using namespace __msan;<br>
<br>
Modified: compiler-rt/trunk/lib/msan/msan.h<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/msan/msan.h?rev=355039&r1=355038&r2=355039&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/msan/msan.h?rev=355039&r1=355038&r2=355039&view=diff</a><br>
==============================================================================<br>
--- compiler-rt/trunk/lib/msan/msan.h (original)<br>
+++ compiler-rt/trunk/lib/msan/msan.h Wed Feb 27 14:16:02 2019<br>
@@ -312,9 +312,6 @@ struct SymbolizerScope {<br>
void PrintWarning(uptr pc, uptr bp);<br>
void PrintWarningWithOrigin(uptr pc, uptr bp, u32 origin);<br>
<br>
-void GetStackTrace(BufferedStackTrace *stack, uptr max_s, uptr pc, uptr bp,<br>
- void *context, bool request_fast_unwind);<br>
-<br>
// Unpoison first n function arguments.<br>
void UnpoisonParam(uptr n);<br>
void UnpoisonThreadLocalState();<br>
<br>
Modified: compiler-rt/trunk/lib/sanitizer_common/sanitizer_stacktrace.h<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/sanitizer_common/sanitizer_stacktrace.h?rev=355039&r1=355038&r2=355039&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/sanitizer_common/sanitizer_stacktrace.h?rev=355039&r1=355038&r2=355039&view=diff</a><br>
==============================================================================<br>
--- compiler-rt/trunk/lib/sanitizer_common/sanitizer_stacktrace.h (original)<br>
+++ compiler-rt/trunk/lib/sanitizer_common/sanitizer_stacktrace.h Wed Feb 27 14:16:02 2019<br>
@@ -121,6 +121,12 @@ static inline bool IsValidFrame(uptr fra<br>
return frame > stack_bottom && frame < stack_top - 2 * sizeof (uhwptr);<br>
}<br>
<br>
+// Get the stack trace with the given pc and bp.<br>
+// The pc will be in the position 0 of the resulting stack trace.<br>
+// The bp may refer to the current frame or to the caller's frame.<br>
+void GetStackTrace(BufferedStackTrace *stack, uptr max_depth, uptr pc, uptr bp,<br>
+ void *context, bool request_fast_unwind);<br>
+<br>
} // namespace __sanitizer<br>
<br>
// Use this macro if you want to print stack trace with the caller<br>
<br>
Modified: compiler-rt/trunk/lib/tsan/rtl/tsan_stack_trace.cc<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/tsan/rtl/tsan_stack_trace.cc?rev=355039&r1=355038&r2=355039&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/tsan/rtl/tsan_stack_trace.cc?rev=355039&r1=355038&r2=355039&view=diff</a><br>
==============================================================================<br>
--- compiler-rt/trunk/lib/tsan/rtl/tsan_stack_trace.cc (original)<br>
+++ compiler-rt/trunk/lib/tsan/rtl/tsan_stack_trace.cc Wed Feb 27 14:16:02 2019<br>
@@ -48,3 +48,15 @@ void VarSizeStackTrace::ReverseOrder() {<br>
}<br>
<br>
} // namespace __tsan<br>
+<br>
+void __sanitizer::GetStackTrace(BufferedStackTrace *stack, uptr max_depth,<br>
+ uptr pc, uptr bp, void *context,<br>
+ bool request_fast_unwind) {<br>
+ uptr top = 0;<br>
+ uptr bottom = 0;<br>
+ if (StackTrace::WillUseFastUnwind(request_fast_unwind)) {<br>
+ GetThreadStackTopAndBottom(false, &top, &bottom);<br>
+ stack->Unwind(kStackTraceMax, pc, bp, nullptr, top, bottom, true);<br>
+ } else<br>
+ stack->Unwind(kStackTraceMax, pc, 0, context, 0, 0, false);<br>
+}<br>
<br>
Modified: compiler-rt/trunk/lib/ubsan/ubsan_diag.cc<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/ubsan/ubsan_diag.cc?rev=355039&r1=355038&r2=355039&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/ubsan/ubsan_diag.cc?rev=355039&r1=355038&r2=355039&view=diff</a><br>
==============================================================================<br>
--- compiler-rt/trunk/lib/ubsan/ubsan_diag.cc (original)<br>
+++ compiler-rt/trunk/lib/ubsan/ubsan_diag.cc Wed Feb 27 14:16:02 2019<br>
@@ -26,17 +26,6 @@<br>
<br>
using namespace __ubsan;<br>
<br>
-void __ubsan::GetStackTrace(BufferedStackTrace *stack, uptr max_depth, uptr pc,<br>
- uptr bp, void *context, bool fast) {<br>
- uptr top = 0;<br>
- uptr bottom = 0;<br>
- if (StackTrace::WillUseFastUnwind(fast)) {<br>
- GetThreadStackTopAndBottom(false, &top, &bottom);<br>
- stack->Unwind(max_depth, pc, bp, nullptr, top, bottom, true);<br>
- } else<br>
- stack->Unwind(max_depth, pc, bp, context, 0, 0, false);<br>
-}<br>
-<br>
static void MaybePrintStackTrace(uptr pc, uptr bp) {<br>
// We assume that flags are already parsed, as UBSan runtime<br>
// will definitely be called when we print the first diagnostics message.<br>
<br>
Modified: compiler-rt/trunk/lib/ubsan/ubsan_diag.h<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/ubsan/ubsan_diag.h?rev=355039&r1=355038&r2=355039&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/ubsan/ubsan_diag.h?rev=355039&r1=355038&r2=355039&view=diff</a><br>
==============================================================================<br>
--- compiler-rt/trunk/lib/ubsan/ubsan_diag.h (original)<br>
+++ compiler-rt/trunk/lib/ubsan/ubsan_diag.h Wed Feb 27 14:16:02 2019<br>
@@ -234,9 +234,6 @@ bool ignoreReport(SourceLocation SLoc, R<br>
GET_CALLER_PC_BP; \<br>
ReportOptions Opts = {unrecoverable_handler, pc, bp}<br>
<br>
-void GetStackTrace(BufferedStackTrace *stack, uptr max_depth, uptr pc, uptr bp,<br>
- void *context, bool fast);<br>
-<br>
/// \brief Instantiate this class before printing diagnostics in the error<br>
/// report. This class ensures that reports from different threads and from<br>
/// different sanitizers won't be mixed.<br>
<br>
Modified: compiler-rt/trunk/lib/ubsan/ubsan_diag_standalone.cc<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/ubsan/ubsan_diag_standalone.cc?rev=355039&r1=355038&r2=355039&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/ubsan/ubsan_diag_standalone.cc?rev=355039&r1=355038&r2=355039&view=diff</a><br>
==============================================================================<br>
--- compiler-rt/trunk/lib/ubsan/ubsan_diag_standalone.cc (original)<br>
+++ compiler-rt/trunk/lib/ubsan/ubsan_diag_standalone.cc Wed Feb 27 14:16:02 2019<br>
@@ -14,6 +14,17 @@<br>
#if CAN_SANITIZE_UB<br>
#include "ubsan_diag.h"<br>
<br>
+void __sanitizer::GetStackTrace(BufferedStackTrace *stack, uptr max_depth,<br>
+ uptr pc, uptr bp, void *context, bool fast) {<br>
+ uptr top = 0;<br>
+ uptr bottom = 0;<br>
+ if (StackTrace::WillUseFastUnwind(fast)) {<br>
+ GetThreadStackTopAndBottom(false, &top, &bottom);<br>
+ stack->Unwind(max_depth, pc, bp, nullptr, top, bottom, true);<br>
+ } else<br>
+ stack->Unwind(max_depth, pc, bp, context, 0, 0, false);<br>
+}<br>
+<br>
using namespace __ubsan;<br>
<br>
extern "C" {<br>
<br>
<br>
_______________________________________________<br>
llvm-commits mailing list<br>
<a href="mailto:llvm-commits@lists.llvm.org" target="_blank">llvm-commits@lists.llvm.org</a><br>
<a href="https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits" rel="noreferrer" target="_blank">https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits</a><br>
</blockquote></div>