remove Lisp_Free struct type
[bpt/emacs.git] / src / sheap.c
index 31414fb..5069744 100644 (file)
@@ -1,7 +1,7 @@
 /* simulate `sbrk' with an array in .bss, for `unexec' support for Cygwin;
    complete rewrite of xemacs Cygwin `unexec' code
 
-   Copyright (C) 2004-2011 Free Software Foundation, Inc.
+   Copyright (C) 2004-2014 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
@@ -20,12 +20,24 @@ along with GNU Emacs.  If not, see <http://www.gnu.org/licenses/>.  */
 
 #include <config.h>
 #include <stdio.h>
-#include <setjmp.h>
+
 #include "lisp.h"
 
 #include <unistd.h>
 
+#ifdef __x86_64__
+#ifdef ENABLE_CHECKING
+#define STATIC_HEAP_SIZE       (28 * 1024 * 1024)
+#else
+#define STATIC_HEAP_SIZE       (19 * 1024 * 1024)
+#endif
+#else  /* x86 */
+#ifdef ENABLE_CHECKING
+#define STATIC_HEAP_SIZE       (18 * 1024 * 1024)
+#else
 #define STATIC_HEAP_SIZE       (13 * 1024 * 1024)
+#endif
+#endif /* x86 */
 
 int debug_sheap = 0;
 
@@ -33,6 +45,7 @@ int debug_sheap = 0;
 
 char bss_sbrk_buffer[STATIC_HEAP_SIZE];
 char *bss_sbrk_ptr;
+char *max_bss_sbrk_ptr;
 int bss_sbrk_did_unexec;
 
 void *
@@ -40,7 +53,7 @@ bss_sbrk (ptrdiff_t request_size)
 {
   if (!bss_sbrk_ptr)
     {
-      bss_sbrk_ptr = bss_sbrk_buffer;
+      max_bss_sbrk_ptr = bss_sbrk_ptr = bss_sbrk_buffer;
 #ifdef CYGWIN
       sbrk (BLOCKSIZE);                /* force space for fork to work */
 #endif
@@ -81,6 +94,8 @@ bss_sbrk (ptrdiff_t request_size)
       if (debug_sheap)
        printf ("allocated 0x%08x size %d\n", ret, request_size);
       bss_sbrk_ptr += (int) request_size;
+      if (bss_sbrk_ptr > max_bss_sbrk_ptr)
+       max_bss_sbrk_ptr = bss_sbrk_ptr;
       return ret;
     }
 }
@@ -89,8 +104,9 @@ void
 report_sheap_usage (int die_if_pure_storage_exceeded)
 {
   char buf[200];
-  sprintf (buf, "Static heap usage: %d of %d bytes",
-          bss_sbrk_ptr - bss_sbrk_buffer, STATIC_HEAP_SIZE);
-  message ("%s", buf);
+  sprintf (buf, "Maximum static heap usage: %d of %d bytes",
+          max_bss_sbrk_ptr - bss_sbrk_buffer, STATIC_HEAP_SIZE);
+  /* Don't log messages, cause at this point, we're not allowed to create
+     buffers.  */
+  message1_nolog (buf);
 }
-