X-Git-Url: http://git.chise.org/gitweb/?p=chise%2Fxemacs-chise.git.1;a=blobdiff_plain;f=src%2Fsheap.c;h=8c6b1ca454822bacfc8f8e583abba1bdaaa1abdd;hp=1c389b5c4757df69ea17dac99c6855824433271d;hb=8ba3626da629f1b4ecafae24c85f3d0cb3bf8b8e;hpb=976b002b16336930724ae22476014583ad022e7d diff --git a/src/sheap.c b/src/sheap.c index 1c389b5..8c6b1ca 100644 --- a/src/sheap.c +++ b/src/sheap.c @@ -19,13 +19,12 @@ Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.*/ #include -#include #include "lisp.h" -#include + #include #include -#define STATIC_HEAP_BASE 0x600000 +#define STATIC_HEAP_BASE 0x800000 #define STATIC_HEAP_SLOP 0x40000 #define STATIC_HEAP_SIZE \ (STATIC_HEAP_BASE + SHEAP_ADJUSTMENT + STATIC_HEAP_SLOP) @@ -41,6 +40,7 @@ unsigned long static_heap_size=STATIC_HEAP_SIZE; int static_heap_initialized=0; int static_heap_dumped=0; +void* more_static_core ( ptrdiff_t increment ); void* more_static_core ( ptrdiff_t increment ) { int size = (int) increment; @@ -59,7 +59,7 @@ void* more_static_core ( ptrdiff_t increment ) static_heap_ptr=static_heap_base; static_heap_size=STATIC_HEAP_SIZE - (static_heap_base-static_heap_buffer); -#ifdef __CYGWIN32__ +#ifdef CYGWIN sbrk(BLOCKSIZE); /* force space for fork to work */ #endif static_heap_initialized=1; @@ -81,17 +81,16 @@ void* more_static_core ( ptrdiff_t increment ) if (static_heap_ptr + size >= static_heap_base + static_heap_size) { printf( - -"\nRequested %d bytes, static heap exhausted! base is %p, current ptr -is %p. You have exhausted the static heap. - -If you are simply trying to compile, remove sheap-adjust.h -and recompile from the top level. If this doesn't -work then STATIC_HEAP_SLOP (defined in this file) is too small. - -If you want to run temacs, change SHEAP_ADJUSTMENT in sheap-adjust.h -to 0 or a +ve number. Generally you should *not* try to run temacs -with a static heap, you should dump first.\n", size, +"\nRequested %d bytes, static heap exhausted! base is %p, current ptr\n" +"is %p. You have exhausted the static heap. \n" +"\n" +"If you are simply trying to compile, remove sheap-adjust.h\n" +"and recompile from the top level. If this doesn't\n" +"work then STATIC_HEAP_SLOP (defined in this file) is too small.\n" +"\n" +"If you want to run temacs, change SHEAP_ADJUSTMENT in sheap-adjust.h\n" +"to 0 or a +ve number. Generally you should *not* try to run temacs\n" +"with a static heap, you should dump first.\n", size, static_heap_base, static_heap_ptr); exit(-1); @@ -103,7 +102,7 @@ static_heap_base, static_heap_ptr); return result; } -void +static void sheap_adjust_h () { FILE *stream = fopen ("sheap-adjust.h", "w"); @@ -120,3 +119,32 @@ sheap_adjust_h () fclose (stream); } +void report_sheap_usage (int die_if_pure_storage_exceeded); +void +report_sheap_usage (int die_if_pure_storage_exceeded) +{ + int rc = 0; + + size_t lost = (STATIC_HEAP_BASE + STATIC_HEAP_SLOP + SHEAP_ADJUSTMENT) + - (static_heap_ptr - static_heap_buffer); + char buf[200]; + sprintf (buf, "Static heap usage: %ld of %ld", + (long) (static_heap_ptr - static_heap_buffer), + (long) (STATIC_HEAP_BASE + STATIC_HEAP_SLOP + SHEAP_ADJUSTMENT)); + + if (lost > STATIC_HEAP_SLOP) { + sprintf (buf + strlen (buf), " -- %ldk wasted", (long)(lost/1024)); + if (die_if_pure_storage_exceeded) { + sheap_adjust_h(); + rc = -1; + } + message ("%s", buf); + } + + if (rc < 0) { + unlink("SATISFIED"); + fatal ("Static heap size adjusted, Don't Panic! I will restart the `make'"); + } +} + +