Change size of static heap on Cygwin; report maximum usage after dumping.
authorKen Brown <kbrown@cornell.edu>
Sun, 18 Aug 2013 17:37:31 +0000 (13:37 -0400)
committerKen Brown <kbrown@cornell.edu>
Sun, 18 Aug 2013 17:37:31 +0000 (13:37 -0400)
* src/sheap.c (STATIC_HEAP_SIZE): Adjust to current needs; use bigger
static heap if ENABLE_CHECKING is defined.
(max_bss_sbrk_ptr): New variable.
(bss_sbrk): Use it.
(report_sheap_usage): Report maximum static heap usage instead of
ending static heap usage.

src/ChangeLog
src/sheap.c

index 7a875ae..671f6af 100644 (file)
@@ -1,3 +1,12 @@
+2013-08-18  Ken Brown  <kbrown@cornell.edu>
+
+       * sheap.c (STATIC_HEAP_SIZE): Adjust to current needs; use bigger
+       static heap if ENABLE_CHECKING is defined.
+       (max_bss_sbrk_ptr): New variable.
+       (bss_sbrk): Use it.
+       (report_sheap_usage): Report maximum static heap usage instead of
+       ending static heap usage.
+
 2013-08-17  Eli Zaretskii  <eliz@gnu.org>
 
        * decompress.c (Fzlib_available_p) [WINDOWSNT]: Update the value
index 54eef60..daff0c1 100644 (file)
@@ -26,10 +26,18 @@ along with GNU Emacs.  If not, see <http://www.gnu.org/licenses/>.  */
 #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;
 
@@ -37,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 *
@@ -44,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
@@ -85,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;
     }
 }
@@ -93,8 +104,8 @@ 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);
+  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);