Fix TTY menus on MS-Windows broken by last commit.
[bpt/emacs.git] / src / sheap.c
index 510a75d..5069744 100644 (file)
@@ -1,14 +1,14 @@
 /* simulate `sbrk' with an array in .bss, for `unexec' support for Cygwin;
    complete rewrite of xemacs Cygwin `unexec' code
 
-   Copyright (C) 2004, 2005, 2006, 2007 Free Software Foundation, Inc.
+   Copyright (C) 2004-2014 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
-GNU Emacs is free software; you can redistribute it and/or modify
+GNU Emacs 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, or (at your option)
-any later version.
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
 
 GNU Emacs is distributed in the hope that it will be useful,
 but WITHOUT ANY WARRANTY; without even the implied warranty of
@@ -16,17 +16,28 @@ 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 GNU Emacs; see the file COPYING.  If not, write to
-the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
-Boston, MA 02110-1301, USA.  */
+along with GNU Emacs.  If not, see <http://www.gnu.org/licenses/>.  */
 
 #include <config.h>
 #include <stdio.h>
+
 #include "lisp.h"
 
 #include <unistd.h>
 
-#define STATIC_HEAP_SIZE       (12 * 1024 * 1024)
+#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;
 
@@ -34,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 *
@@ -41,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
@@ -82,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;
     }
 }
@@ -90,10 +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);
 }
-
-/* arch-tag: 1bc386e8-71c2-4da4-b8b5-c1674a9cf926
-   (do not change this comment) */