VirtualBox

source: vbox/trunk/src/VBox/Runtime/r3/alloc-ef.h@ 5285

Last change on this file since 5285 was 4071, checked in by vboxsync, 17 years ago

Biggest check-in ever. New source code headers for all (C) innotek files.

  • Property svn:eol-style set to native
  • Property svn:keywords set to Id
File size: 5.1 KB
Line 
1/* $Id: alloc-ef.h 4071 2007-08-07 17:07:59Z vboxsync $ */
2/** @file
3 * innotek Portable Runtime - Memory Allocation, electric fence.
4 */
5
6/*
7 * Copyright (C) 2006-2007 innotek GmbH
8 *
9 * This file is part of VirtualBox Open Source Edition (OSE), as
10 * available from http://www.virtualbox.org. This file is free software;
11 * you can redistribute it and/or modify it under the terms of the GNU
12 * General Public License as published by the Free Software Foundation,
13 * in version 2 as it comes in the "COPYING" file of the VirtualBox OSE
14 * distribution. VirtualBox OSE is distributed in the hope that it will
15 * be useful, but WITHOUT ANY WARRANTY of any kind.
16 */
17
18#ifndef ___alloc_ef_h
19#define ___alloc_ef_h
20
21/*******************************************************************************
22* Defined Constants And Macros *
23*******************************************************************************/
24#if defined(__DOXYGEN__)
25# define RTALLOC_USE_EFENCE
26# define RTALLOC_EFENCE_IN_FRONT
27# define RTALLOC_EFENCE_FREE_FILL 'f'
28#endif
29
30/** @def RTALLOC_USE_EFENCE
31 * If defined the electric fence put up for ALL allocations by RTMemAlloc(),
32 * RTMemAllocZ(), RTMemRealloc(), RTMemTmpAlloc() and RTMemTmpAllocZ().
33 */
34#if 0// defined(DEBUG_bird)
35# define RTALLOC_USE_EFENCE
36#endif
37
38/** @def RTALLOC_EFENCE_SIZE
39 * The size of the fence. This must be page aligned.
40 */
41#define RTALLOC_EFENCE_SIZE PAGE_SIZE
42
43/** @def RTALLOC_EFENCE_IN_FRONT
44 * Define this to put the fence up in front of the block.
45 * The default (when this isn't defined) is to up it up after the block.
46 */
47//# define RTALLOC_EFENCE_IN_FRONT
48
49/** @def RTALLOC_EFENCE_TRACE
50 * Define this to support actual free and reallocation of blocks.
51 */
52#define RTALLOC_EFENCE_TRACE
53
54/** @def RTALLOC_EFENCE_FREE_DELAYED
55 * This define will enable free() delay and protection of the freed data
56 * while it's being delayed. The value of RTALLOC_EFENCE_FREE_DELAYED defines
57 * the threshold of the delayed blocks.
58 * Delayed blocks does not consume any physical memory, only virtual address space.
59 * Requires RTALLOC_EFENCE_TRACE.
60 */
61#define RTALLOC_EFENCE_FREE_DELAYED (20 * _1M)
62
63/** @def RTALLOC_EFENCE_FREE_FILL
64 * This define will enable memset(,RTALLOC_EFENCE_FREE_FILL,)'ing the user memory
65 * in the block before freeing/decommitting it. This is useful in GDB since GDB
66 * appeares to be able to read the content of the page even after it's been
67 * decommitted.
68 * Requires RTALLOC_EFENCE_TRACE.
69 */
70#if defined(RT_OS_LINUX)
71# define RTALLOC_EFENCE_FREE_FILL 'f'
72#endif
73
74/** @def RTALLOC_EFENCE_FILLER
75 * This define will enable memset(,RTALLOC_EFENCE_FILLER,)'ing the allocated
76 * memory when the API doesn't require it to be zero'ed.
77 */
78#define RTALLOC_EFENCE_FILLER 0xef
79
80#if defined(__DOXYGEN__)
81/** @def RTALLOC_EFENCE_CPP
82 * This define will enable the new and delete wrappers.
83 */
84# define RTALLOC_EFENCE_CPP
85#endif
86
87
88
89/*******************************************************************************
90* Header Files *
91*******************************************************************************/
92#ifdef RT_OS_WINDOWS
93# include <Windows.h>
94#else
95# include <sys/mman.h>
96#endif
97#include <iprt/avl.h>
98#include <iprt/thread.h>
99
100
101/*******************************************************************************
102* Structures and Typedefs *
103*******************************************************************************/
104/**
105 * Allocation types.
106 */
107typedef enum RTMEMTYPE
108{
109 RTMEMTYPE_RTMEMALLOC,
110 RTMEMTYPE_RTMEMALLOCZ,
111 RTMEMTYPE_RTMEMREALLOC,
112 RTMEMTYPE_RTMEMFREE,
113
114 RTMEMTYPE_NEW,
115 RTMEMTYPE_NEW_ARRAY,
116 RTMEMTYPE_DELETE,
117 RTMEMTYPE_DELETE_ARRAY
118} RTMEMTYPE;
119
120#ifdef RTALLOC_EFENCE_TRACE
121/**
122 * Node tracking a memory allocation.
123 */
124typedef struct RTMEMBLOCK
125{
126 /** Avl node code, key is the user block pointer. */
127 AVLPVNODECORE Core;
128 /** Allocation type. */
129 RTMEMTYPE enmType;
130 /** The size of the block. */
131 size_t cb;
132 /** The return address of the allocator function. */
133 void *pvCaller;
134 /** Line number of the alloc call. */
135 unsigned iLine;
136 /** File from within the allocation was made. */
137 const char *pszFile;
138 /** Function from within the allocation was made. */
139 const char *pszFunction;
140} RTMEMBLOCK, *PRTMEMBLOCK;
141
142#endif
143
144
145/*******************************************************************************
146* Internal Functions *
147*******************************************************************************/
148__BEGIN_DECLS
149RTDECL(void *) rtMemAlloc(const char *pszOp, RTMEMTYPE enmType, size_t cb, void *pvCaller, unsigned iLine, const char *pszFile, const char *pszFunction);
150RTDECL(void *) rtMemRealloc(const char *pszOp, RTMEMTYPE enmType, void *pvOld, size_t cbNew, void *pvCaller, unsigned iLine, const char *pszFile, const char *pszFunction);
151RTDECL(void) rtMemFree(const char *pszOp, RTMEMTYPE enmType, void *pv, void *pvCaller, unsigned iLine, const char *pszFile, const char *pszFunction);
152__END_DECLS
153
154#endif
155
Note: See TracBrowser for help on using the repository browser.

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette