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