mirror of
https://sourceware.org/git/binutils-gdb.git
synced 2024-11-27 03:51:15 +08:00
160 lines
3.3 KiB
C
160 lines
3.3 KiB
C
|
/* 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 "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 */
|