blob: 1af76ec0ed4a9b5fbc56d8427e6d8f52ea2d4522 [file] [log] [blame]
njn717cde52005-05-10 02:47:21 +00001
2/*--------------------------------------------------------------------*/
3/*--- High-level memory management. pub_core_mallocfree.h ---*/
4/*--------------------------------------------------------------------*/
5
6/*
7 This file is part of Valgrind, a dynamic binary instrumentation
8 framework.
9
sewardj9eecbbb2010-05-03 21:37:12 +000010 Copyright (C) 2000-2010 Julian Seward
njn717cde52005-05-10 02:47:21 +000011 jseward@acm.org
12
13 This program is free software; you can redistribute it and/or
14 modify it under the terms of the GNU General Public License as
15 published by the Free Software Foundation; either version 2 of the
16 License, or (at your option) any later version.
17
18 This program is distributed in the hope that it will be useful, but
19 WITHOUT ANY WARRANTY; without even the implied warranty of
20 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
21 General Public License for more details.
22
23 You should have received a copy of the GNU General Public License
24 along with this program; if not, write to the Free Software
25 Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
26 02111-1307, USA.
27
28 The GNU General Public License is contained in the file COPYING.
29*/
30
31#ifndef __PUB_CORE_MALLOCFREE_H
32#define __PUB_CORE_MALLOCFREE_H
33
34#include "pub_tool_mallocfree.h"
35
36//--------------------------------------------------------------------
37// PURPOSE: high-level memory allocation (malloc/free), for the core and
38// tools.
39//--------------------------------------------------------------------
40
41/* Allocation arenas.
42
43 CORE for the core's general use.
44 TOOL for the tool to use (and the only one it uses).
sewardjb8b79ad2008-03-03 01:35:41 +000045 DINFO for debug info (symbols, line #s, CFI, etc) storage.
njn717cde52005-05-10 02:47:21 +000046 CLIENT for the client's mallocs/frees, if the tool replaces glibc's
47 malloc() et al -- redzone size is chosen by the tool.
48 DEMANGLE for the C++ demangler.
49 EXECTXT for storing ExeContexts.
50 ERRORS for storing CoreErrors.
sewardjcd0309b2005-10-18 02:20:18 +000051 TTAUX for storing TT/TC auxiliary structures (address range
52 equivalence classes).
njn717cde52005-05-10 02:47:21 +000053
54 When adding a new arena, remember also to add it to ensure_mm_init().
55*/
56typedef Int ArenaId;
57
sewardjcd0309b2005-10-18 02:20:18 +000058#define VG_N_ARENAS 8
njn717cde52005-05-10 02:47:21 +000059
60#define VG_AR_CORE 0
61#define VG_AR_TOOL 1
sewardjb8b79ad2008-03-03 01:35:41 +000062#define VG_AR_DINFO 2
njn717cde52005-05-10 02:47:21 +000063#define VG_AR_CLIENT 3
64#define VG_AR_DEMANGLE 4
65#define VG_AR_EXECTXT 5
66#define VG_AR_ERRORS 6
sewardjcd0309b2005-10-18 02:20:18 +000067#define VG_AR_TTAUX 7
njn717cde52005-05-10 02:47:21 +000068
69// This is both the minimum payload size of a malloc'd block, and its
70// minimum alignment. Must be a power of 2 greater than 4, and should be
71// greater than 8.
njn88d560f2009-05-21 03:36:21 +000072#if defined(VGP_x86_linux) || \
sewardj59570ff2010-01-01 11:59:33 +000073 defined(VGP_arm_linux)
njn88d560f2009-05-21 03:36:21 +000074# define VG_MIN_MALLOC_SZB 8
njnf76d27a2009-05-28 01:53:07 +000075// Nb: We always use 16 bytes for Darwin, even on 32-bits, so it can be used
76// for any AltiVec- or SSE-related type. This matches the Darwin libc.
sewardj11684aa2011-04-27 23:25:15 +000077// Also, use 16 bytes for any PPC variant, since 16 is required to make
78// Altiveccery work right.
njn88d560f2009-05-21 03:36:21 +000079#elif defined(VGP_amd64_linux) || \
sewardj11684aa2011-04-27 23:25:15 +000080 defined(VGP_ppc32_linux) || \
njn88d560f2009-05-21 03:36:21 +000081 defined(VGP_ppc64_linux) || \
sewardjb5b87402011-03-07 16:05:35 +000082 defined(VGP_s390x_linux) || \
njnf76d27a2009-05-28 01:53:07 +000083 defined(VGP_ppc64_aix5) || \
sewardj59570ff2010-01-01 11:59:33 +000084 defined(VGP_ppc32_aix5) || \
njnf76d27a2009-05-28 01:53:07 +000085 defined(VGP_x86_darwin) || \
86 defined(VGP_amd64_darwin)
njn88d560f2009-05-21 03:36:21 +000087# define VG_MIN_MALLOC_SZB 16
88#else
89# error Unknown platform
90#endif
91
njn088bfb42005-08-17 05:01:37 +000092/* This struct definition MUST match the system one. */
93/* SVID2/XPG mallinfo structure */
94struct vg_mallinfo {
95 int arena; /* total space allocated from system */
96 int ordblks; /* number of non-inuse chunks */
97 int smblks; /* unused -- always zero */
98 int hblks; /* number of mmapped regions */
99 int hblkhd; /* total space in mmapped regions */
100 int usmblks; /* unused -- always zero */
101 int fsmblks; /* unused -- always zero */
102 int uordblks; /* total allocated space */
103 int fordblks; /* total non-inuse space */
104 int keepcost; /* top-most, releasable (via malloc_trim) space */
105};
106
sewardj9c606bd2008-09-18 18:12:50 +0000107extern void* VG_(arena_malloc) ( ArenaId arena, HChar* cc, SizeT nbytes );
njn717cde52005-05-10 02:47:21 +0000108extern void VG_(arena_free) ( ArenaId arena, void* ptr );
sewardj9c606bd2008-09-18 18:12:50 +0000109extern void* VG_(arena_calloc) ( ArenaId arena, HChar* cc,
njn717cde52005-05-10 02:47:21 +0000110 SizeT nmemb, SizeT bytes_per_memb );
sewardj9c606bd2008-09-18 18:12:50 +0000111extern void* VG_(arena_realloc) ( ArenaId arena, HChar* cc,
112 void* ptr, SizeT size );
113extern void* VG_(arena_memalign)( ArenaId aid, HChar* cc,
114 SizeT req_alignB, SizeT req_pszB );
115extern Char* VG_(arena_strdup) ( ArenaId aid, HChar* cc,
116 const Char* s);
njn717cde52005-05-10 02:47:21 +0000117
njn8b140de2009-02-17 04:31:18 +0000118extern SizeT VG_(arena_malloc_usable_size) ( ArenaId aid, void* payload );
119
njn088bfb42005-08-17 05:01:37 +0000120extern void VG_(mallinfo) ( ThreadId tid, struct vg_mallinfo* mi );
121
njn717cde52005-05-10 02:47:21 +0000122extern void VG_(sanity_check_malloc_all) ( void );
123
124extern void VG_(print_all_arena_stats) ( void );
125
sewardj9c606bd2008-09-18 18:12:50 +0000126extern void VG_(print_arena_cc_analysis) ( void );
127
njn717cde52005-05-10 02:47:21 +0000128#endif // __PUB_CORE_MALLOCFREE_H
129
130/*--------------------------------------------------------------------*/
131/*--- end ---*/
132/*--------------------------------------------------------------------*/