X-Git-Url: https://code.delx.au/gnu-emacs/blobdiff_plain/747d9d142f491daeec55df386d626915ddb3b5dc..6ce950f336909aa19d6c5ea6f3e1910b247f3d38:/src/ralloc.c diff --git a/src/ralloc.c b/src/ralloc.c index a484cb60cf..5f2b52fcc4 100644 --- a/src/ralloc.c +++ b/src/ralloc.c @@ -1,6 +1,6 @@ /* Block-relocating memory allocator. Copyright (C) 1993, 1995, 2000, 2001, 2002, 2003, 2004, - 2005, 2006, 2007, 2008 Free Software Foundation, Inc. + 2005, 2006, 2007, 2008, 2009, 2010 Free Software Foundation, Inc. This file is part of GNU Emacs. @@ -26,6 +26,7 @@ along with GNU Emacs. If not, see . */ #ifdef emacs #include +#include #include "lisp.h" /* Needed for VALBITS. */ #include "blockinput.h" @@ -36,14 +37,9 @@ along with GNU Emacs. If not, see . */ typedef POINTER_TYPE *POINTER; typedef size_t SIZE; -/* Declared in dispnew.c, this version doesn't screw up if regions - overlap. */ - -extern void safe_bcopy (); - #ifdef DOUG_LEA_MALLOC #define M_TOP_PAD -2 -extern int mallopt (); +extern int mallopt (int, int); #else /* not DOUG_LEA_MALLOC */ #ifndef SYSTEM_MALLOC extern size_t __malloc_extra_blocks; @@ -60,9 +56,6 @@ typedef void *POINTER; #include #include -#define safe_bcopy(x, y, z) memmove (y, x, z) -#define bzero(x, len) memset (x, 0, len) - #endif /* not emacs */ @@ -80,13 +73,13 @@ typedef void *POINTER; static int r_alloc_initialized = 0; -static void r_alloc_init (); +static void r_alloc_init (void); /* Declarations for working with the malloc, ralloc, and system breaks. */ /* Function to set the real break value. */ -POINTER (*real_morecore) (); +POINTER (*real_morecore) (long int); /* The break value, as seen by malloc. */ static POINTER virtual_break_value; @@ -118,7 +111,7 @@ static int extra_bytes; from the system. */ #ifndef SYSTEM_MALLOC -extern POINTER (*__morecore) (); +extern POINTER (*__morecore) (long int); #endif @@ -209,8 +202,7 @@ static int r_alloc_freeze_level; /* Find the heap that ADDRESS falls within. */ static heap_ptr -find_heap (address) - POINTER address; +find_heap (POINTER address) { heap_ptr heap; @@ -242,9 +234,7 @@ find_heap (address) allocate the memory. */ static POINTER -obtain (address, size) - POINTER address; - SIZE size; +obtain (POINTER address, SIZE size) { heap_ptr heap; SIZE already_available; @@ -325,7 +315,7 @@ obtain (address, size) it can also eliminate the last heap entirely. */ static void -relinquish () +relinquish (void) { register heap_ptr h; long excess = 0; @@ -384,7 +374,7 @@ relinquish () above where malloc gets space. */ long -r_alloc_size_in_use () +r_alloc_size_in_use (void) { return (char *) break_value - (char *) virtual_break_value; } @@ -395,8 +385,7 @@ r_alloc_size_in_use () to that block. */ static bloc_ptr -find_bloc (ptr) - POINTER *ptr; +find_bloc (POINTER *ptr) { register bloc_ptr p = first_bloc; @@ -421,8 +410,7 @@ find_bloc (ptr) memory for the new block. */ static bloc_ptr -get_bloc (size) - SIZE size; +get_bloc (SIZE size) { register bloc_ptr new_bloc; register heap_ptr heap; @@ -477,10 +465,7 @@ get_bloc (size) Do not touch the contents of blocs or break_value. */ static int -relocate_blocs (bloc, heap, address) - bloc_ptr bloc; - heap_ptr heap; - POINTER address; +relocate_blocs (bloc_ptr bloc, heap_ptr heap, POINTER address) { register bloc_ptr b = bloc; @@ -534,44 +519,12 @@ relocate_blocs (bloc, heap, address) return 1; } - -/* Reorder the bloc BLOC to go before bloc BEFORE in the doubly linked list. - This is necessary if we put the memory of space of BLOC - before that of BEFORE. */ - -static void -reorder_bloc (bloc, before) - bloc_ptr bloc, before; -{ - bloc_ptr prev, next; - - /* Splice BLOC out from where it is. */ - prev = bloc->prev; - next = bloc->next; - - if (prev) - prev->next = next; - if (next) - next->prev = prev; - - /* Splice it in before BEFORE. */ - prev = before->prev; - - if (prev) - prev->next = bloc; - bloc->prev = prev; - - before->prev = bloc; - bloc->next = before; -} /* Update the records of which heaps contain which blocs, starting with heap HEAP and bloc BLOC. */ static void -update_heap_bloc_correspondence (bloc, heap) - bloc_ptr bloc; - heap_ptr heap; +update_heap_bloc_correspondence (bloc_ptr bloc, heap_ptr heap) { register bloc_ptr b; @@ -633,9 +586,7 @@ update_heap_bloc_correspondence (bloc, heap) that come after BLOC in memory. */ static int -resize_bloc (bloc, size) - bloc_ptr bloc; - SIZE size; +resize_bloc (bloc_ptr bloc, SIZE size) { register bloc_ptr b; heap_ptr heap; @@ -688,7 +639,7 @@ resize_bloc (bloc, size) } else { - safe_bcopy (b->data, b->new_data, b->size); + memmove (b->new_data, b->data, b->size); *b->variable = b->data = b->new_data; } } @@ -699,8 +650,8 @@ resize_bloc (bloc, size) } else { - safe_bcopy (bloc->data, bloc->new_data, old_size); - bzero ((char *) bloc->new_data + old_size, size - old_size); + memmove (bloc->new_data, bloc->data, old_size); + memset (bloc->new_data + old_size, 0, size - old_size); *bloc->variable = bloc->data = bloc->new_data; } } @@ -715,7 +666,7 @@ resize_bloc (bloc, size) } else { - safe_bcopy (b->data, b->new_data, b->size); + memmove (b->new_data, b->data, b->size); *b->variable = b->data = b->new_data; } } @@ -732,8 +683,7 @@ resize_bloc (bloc, size) This may return space to the system. */ static void -free_bloc (bloc) - bloc_ptr bloc; +free_bloc (bloc_ptr bloc) { heap_ptr heap = bloc->heap; @@ -799,8 +749,7 @@ free_bloc (bloc) GNU malloc package. */ POINTER -r_alloc_sbrk (size) - long size; +r_alloc_sbrk (long int size) { register bloc_ptr b; POINTER address; @@ -870,7 +819,7 @@ r_alloc_sbrk (size) header. */ for (b = last_bloc; b != NIL_BLOC; b = b->prev) { - safe_bcopy (b->data, b->new_data, b->size); + memmove (b->new_data, b->data, b->size); *b->variable = b->data = b->new_data; } @@ -897,7 +846,7 @@ r_alloc_sbrk (size) last_heap = first_heap; } - bzero (address, size); + memset (address, 0, size); } else /* size < 0 */ { @@ -916,7 +865,7 @@ r_alloc_sbrk (size) for (b = first_bloc; b != NIL_BLOC; b = b->next) { - safe_bcopy (b->data, b->new_data, b->size); + memmove (b->new_data, b->data, b->size); *b->variable = b->data = b->new_data; } } @@ -951,9 +900,7 @@ r_alloc_sbrk (size) return zero. */ POINTER -r_alloc (ptr, size) - POINTER *ptr; - SIZE size; +r_alloc (POINTER *ptr, SIZE size) { register bloc_ptr new_bloc; @@ -976,8 +923,7 @@ r_alloc (ptr, size) Store 0 in *PTR to show there's no block allocated. */ void -r_alloc_free (ptr) - register POINTER *ptr; +r_alloc_free (register POINTER *ptr) { register bloc_ptr dead_bloc; @@ -1011,9 +957,7 @@ r_alloc_free (ptr) return zero. */ POINTER -r_re_alloc (ptr, size) - POINTER *ptr; - SIZE size; +r_re_alloc (POINTER *ptr, SIZE size) { register bloc_ptr bloc; @@ -1074,8 +1018,7 @@ r_re_alloc (ptr, size) malloc must return a null pointer. */ void -r_alloc_freeze (size) - long size; +r_alloc_freeze (long int size) { if (! r_alloc_initialized) r_alloc_init (); @@ -1092,7 +1035,7 @@ r_alloc_freeze (size) } void -r_alloc_thaw () +r_alloc_thaw (void) { if (! r_alloc_initialized) @@ -1102,7 +1045,7 @@ r_alloc_thaw () abort (); /* This frees all unused blocs. It is not too inefficient, as the resize - and bcopy is done only once. Afterwards, all unreferenced blocs are + and memcpy is done only once. Afterwards, all unreferenced blocs are already shrunk to zero size. */ if (!r_alloc_freeze_level) { @@ -1121,7 +1064,7 @@ r_alloc_thaw () /* Reinitialize the morecore hook variables after restarting a dumped Emacs. This is needed when using Doug Lea's malloc from GNU libc. */ void -r_alloc_reinit () +r_alloc_reinit (void) { /* Only do this if the hook has been reset, so that we don't get an infinite loop, in case Emacs was linked statically. */ @@ -1234,8 +1177,7 @@ r_alloc_check () is checked to ensure that memory corruption does not occur due to misuse. */ void -r_alloc_reset_variable (old, new) - POINTER *old, *new; +r_alloc_reset_variable (POINTER *old, POINTER *new) { bloc_ptr bloc = first_bloc; @@ -1265,7 +1207,7 @@ r_alloc_reset_variable (old, new) /* Initialize various things for memory allocation. */ static void -r_alloc_init () +r_alloc_init (void) { if (r_alloc_initialized) return; @@ -1313,8 +1255,8 @@ r_alloc_init () even though it is after the sbrk value. */ /* Doubly true, with the additional call that explicitly adds the rest of that page to the address space. */ - bzero (first_heap->start, - (char *) first_heap->end - (char *) first_heap->start); + memset (first_heap->start, 0, + (char *) first_heap->end - (char *) first_heap->start); virtual_break_value = break_value = first_heap->bloc_start = first_heap->end; #endif