aboutsummaryrefslogtreecommitdiff
path: root/gdb/mmap-alloc.c
blob: 5f8f0dc049bd42ba3b92662b1f2807fc3566254b (plain)
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 */