diff options
Diffstat (limited to 'lib/ubsan/ubsan_diag_standalone.cpp')
-rw-r--r-- | lib/ubsan/ubsan_diag_standalone.cpp | 40 |
1 files changed, 40 insertions, 0 deletions
diff --git a/lib/ubsan/ubsan_diag_standalone.cpp b/lib/ubsan/ubsan_diag_standalone.cpp new file mode 100644 index 000000000000..300179adae28 --- /dev/null +++ b/lib/ubsan/ubsan_diag_standalone.cpp @@ -0,0 +1,40 @@ +//===-- ubsan_diag_standalone.cpp -----------------------------------------===// +// +// 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 +// +//===----------------------------------------------------------------------===// +// +// Diagnostic reporting for the standalone UBSan runtime. +// +//===----------------------------------------------------------------------===// + +#include "ubsan_platform.h" +#if CAN_SANITIZE_UB +#include "ubsan_diag.h" + +using namespace __ubsan; + +void __sanitizer::BufferedStackTrace::UnwindImpl( + uptr pc, uptr bp, void *context, bool request_fast, u32 max_depth) { + uptr top = 0; + uptr bottom = 0; + if (StackTrace::WillUseFastUnwind(request_fast)) { + GetThreadStackTopAndBottom(false, &top, &bottom); + Unwind(max_depth, pc, bp, nullptr, top, bottom, true); + } else + Unwind(max_depth, pc, bp, context, 0, 0, false); +} + +extern "C" { +SANITIZER_INTERFACE_ATTRIBUTE +void __sanitizer_print_stack_trace() { + GET_CURRENT_PC_BP; + BufferedStackTrace stack; + stack.Unwind(pc, bp, nullptr, common_flags()->fast_unwind_on_fatal); + stack.Print(); +} +} // extern "C" + +#endif // CAN_SANITIZE_UB |