/* 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 #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 */