to reflect the new license. We understand that people may be surprised that we're moving the header entirely to discuss the new license. We checked this carefully with the Foundation's lawyer and we believe this is the correct approach. Essentially, all code in the project is now made available by the LLVM project under our new license, so you will see that the license headers include that license only. Some of our contributors have contributed code under our old license, and accordingly, we have retained a copy of our old license notice in the top-level files in each project and repository. llvm-svn: 351636
90 lines
3.8 KiB
C++
90 lines
3.8 KiB
C++
//===-- sanitizer/lsan_interface.h ------------------------------*- C++ -*-===//
|
|
//
|
|
// 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
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
//
|
|
// This file is a part of LeakSanitizer.
|
|
//
|
|
// Public interface header.
|
|
//===----------------------------------------------------------------------===//
|
|
#ifndef SANITIZER_LSAN_INTERFACE_H
|
|
#define SANITIZER_LSAN_INTERFACE_H
|
|
|
|
#include <sanitizer/common_interface_defs.h>
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
// Allocations made between calls to __lsan_disable() and __lsan_enable() will
|
|
// be treated as non-leaks. Disable/enable pairs may be nested.
|
|
void __lsan_disable(void);
|
|
void __lsan_enable(void);
|
|
|
|
// The heap object into which p points will be treated as a non-leak.
|
|
void __lsan_ignore_object(const void *p);
|
|
|
|
// Memory regions registered through this interface will be treated as sources
|
|
// of live pointers during leak checking. Useful if you store pointers in
|
|
// mapped memory.
|
|
// Points of note:
|
|
// - __lsan_unregister_root_region() must be called with the same pointer and
|
|
// size that have earlier been passed to __lsan_register_root_region()
|
|
// - LSan will skip any inaccessible memory when scanning a root region. E.g.,
|
|
// if you map memory within a larger region that you have mprotect'ed, you can
|
|
// register the entire large region.
|
|
// - the implementation is not optimized for performance. This interface is
|
|
// intended to be used for a small number of relatively static regions.
|
|
void __lsan_register_root_region(const void *p, size_t size);
|
|
void __lsan_unregister_root_region(const void *p, size_t size);
|
|
|
|
// Check for leaks now. This function behaves identically to the default
|
|
// end-of-process leak check. In particular, it will terminate the process if
|
|
// leaks are found and the exitcode runtime flag is non-zero.
|
|
// Subsequent calls to this function will have no effect and end-of-process
|
|
// leak check will not run. Effectively, end-of-process leak check is moved to
|
|
// the time of first invocation of this function.
|
|
// By calling this function early during process shutdown, you can instruct
|
|
// LSan to ignore shutdown-only leaks which happen later on.
|
|
void __lsan_do_leak_check(void);
|
|
|
|
// Check for leaks now. Returns zero if no leaks have been found or if leak
|
|
// detection is disabled, non-zero otherwise.
|
|
// This function may be called repeatedly, e.g. to periodically check a
|
|
// long-running process. It prints a leak report if appropriate, but does not
|
|
// terminate the process. It does not affect the behavior of
|
|
// __lsan_do_leak_check() or the end-of-process leak check, and is not
|
|
// affected by them.
|
|
int __lsan_do_recoverable_leak_check(void);
|
|
|
|
// The user may optionally provide this function to disallow leak checking
|
|
// for the program it is linked into (if the return value is non-zero). This
|
|
// function must be defined as returning a constant value; any behavior beyond
|
|
// that is unsupported.
|
|
// To avoid dead stripping, you may need to define this function with
|
|
// __attribute__((used))
|
|
int __lsan_is_turned_off(void);
|
|
|
|
// This function may be optionally provided by user and should return
|
|
// a string containing LSan runtime options. See lsan_flags.inc for details.
|
|
const char *__lsan_default_options(void);
|
|
|
|
// This function may be optionally provided by the user and should return
|
|
// a string containing LSan suppressions.
|
|
const char *__lsan_default_suppressions(void);
|
|
#ifdef __cplusplus
|
|
} // extern "C"
|
|
|
|
namespace __lsan {
|
|
class ScopedDisabler {
|
|
public:
|
|
ScopedDisabler() { __lsan_disable(); }
|
|
~ScopedDisabler() { __lsan_enable(); }
|
|
};
|
|
} // namespace __lsan
|
|
#endif
|
|
|
|
#endif // SANITIZER_LSAN_INTERFACE_H
|