1e1dd3c287ba836281de0197670018bd9bbfbd62bIliyan Malchev/*
263860cb8fd1adf3f679b9b4ad876323a8d65cd9dChristopher Ferris * Copyright (C) 2015 The Android Open Source Project
3e1dd3c287ba836281de0197670018bd9bbfbd62bIliyan Malchev * All rights reserved.
4e1dd3c287ba836281de0197670018bd9bbfbd62bIliyan Malchev *
5e1dd3c287ba836281de0197670018bd9bbfbd62bIliyan Malchev * Redistribution and use in source and binary forms, with or without
6e1dd3c287ba836281de0197670018bd9bbfbd62bIliyan Malchev * modification, are permitted provided that the following conditions
7e1dd3c287ba836281de0197670018bd9bbfbd62bIliyan Malchev * are met:
8e1dd3c287ba836281de0197670018bd9bbfbd62bIliyan Malchev *  * Redistributions of source code must retain the above copyright
9e1dd3c287ba836281de0197670018bd9bbfbd62bIliyan Malchev *    notice, this list of conditions and the following disclaimer.
10e1dd3c287ba836281de0197670018bd9bbfbd62bIliyan Malchev *  * Redistributions in binary form must reproduce the above copyright
11e1dd3c287ba836281de0197670018bd9bbfbd62bIliyan Malchev *    notice, this list of conditions and the following disclaimer in
12e1dd3c287ba836281de0197670018bd9bbfbd62bIliyan Malchev *    the documentation and/or other materials provided with the
13e1dd3c287ba836281de0197670018bd9bbfbd62bIliyan Malchev *    distribution.
14e1dd3c287ba836281de0197670018bd9bbfbd62bIliyan Malchev *
15e1dd3c287ba836281de0197670018bd9bbfbd62bIliyan Malchev * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
16e1dd3c287ba836281de0197670018bd9bbfbd62bIliyan Malchev * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
17e1dd3c287ba836281de0197670018bd9bbfbd62bIliyan Malchev * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
18e1dd3c287ba836281de0197670018bd9bbfbd62bIliyan Malchev * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
19e1dd3c287ba836281de0197670018bd9bbfbd62bIliyan Malchev * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
20e1dd3c287ba836281de0197670018bd9bbfbd62bIliyan Malchev * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
21e1dd3c287ba836281de0197670018bd9bbfbd62bIliyan Malchev * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
22e1dd3c287ba836281de0197670018bd9bbfbd62bIliyan Malchev * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
23e1dd3c287ba836281de0197670018bd9bbfbd62bIliyan Malchev * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
24e1dd3c287ba836281de0197670018bd9bbfbd62bIliyan Malchev * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
25e1dd3c287ba836281de0197670018bd9bbfbd62bIliyan Malchev * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
26e1dd3c287ba836281de0197670018bd9bbfbd62bIliyan Malchev * SUCH DAMAGE.
27e1dd3c287ba836281de0197670018bd9bbfbd62bIliyan Malchev */
28e1dd3c287ba836281de0197670018bd9bbfbd62bIliyan Malchev
2963860cb8fd1adf3f679b9b4ad876323a8d65cd9dChristopher Ferris#ifndef DEBUG_MALLOC_BACKTRACEDATA_H
3063860cb8fd1adf3f679b9b4ad876323a8d65cd9dChristopher Ferris#define DEBUG_MALLOC_BACKTRACEDATA_H
31e1dd3c287ba836281de0197670018bd9bbfbd62bIliyan Malchev
321e980b6bc8315d00a07312b25486531247abd98cElliott Hughes#include <stdint.h>
33e1dd3c287ba836281de0197670018bd9bbfbd62bIliyan Malchev
3463860cb8fd1adf3f679b9b4ad876323a8d65cd9dChristopher Ferris#include <private/bionic_macros.h>
351e980b6bc8315d00a07312b25486531247abd98cElliott Hughes
3663860cb8fd1adf3f679b9b4ad876323a8d65cd9dChristopher Ferris// Forward declarations.
3763860cb8fd1adf3f679b9b4ad876323a8d65cd9dChristopher Ferrisstruct Config;
3863860cb8fd1adf3f679b9b4ad876323a8d65cd9dChristopher Ferris
3963860cb8fd1adf3f679b9b4ad876323a8d65cd9dChristopher Ferrisclass BacktraceData {
4063860cb8fd1adf3f679b9b4ad876323a8d65cd9dChristopher Ferris public:
4163860cb8fd1adf3f679b9b4ad876323a8d65cd9dChristopher Ferris  BacktraceData(const Config& config, size_t* offset);
4263860cb8fd1adf3f679b9b4ad876323a8d65cd9dChristopher Ferris  virtual ~BacktraceData() = default;
4363860cb8fd1adf3f679b9b4ad876323a8d65cd9dChristopher Ferris
4463860cb8fd1adf3f679b9b4ad876323a8d65cd9dChristopher Ferris  bool Initialize(const Config& config);
4563860cb8fd1adf3f679b9b4ad876323a8d65cd9dChristopher Ferris
4663860cb8fd1adf3f679b9b4ad876323a8d65cd9dChristopher Ferris  inline size_t alloc_offset() { return alloc_offset_; }
4763860cb8fd1adf3f679b9b4ad876323a8d65cd9dChristopher Ferris
4863860cb8fd1adf3f679b9b4ad876323a8d65cd9dChristopher Ferris  bool enabled() { return enabled_; }
4963860cb8fd1adf3f679b9b4ad876323a8d65cd9dChristopher Ferris  void set_enabled(bool enabled) { enabled_ = enabled; }
5063860cb8fd1adf3f679b9b4ad876323a8d65cd9dChristopher Ferris
5163860cb8fd1adf3f679b9b4ad876323a8d65cd9dChristopher Ferris private:
5263860cb8fd1adf3f679b9b4ad876323a8d65cd9dChristopher Ferris  size_t alloc_offset_ = 0;
5363860cb8fd1adf3f679b9b4ad876323a8d65cd9dChristopher Ferris
5463860cb8fd1adf3f679b9b4ad876323a8d65cd9dChristopher Ferris  volatile bool enabled_ = false;
5563860cb8fd1adf3f679b9b4ad876323a8d65cd9dChristopher Ferris
5663860cb8fd1adf3f679b9b4ad876323a8d65cd9dChristopher Ferris  DISALLOW_COPY_AND_ASSIGN(BacktraceData);
5763860cb8fd1adf3f679b9b4ad876323a8d65cd9dChristopher Ferris};
5863860cb8fd1adf3f679b9b4ad876323a8d65cd9dChristopher Ferris
5963860cb8fd1adf3f679b9b4ad876323a8d65cd9dChristopher Ferris#endif // DEBUG_MALLOC_BACKTRACEDATA_H
60