1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
|
/* GDB support for special malloc using mmap.
Copyright 1992 Free Software Foundation, Inc.
Contributed by Cygnus Support, using pieces from other GDB modules.
This file is part of GDB.
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This program 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 General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */
#include <stdio.h>
#include "defs.h"
#if defined (HAVE_MMAP)
/* Redefine the external visible symbols in gmalloc.c to be mmap versions */
#define free _mmap_free
#define malloc _mmap_malloc
#define realloc _mmap_realloc
#define valloc _mmap_valloc
#define _bytes_free _mmap__bytes_free
#define _bytes_used _mmap__bytes_used
#define _chunks_free _mmap__chunks_free
#define _chunks_used _mmap__chunks_used
#define _fraghead _mmap__fraghead
#define _heapbase _mmap__heapbase
#define _heapindex _mmap__heapindex
#define _heapinfo _mmap__heapinfo
#define _heaplimit _mmap__heaplimit
#define __default_morecore _mmap___default_morecore
#define __free _mmap___free
#define __free_hook _mmap___free_hook
#define __malloc_hook _mmap___malloc_hook
#define __malloc_initialized _mmap___malloc_initialized
#define __morecore _mmap___morecore
#define __realloc_hook _mmap___realloc_hook
/* Arrange that instead of calling sbrk() we call mmap_sbrk() */
#define sbrk mmap_sbrk
/* Now simply include the standard GNU malloc source, and all the
externally visible symbols will become _mmap_* versions, and
_mmap_sbrk will be called to get more core instead of sbrk. */
#include "gmalloc.c"
/* Like mmap_malloc but get error if no storage available. */
PTR
mmap_xmalloc (size)
long size;
{
register char *val = NULL;
/* Protect against gdb wanting to allocate zero bytes. */
if (size > 0)
{
if ((val = (char *) _mmap_malloc (size)) == NULL)
{
fatal ("virtual memory exhausted.", 0);
}
}
return (val);
}
/* Like mmap_realloc but get error if no storage available. */
PTR
mmap_xrealloc (ptr, size)
PTR ptr;
long size;
{
register char *val;
if ((val = (char *) _mmap_realloc (ptr, size)) == NULL)
{
fatal ("virtual memory exhausted.", 0);
}
return (val);
}
PTR
mmap_malloc (size)
long size;
{
return (_mmap_malloc (size));
}
PTR
mmap_realloc (ptr, size)
PTR ptr;
long size;
{
return (_mmap_realloc (ptr, size));
}
void
mmap_free (ptr)
PTR ptr;
{
_mmap_free (ptr);
}
#else /* !defined (HAVE_MMAP) */
static char *errmsg = "This version of gdb does not support dumpable state.";
PTR
mmap_malloc (size)
long size;
{
error (errmsg);
}
PTR
mmap_xmalloc (size)
long size;
{
error (errmsg);
}
PTR
mmap_realloc (ptr, size)
PTR ptr;
long size;
{
error (errmsg);
}
PTR
mmap_xrealloc (ptr, size)
PTR ptr;
long size;
{
error (errmsg);
}
void
mmap_free (ptr)
PTR ptr;
{
error (errmsg);
}
#endif /* HAVE_MMAP */
|