blob: 869e401ca5647ee237f9c4f7af6503987b36e8ec [file] [edit]
/* **********************************************************
* Copyright (c) 2011-2024 Google, Inc. All rights reserved.
* Copyright (c) 2007-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.
*/
#ifndef _DRMEMORY_H_
#define _DRMEMORY_H_ 1
#include "drmgr.h"
#include "client_per_thread.h"
#include "options.h"
#include "utils.h"
/***************************************************************************
* PARAMETERS
*/
extern client_id_t client_id;
/* instrumentation ordering */
enum {
/* replace first, then app2app */
#if 0
DRMGR_PRIORITY_APP2APP_DRWRAP = -500, /* from drwrap.h */
#endif
DRMGR_PRIORITY_APP2APP_ANNOTATE = -100,
#if 0
DRMGR_PRIORITY_INSERT_CLS = 0, /* from drmgr.h */
#endif
#if 0
/* we need our alloc wrapping to go before main instru, so that it
* has access to restored app registers
*/
DRMGR_PRIORITY_INSERT_DRWRAP = 500, /* from drwrap.h */
#endif
/* b/c we're using the 4-at-once interface we have the same priority
* for string loop app2app, annotation app2app, and main insertion.
* we want main insertion to g
*/
DRMGR_PRIORITY_INSTRU = 1000,
/* we want to insert clean calls after the main instru to avoid reachability
* issues w/ main instru that jmps to restore code before app instr
*/
DRMGR_PRIORITY_INSERT_ANNOTATE = 2000,
DRMGR_PRIORITY_INSERT_PERTURB = 2010,
#if 0
/* we need our alloc wrapping to go after CLS tracking */
DRMGR_PRIORITY_INSERT_ALLOC = 2020, /* from alloc.h */
#endif
};
/***************************************************************************
* DATA SHARED ACROSS MODULES
*/
extern char logsubdir[MAXIMUM_PATH];
#define RESULTS_FNAME "results.txt"
#define RESULTS_POTENTIAL_FNAME "potential_errors.txt"
#define POTENTIAL_PREFIX "potential"
#define POTENTIAL_PREFIX_CAP "Potential"
#define POTENTIAL_PREFIX_ALLCAP "POTENTIAL"
extern file_t f_results;
extern file_t f_suppress;
extern file_t f_missing_symbols;
extern file_t f_potential;
#ifdef WINDOWS
extern app_pc ntdll_base;
extern app_pc ntdll_end;
#endif
extern app_pc app_base;
extern app_pc app_end;
extern char app_path[MAXIMUM_PATH];
#ifdef STATISTICS
void
dump_statistics(void);
extern uint num_nudges;
#endif /* STATISTICS */
bool
obtain_configfile_path(char *buf DR_PARAM_OUT, size_t bufsz, const char *fname);
#ifdef UNIX
/* for strchr in linux, which will bring in libc: FIXME */
# include <string.h>
bool
is_in_client_or_DR_lib(app_pc pc);
#endif /* UNIX */
/* We can't get app xsp at init time so we call this on 1st bb */
void
set_initial_layout(void);
byte *
mmap_walk(app_pc start, size_t size,
IF_WINDOWS_(MEMORY_BASIC_INFORMATION *mbi_start) bool add);
#ifdef WINDOWS
void
set_teb_initial_shadow(TEB *teb);
#endif
#endif /* _DRMEMORY_H_ */