diff options
author | Evgeniy Stepanov <eugeni.stepanov@gmail.com> | 2014-05-21 09:02:13 +0000 |
---|---|---|
committer | Evgeniy Stepanov <eugeni.stepanov@gmail.com> | 2014-05-21 09:02:13 +0000 |
commit | 6f365cc753d8150ae694357281e4775ac6e365cf (patch) | |
tree | 9e5c94cfc525292635964f034f96dbbc255cefe2 /lib/msan/msan_chained_origin_depot.h | |
parent | 72a4588166670e397a15c4a97529c849dcb11b3f (diff) |
[msan] Chained origins re-design.
Generalize StackDepot and create a new specialized instance of it to
efficiently (i.e. without duplicating stack trace data) store the
origin history tree.
This reduces memory usage for chained origins roughly by an order of
magnitude.
Most importantly, this new design allows us to put two limits on
stored history data (exposed in MSAN_OPTIONS) that help avoid
exponential growth in used memory on certain workloads.
See comments in lib/msan/msan_origin.h for more details.
git-svn-id: https://llvm.org/svn/llvm-project/compiler-rt/trunk@209284 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/msan/msan_chained_origin_depot.h')
-rw-r--r-- | lib/msan/msan_chained_origin_depot.h | 26 |
1 files changed, 26 insertions, 0 deletions
diff --git a/lib/msan/msan_chained_origin_depot.h b/lib/msan/msan_chained_origin_depot.h new file mode 100644 index 000000000..db427b00d --- /dev/null +++ b/lib/msan/msan_chained_origin_depot.h @@ -0,0 +1,26 @@ +//===-- msan_chained_origin_depot.h --------------------------*- C++ -*-===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// +// +// A storage for chained origins. +//===----------------------------------------------------------------------===// +#ifndef MSAN_CHAINED_ORIGIN_DEPOT_H +#define MSAN_CHAINED_ORIGIN_DEPOT_H + +#include "sanitizer_common/sanitizer_common.h" + +namespace __msan { + +StackDepotStats *ChainedOriginDepotGetStats(); +bool ChainedOriginDepotPut(u32 here_id, u32 prev_id, u32 *new_id); +// Retrieves a stored stack trace by the id. +u32 ChainedOriginDepotGet(u32 id, u32 *other); + +} // namespace __msan + +#endif // MSAN_CHAINED_ORIGIN_DEPOT_H |