blob: 305c8ec55730ffe649cd29797e3b0a635df9572a [file] [log] [blame]
njnc9539842002-10-02 13:26:35 +00001
njn25e49d8e72002-09-23 09:36:25 +00002/*--------------------------------------------------------------------*/
nethercote137bc552003-11-14 17:47:54 +00003/*--- Default panicky definitions of template functions that tools ---*/
njn25e49d8e72002-09-23 09:36:25 +00004/*--- should override. ---*/
5/*--- vg_defaults.c ---*/
6/*--------------------------------------------------------------------*/
7
8/*
njnc9539842002-10-02 13:26:35 +00009 This file is part of Valgrind, an extensible x86 protected-mode
10 emulator for monitoring program execution on x86-Unixes.
njn25e49d8e72002-09-23 09:36:25 +000011
nethercotebb1c9912004-01-04 16:43:23 +000012 Copyright (C) 2000-2004 Nicholas Nethercote
njn25e49d8e72002-09-23 09:36:25 +000013 njn25@cam.ac.uk
14
15 This program is free software; you can redistribute it and/or
16 modify it under the terms of the GNU General Public License as
17 published by the Free Software Foundation; either version 2 of the
18 License, or (at your option) any later version.
19
20 This program is distributed in the hope that it will be useful, but
21 WITHOUT ANY WARRANTY; without even the implied warranty of
22 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
23 General Public License for more details.
24
25 You should have received a copy of the GNU General Public License
26 along with this program; if not, write to the Free Software
27 Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
28 02111-1307, USA.
29
30 The GNU General Public License is contained in the file COPYING.
31*/
32
33
34/* These functions aren't intended to be run. Replacement functions used by
nethercote137bc552003-11-14 17:47:54 +000035 * the chosen tool are substituted by compiling the tool into a .so and
njn25e49d8e72002-09-23 09:36:25 +000036 * LD_PRELOADing it. Nasty :) */
37
38#include "vg_include.h"
39
40/* ---------------------------------------------------------------------
nethercote137bc552003-11-14 17:47:54 +000041 Error messages (for malformed tools)
njn25e49d8e72002-09-23 09:36:25 +000042 ------------------------------------------------------------------ */
43
nethercote137bc552003-11-14 17:47:54 +000044/* If the tool fails to define one or more of the required functions,
njn25e49d8e72002-09-23 09:36:25 +000045 * make it very clear what went wrong! */
46
fitzhardinge98abfc72003-12-16 02:05:15 +000047__attribute__ ((noreturn))
48void VG_(missing_tool_func) ( const Char* fn )
njn25e49d8e72002-09-23 09:36:25 +000049{
50 VG_(printf)(
nethercote137bc552003-11-14 17:47:54 +000051 "\nTool error:\n"
52 " The tool you have selected is missing the function `%s',\n"
njn25e49d8e72002-09-23 09:36:25 +000053 " which is required.\n\n",
54 fn);
nethercote137bc552003-11-14 17:47:54 +000055 VG_(skin_panic)("Missing tool function");
njn25e49d8e72002-09-23 09:36:25 +000056}
57
58static __attribute__ ((noreturn))
daywalker3222e0a2003-09-18 01:39:50 +000059void malloc_panic ( const Char* fn )
njn3e884182003-04-15 13:03:23 +000060{
61 VG_(printf)(
nethercote137bc552003-11-14 17:47:54 +000062 "\nTool error:\n"
63 " The tool you have selected is missing the function `%s'\n"
njn3e884182003-04-15 13:03:23 +000064 " required because it is replacing malloc() et al.\n\n",
65 fn);
nethercote137bc552003-11-14 17:47:54 +000066 VG_(skin_panic)("Missing tool function");
njn3e884182003-04-15 13:03:23 +000067}
68
njn308955f2003-05-21 10:48:24 +000069#define MALLOC(proto) \
70__attribute__((weak)) \
71proto \
72{ \
73 malloc_panic(__PRETTY_FUNCTION__); \
74}
75
76/* ---------------------------------------------------------------------
77 Default functions
78 ------------------------------------------------------------------ */
79
njn308955f2003-05-21 10:48:24 +000080/*------------------------------------------------------------*/
81/*--- Replacing malloc et al ---*/
82/*------------------------------------------------------------*/
83
84/* Default redzone for CLIENT arena of Valgrind's malloc() is 4 bytes */
85__attribute__ ((weak))
86UInt VG_(vg_malloc_redzone_szB) = 4;
87
88Bool VG_(sk_malloc_called_by_scheduler) = False;
89
nethercote137bc552003-11-14 17:47:54 +000090/* If the tool hasn't replaced malloc(), this one can be called from the
njn3e884182003-04-15 13:03:23 +000091 scheduler, for the USERREQ__MALLOC user request used by vg_libpthread.c.
92 (Nb: it cannot call glibc's malloc().) The lock variable ensures that the
93 scheduler is the only place this can be called from; this ensures that a
nethercote137bc552003-11-14 17:47:54 +000094 malloc()-replacing tool cannot forget to implement SK_(malloc)() or
njn3e884182003-04-15 13:03:23 +000095 SK_(free)(). */
96__attribute__ ((weak))
njn72718642003-07-24 08:45:32 +000097void* SK_(malloc)( Int size )
njn3e884182003-04-15 13:03:23 +000098{
99 if (VG_(sk_malloc_called_by_scheduler))
100 return VG_(cli_malloc)(4, size);
101 else
njn308955f2003-05-21 10:48:24 +0000102 malloc_panic(__PRETTY_FUNCTION__);
njn3e884182003-04-15 13:03:23 +0000103}
104
105__attribute__ ((weak))
njn72718642003-07-24 08:45:32 +0000106void SK_(free)( void* p )
njn3e884182003-04-15 13:03:23 +0000107{
108 /* see comment for SK_(malloc)() above */
109 if (VG_(sk_malloc_called_by_scheduler))
110 VG_(cli_free)(p);
111 else
njn308955f2003-05-21 10:48:24 +0000112 malloc_panic(__PRETTY_FUNCTION__);
njn3e884182003-04-15 13:03:23 +0000113}
114
njn25e49d8e72002-09-23 09:36:25 +0000115/*--------------------------------------------------------------------*/
116/*--- end vg_defaults.c ---*/
117/*--------------------------------------------------------------------*/