blob: 802934235e4a2729070b5d0c537988d6d0d2e7e1 [file] [log] [blame]
/* **********************************************************
* Copyright (c) 2012-2020 Google, Inc. All rights reserved.
* Copyright (c) 2008-2010 VMware, Inc. All rights reserved.
* **********************************************************/
/* Dr. Memory: the memory debugger
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation;
* version 2.1 of the License, and no later version.
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Library General Public License for more details.
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*/
/***************************************************************************
* leak.h: leak scanning
*/
#ifndef _LEAK_H_
#define _LEAK_H_ 1
#include "drmgr.h"
#ifdef STATISTICS
extern uint midchunk_postsize_ptrs;
extern uint midchunk_postnew_ptrs;
extern uint midchunk_postinheritance_ptrs;
extern uint midchunk_string_ptrs;
extern uint strings_not_pointers;
# ifdef WINDOWS
extern uint pointers_encoded;
extern uint encoded_pointers_scanned;
# endif
#endif
/**************************/
/* Must be provided by client */
void
client_found_leak(app_pc start, app_pc end, size_t indirect_bytes,
bool pre_us, bool reachable,
bool maybe_reachable, void *client_data,
bool count_reachable, bool show_reachable);
/**************************/
/* Must be called by client */
void
leak_init(bool have_defined_info,
bool check_leaks_on_destroy,
bool midchunk_new_ok,
bool midchunk_inheritance_ok,
bool midchunk_string_ok,
bool midchunk_size_ok,
bool show_reachable,
IF_WINDOWS_(bool check_encoded_pointers)
byte *(*next_defined_ptrsz)(byte *, byte *),
byte *(*end_of_defined_region)(byte *, byte *),
bool (*is_register_defined)(void *, reg_id_t));
void
leak_exit();
void
leak_module_load(void *drcontext, const module_data_t *info, bool loaded);
void
leak_module_unload(void *drcontext, const module_data_t *info);
void
leak_scan_for_leaks(bool at_exit);
/* User must call from client_handle_malloc() and client_handle_realloc() */
void
leak_handle_alloc(void *drcontext, app_pc base, size_t size);
#ifdef WINDOWS
/* User must call from client_remove_malloc_on_destroy() */
void
leak_remove_malloc_on_destroy(HANDLE heap, byte *start, byte *end);
#endif
#endif /* _LEAK_H_ */