summaryrefslogtreecommitdiff
path: root/absl/debugging/leak_check.cc
diff options
context:
space:
mode:
authorGravatar Abseil Team <absl-team@google.com>2021-03-23 15:07:11 -0700
committerGravatar Derek Mauro <dmauro@google.com>2021-03-24 08:58:27 -0400
commit1fdbe1ea1b8c835c11ed6fbec4d4259ad104f765 (patch)
tree4305af57d1416a50cb06522554569a7c9f7bf995 /absl/debugging/leak_check.cc
parentf3eff479834e579111e195d8f9245050a4488eed (diff)
Export of internal Abseil changes
-- 4b566a7deeba5db473c83f4924c1d182a002779f by Abseil Team <absl-team@google.com>: Add absl::LeakCheckerIsActive to check whether a leak checker is built into the target and enabled. For LeakSanitizer, it is by default enabled unless __lsan_is_turned_off() is defined and returns true. PiperOrigin-RevId: 364654465 -- 0a56ff5310b66f9d1ff5e5e2a053335ecfb5c75b by Abseil Team <absl-team@google.com>: Update absl::FromTM documentation to reflect implementation. PiperOrigin-RevId: 364388743 GitOrigin-RevId: 4b566a7deeba5db473c83f4924c1d182a002779f Change-Id: I8df35b761b532e79d620f484153083c3499ef55b
Diffstat (limited to 'absl/debugging/leak_check.cc')
-rw-r--r--absl/debugging/leak_check.cc15
1 files changed, 15 insertions, 0 deletions
diff --git a/absl/debugging/leak_check.cc b/absl/debugging/leak_check.cc
index db9d5d09..764ca0ad 100644
--- a/absl/debugging/leak_check.cc
+++ b/absl/debugging/leak_check.cc
@@ -16,6 +16,7 @@
// When lsan is not linked in, these functions are not available,
// therefore Abseil code which depends on these functions is conditioned on the
// definition of LEAK_SANITIZER.
+#include "absl/base/attributes.h"
#include "absl/debugging/leak_check.h"
#ifndef LEAK_SANITIZER
@@ -23,6 +24,7 @@
namespace absl {
ABSL_NAMESPACE_BEGIN
bool HaveLeakSanitizer() { return false; }
+bool LeakCheckerIsActive() { return false; }
void DoIgnoreLeak(const void*) { }
void RegisterLivePointers(const void*, size_t) { }
void UnRegisterLivePointers(const void*, size_t) { }
@@ -35,9 +37,22 @@ ABSL_NAMESPACE_END
#include <sanitizer/lsan_interface.h>
+#if ABSL_HAVE_ATTRIBUTE_WEAK
+extern "C" ABSL_ATTRIBUTE_WEAK int __lsan_is_turned_off();
+#endif
+
namespace absl {
ABSL_NAMESPACE_BEGIN
bool HaveLeakSanitizer() { return true; }
+
+#if ABSL_HAVE_ATTRIBUTE_WEAK
+bool LeakCheckerIsActive() {
+ return !(&__lsan_is_turned_off && __lsan_is_turned_off());
+}
+#else
+bool LeakCheckerIsActive() { return true; }
+#endif
+
bool FindAndReportLeaks() { return __lsan_do_recoverable_leak_check(); }
void DoIgnoreLeak(const void* ptr) { __lsan_ignore_object(ptr); }
void RegisterLivePointers(const void* ptr, size_t size) {